Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология.
Creating a XP system
автор: Brain | 1 Ноября 2010 | Просмотров: 6362
Автор: mktwo
Перевод: Voland
Оригинал: Creating a XP system


Прежде всего убедитесь, что Вы уже знаете как устанавливать эти коды, т.к. в этом уроке это не объясняется. Во-вторых, я полагаю что Вы уже немного знакомы с UnrealScript. Например, Вы должны знать как наследуемые классы работают,и как делается свой тип игры, как сделать свой собственный HUD, PlayerController и т.д. Если Вы не знаете всего этого то можно некоторые вещи посмотреть на этом сайте, также на других русских сайтах и естественно на заморских, например тут.

HUD создан по этому уроку.


Здесь представлены файлы для работы.


MyGame.uc
MyPlayerController.uc
SeqAct_GiveXP.uc (optional)
MyHUD.uc


MyGame.uc

Скрипт содержит наш созданный тип игры

class MyGame extends UTGame;

// Функция, которая выполняется после каждого убийства
function ScoreKill(Controller Killer, Controller Other)
{
local MyPlayerController PC;

super.ScoreKill(Killer, Other);

  PC = MyPlayerController(Killer); // переход к пользовательскому классу MyPlayerController
  PC.GiveXP(100); //Позволяет изменять количество получаемого опыта
}

DefaultProperties
{
// DefaultPawnClass = class'UTGame.UTPawn'
PlayerControllerClass = class'MyGame.MyPlayerController'
HUDType = class'MyGame.MyHUD'
}




MyPlayerController.uc

Здесь мы получаем опыт, повышаем уровень. Функции не находятся в MyPawn для того чтобы опыт сохранялся после смерти.

class MyPlayerController extends UTPlayerController
config(MyGame);

const MAX_LEVEL = 50;
 const XP_INCREMENT = 500; // Количество опыта до следующего уровня
var int XP; // Общая сумма собранных XP
 var int Level; // Текущий уровень
 var int XPGatheredForNextLevel; // Количество набранного опыта 
var int XPRequiredForNextLevel; // Количество необходимых XP до нового уровня


//При старте игры мы подсчитываем сколько нужно получить опыта чтобы перейти на новый уровень

simulated function PostBeginPlay()
{
super.PostBeginPlay();

// Обсчитываем свойства при старте игры
CalculateLevelProgress();
}


//Здесь мы объявляем функцию,которая позволяет поменять кол-во опыта нужного для следующего уровня через Kismet
// Функция вызываемая из Kismet

public function AddXP(SeqAct_GiveXP action)
{
GiveXP(action.Amount); // Количество опыта получаемого с учетом установки в Kismete
}

//Функция добавления опыта
public function GiveXP(int amount)
{
self.XP += amount;

CalculateLevelProgress();

while (self.XPGatheredForNextLevel >= self.XPRequiredForNextLevel && self.Level < MAX_LEVEL)
{
self.Level++;

  // Пересчитываем опыт после "Level Up"
CalculateLevelProgress();
}
}

//Дальше мы объявляем функцию, которая считает сколько нужно еще опыта для достижения следующего уровня
private function CalculateLevelProgress()
{
local int xpToCurrentLevel; // Текущее количество накопленного опыта

xpToCurrentLevel = XP_INCREMENT * (self.Level - 1);
self.XPGatheredForNextLevel = self.XP - xpToCurrentLevel;
self.XPRequiredForNextLevel = self.Level * XP_INCREMENT;
}

DefaultProperties
{
Level = 1;
XP = 0;
 }


SeqAct_GiveXP.uc (optional)

В этом скрипте мы создаем Sequence Action, который мы будем использовать в Kismet

class SeqAct_GiveXP extends SequenceAction;

var() int Amount; //
Количество XP которое это действие даст

//Добавляем немного информации, чтобы было удобнее использовать в kismet
DefaultProperties
{
// Имя функции в Kismet Editor
ObjName="Add XP"

// Имя функции при использовании
HandlerName="AddXP"

Amount = 0

  // Показывает входы и выходы блока полученного в Kismet
VariableLinks(1)=(ExpectedType=class'SeqVar_Int', LinkDesc="Amount", bWriteable=true, PropertyName=Amount)
}



Используем Kismet для изменения системы получения опыта



Сначала Вы должны сделать триггер, жмем Add Actor > Add Trigger.

Дальше выбираем триггер и идем в kismet. Добавляем триггер New Event Using Trigger_0 > Touch. Дальше добавляем Add XP-action.

Соединяем Touched с In.

Дальше New Variable > Player > Player и цепляем к target

New Variable > Int > Int и пишем количество начисляемого опыта за одно убийство и цепляем к Amount.

Сохраняемся и наслаждаемся результатом!
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#1 написал: Brain
1 Ноября 2010 19:25 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 17.02.2010
Извените, пропустил 1 момент:
Чтобы ХУД можно было увидить в MyGame.uc в Defaultproperties нужно всунуть bUseClassicHUD=true. И если вы хотите чтобы за лвл давалось ХП нужно в MyPlayerController.uc вместо
{
self.Level++;

// Пересчитываем опыт после "Level Up"
CalculateLevelProgress();
}

вставить

