• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Тутор по созданию телепорта в любую часть локациии

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
Думаю, каждый готоман хотел бы иметь возможность телепортироваться не в заранее выбранное руной место, а в любую часть локации.
Я давно хотел создать такой телепорт, но всё руки не доходили. И вот недавно я наконец собрался и написал скрипт, который даёт такую возможность.
Делал я всё на основе "Возвращения", но никто не мешает скриптеру создать подобный телепорт для любого мода по этому образцу.
Что нужно делать:
Нам поможет функция Npc_GetNearestWP();, которая возвращает ближайший вейпоинт для нпс.
Создадим новые инстанции в файле IT_Misk.d:
//===============================================================================

var string TeleportLocation;// - две используемые переменные
var int GetLevelUsed;

instance ItMi_GetTeleport(C_Item)
{
name = "Камень определения";
mainflag = ITEM_KAT_RUNE; // - чтобы не искать долго, определяем категорию как "руна"
flags = ITEM_MISSION;
value = 250;
visual = "ItMi_RuneBlank.3DS"; - //выглядит как "чистая" руна
material = MAT_STONE;
on_state[0] = Use_ItMi_GetTeleport;
scemeName = "MAP";
description = "Камень определения";
text[2] = "Определяет место телепортации";
text[5] = NAME_Value;
count[5] = value;
};

func void Use_ItMi_GetTeleport()
{
GetLevelUsed = CurrentLevel; // - это понадобиться позже
TeleportLocation = Npc_GetNearestWP(hero); // - получаем ближайший вейпоинт для ГГ и записываем его в переменную TeleportLocation
// - то, что ниже, сделано для "Возвращения", по образцу можно создать для любого мода
if (CurrentLevel == NEWWORLD_ZEN)
{
PrintScreen("Зона телепортации - Хоринис",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == OldWorld_Zen)
{
PrintScreen("Зона телепортации - Долина Рудников",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == DRAGONISLAND_ZEN)
{
PrintScreen("Зона телепортации - Залы Ирдората",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == ADDONWORLD_ZEN)
{
PrintScreen("Зона телепортации - Яркендар",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == ORCTEMPEL_ZEN)
{
PrintScreen("Зона телепортации - Храм Спящего",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == ABANDONEDMINE_ZEN)
{
PrintScreen("Зона телепортации - Заброшенная золотая шахта",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == ORCGRAVEYARD_ZEN)
{
PrintScreen("Зона телепортации - Кладбище орков",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == ORCCITY_ZEN)
{
PrintScreen("Зона телепортации - Гар Урок, подземный город орков",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == SHVALLEY_ZEN)
{
PrintScreen("Зона телепортации - Долина Теней",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == FREEMINELAGER_ZEN)
{
PrintScreen("Зона телепортации - Перевал",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == OLDMINE_ZEN)
{
PrintScreen("Зона телепортации - Старая шахта",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == FREEMINE_ZEN)
{
PrintScreen("Зона телепортации - Свободная шахта",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == DEMONSTOWER_ZEN)
{
PrintScreen("Зона телепортации - Затопленная башня Ксардаса",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == DEADGROT_ZEN)
{
PrintScreen("Зона телепортации - Башня Туманов",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == PSICAMP_ZEN)
{
PrintScreen("Зона телепортации - Старый лагерь Братства",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == SECRETISLAND_ZEN)
{
PrintScreen("Зона телепортации - Остров Этлу",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == UNDEADZONE_ZEN)
{
PrintScreen("Зона телепортации - Город Мертвых",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == DEMONCAVE_ZEN)
{
PrintScreen("Зона телепортации - Пещера боли",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == PALADINFORT_ZEN)
{
PrintScreen("Зона телепортации - Королевский форт Азган",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == LOSTISLAND_ZEN)
{
PrintScreen("Зона телепортации - Забытый остров",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == FIRECAVE_ZEN)
{
PrintScreen("Зона телепортации - Пещера Духа Огня",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == GUARDIANCHAMBERS_ZEN)
{
PrintScreen("Зона телепортации - Залы Хранителей",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == UNCLAVE_ZEN)
{
PrintScreen("Зона телепортации - UNCLAVE_ZEN",-1,-1,FONT_Screen,2);
}
else if(CurrentLevel == HARADRIMARENA_ZEN)
{
PrintScreen("Зона телепортации - Арена Харадримов",-1,-1,FONT_Screen,2);
}
else
{
PrintScreen("Шут знает что такое...",-1,-1,FONT_Screen,2);
};
CreateInvItems(self,ItMi_GetTeleport,1);
AI_DropItem(self,ItMi_GetTeleport); // - камешек остаётся в месте, где его использовали, чтобы потом можно было его подобрать
};

instance ItMi_Teleport(C_Item)
{
name = "Камень телепортации";
mainflag = ITEM_KAT_RUNE;
flags = ITEM_MISSION;
value = 250;
visual = "ItMi_RuneBlank.3DS";
material = MAT_STONE;
on_state[0] = Use_ItMi_teleport;
scemeName = "MAP";
description = "Камень телепортации";
text[2] = "Телепортирует героя в место,";
text[3] = "Указанное камнем определения.";
text[5] = NAME_Value;
count[5] = value;
};

func void Use_ItMi_teleport()
{
if(GetLevelUsed == CurrentLevel) // - проверяем локацию, на которой используется телепорт. Если он использован на локации, где был использован камень определения, телепортируем героя, если нет...
{
Ai_Teleport(hero,TeleportLocation); // - (телепорт ГГ на сохранённый вейпоинт)
AI_PlayAni(hero,"T_HEASHOOT_2_STAND");
}
else
{
PrintScreen("Слишком далеко...",-1,-1,FONT_Screen,2); // - ...то срабатывает эта строчка.
};
};

Минусы:
  • Если на локации мало вейпоинтов, то ГГ может телепортировать далеко от места использования камня
  • При перезагрузке игры теряется значение переменной TeleportLocation, будьте осторожны! Меня при тесте забросило на корабль к оркам, пока искал выход, убили :(
Плюсы: очевидны ;)
Если вы например упадёте куда-нибудь, откуда никак не выбраться, можно просто воспользоваться телепортом, а не чит-режимом.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
DUSTinghoFFman
А где описывается:
ItWr_GetTeleport ?
Или вместо этого: instance ItMi_GetTeleport(C_Item)?
 

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
Упс, забыл исправить. Писал наспех, времени не было :)
 

zauron

Участник форума
Регистрация
26 Янв 2010
Сообщения
36
Благодарности
0
Баллы
150
DUSTinghoFFman, а как прописать эффект телепортации как у стандартной руны телепорта?
 
Сверху Снизу