{
self.Level++;
pawn.HealthMax = (pawn.health+101);
pawn.health = Pawn.HealthMax;

CalculateLevelProgress();
}


--------------------
Публикаций: 2 | Комментариев: 13      
#2 написал: netgoblin
2 Ноября 2010 01:02 | ICQ: Не Указано |


Группа: Активист
Регистрация: 27.02.2010
этот скрипт подойдет если мы будем сражаться с триггерами =)
Публикаций: 0 | Комментариев: 22      
#3 написал: FACH
2 Ноября 2010 08:05 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
нуну, стопятьсот триггеров сделаем и пулемет - вот наше супер РПГ!!


--------------------
Публикаций: 134 | Комментариев: 778      
#4 написал: Snoopy
2 Ноября 2010 13:05 | ICQ: 597396906 |


Группа: Посетители
Регистрация: 22.07.2010
хах а ты не пробовал сделать монстров не агр и побить их ? опыт даеться а также если человека бьешь опыт даеться!

Клева Тёма клево это 1 что мы с тобой сделали на пути к рпг =)


--------------------
Публикаций: 1 | Комментариев: 10      
#5 написал: FACH
2 Ноября 2010 14:37 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Тихо сам с собою я веду беседу…
Не во всех играх, когда бьешь опыт получаешь и\или убиваешь


--------------------
Публикаций: 134 | Комментариев: 778      
#6 написал: Snoopy
2 Ноября 2010 16:08 | ICQ: 597396906 |


Группа: Посетители
Регистрация: 22.07.2010
вообщето в рпг за убийство монстра дают опыт! =)


--------------------
Публикаций: 1 | Комментариев: 10      
#7 написал: FACH
2 Ноября 2010 16:48 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
В ТЕС не так


--------------------
Публикаций: 134 | Комментариев: 778      
#8 написал: Igrom
4 Ноября 2010 12:30 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 12.11.2009
А карма как же? =) А как реализовать начисление опыта в зависимости от ЛВЛа моба? Это ручками для каждого прописывать или рандомно можно? И еще вопрос... урок для создания инвентаря будет?
Публикаций: 0 | Комментариев: 5      
#9 написал: Snoopy
4 Ноября 2010 18:04 | ICQ: 597396906 |


Группа: Посетители
Регистрация: 22.07.2010
инвенарь будет )))) но если я найду человека знающего флеш )))) и Брайн будет свободен ))))


--------------------
Публикаций: 1 | Комментариев: 10      
#10 написал: alexut
5 Ноября 2010 23:16 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 12.12.2009
Код хороший,но всё равно каждому его предёться дописывать для каждого конкретного случая.Но для базового-вполне.


--------------------
Публикаций: 0 | Комментариев: 46      
#11 написал: nikolayxxx
6 Ноября 2010 04:05 | ICQ: 455775817 |


Группа: Посетители
Регистрация: 13.03.2010
когда сам себя убиваешь получаешь 100 ХР lol
Публикаций: 0 | Комментариев: 8      
#12 написал: Igrom
6 Ноября 2010 09:19 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 12.11.2009
От чего они флеш подключили вместо UiScene?
Публикаций: 0 | Комментариев: 5      
#13 написал: Snoopy
6 Ноября 2010 11:13 | ICQ: 597396906 |


Группа: Посетители
Регистрация: 22.07.2010
хд народ я нашел в исходниках удк вот такой инвентарь ХДДД мне смешно и жутко интересно! smile [IMG]http://imglink.ru/thumbnails/06-11-10/9b5794324239854efdbe03e7d6138d5a.jpg[
/IMG]


--------------------
Публикаций: 1 | Комментариев: 10      
#14 написал: FACH
7 Ноября 2010 17:22 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
А ты уверен что это в УДК?


--------------------
Публикаций: 134 | Комментариев: 778      
#15 написал: Snoopy
7 Ноября 2010 19:09 | ICQ: 597396906 |


Группа: Посетители
Регистрация: 22.07.2010
ага ага в 8 версии вот расположение файлов D:\UDK\UDK-xxxx-xx\Development\Flash\CLIK\demos


--------------------
Публикаций: 1 | Комментариев: 10      
#16 написал: ScorpyX
10 Ноября 2010 00:57 | ICQ: 333879808 |


Группа: Активист
Регистрация: 13.08.2009
пост хороший \ для тех кто хочет разобраться в этом.. я полагаю

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


--------------------
Публикаций: 0 | Комментариев: 45      
#17 написал: SergMD
11 Декабря 2010 11:53 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 4.11.2010
спасибо урок очень полезный. а разное количество опыта можно реализовать формулой (если удк это позволяет) типа хр= 100*(a/b) где "а"-уровень персонажа "ь"- уровень моба, так же для уровня моба можно ввести модификатор класса (например белка 20го уровня дает мало опыта, а голем 20го много)

ой забыл дописать... *тогда каждому мобу надо будет добавить только 1 числовой параметр- уровень. (ну или два если вводить модификатор класса)
Публикаций: 0 | Комментариев: 4      
Информация
Посетители, находящиеся в группе Гости, не могут оставлять Комментарии в данной новости...






При копировании материалов, активная ссылка на UNREAL-LEVEL.RU обязательна!
© 2008—2012, UNREAL-LEVEL.RU. Все права защищены.