Настройка инишек (user.ini, ut2004.ini) -> ut.dp.ua

Сообщение r45p|wilson » 04 янв 2005, 15:50

некто незнает как можно размер шрифта в игре поменять .. а то я свой конфиг запарол, взял другой а там настройки манитора нетакие как у меня и кода я ставлю разрешение 1024х768 то шрифт у меня остаётся как будто я на разрешении 800х600 .. очень уж большой, некто неможет помочь? :cry:
Аватара пользователя
r45p|wilson
Школота
Школота
 
Сообщения: 2
Зарегистрирован:
09 дек 2004, 11:09
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 04 янв 2005, 17:14

Menu -> Settings -> (закладка) HUD -> (поле) Message Font Offset -> уменьшить значение
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Сообщение r45p|wilson » 07 янв 2005, 13:51

как можно забиндить выкидовать определёное оружие в тиме не выбирая его а просто на каждую кнопку свая пушка .. а то я как то пробовал сам зделать невышло .. :roll:
Аватара пользователя
r45p|wilson
Школота
Школота
 
Сообщения: 2
Зарегистрирован:
09 дек 2004, 11:09
Has thanked: 0 time
Have thanks: 0 time

Сообщение HUNTER UT2004 » 09 янв 2005, 05:57

Хелп плз...
У меня не работает вид от 3 лица при игре по инету :( , а в Instant Acthion работает... :-? но раньше работало и там и там...
Аватара пользователя
HUNTER UT2004
Школота
Школота
 
Сообщения: 45
Зарегистрирован:
07 окт 2004, 17:56
Откуда: Киев
Has thanked: 0 time
Have thanks: 0 time

Сообщение -mAn- » 09 янв 2005, 12:04

HUNTER UT2004 писал(а):Хелп плз...
У меня не работает вид от 3 лица при игре по инету :( , а в Instant Acthion работает... :-? но раньше работало и там и там...

На алькаре в настройках сервера запрещён вид от третьего лица.
Аватара пользователя
-mAn-
Новичок
Новичок
 
Сообщения: 105
Зарегистрирован:
09 авг 2001, 02:00
Has thanked: 0 time
Have thanks: 2 times

Сообщение HUNTER UT2004 » 10 янв 2005, 00:51

-mAn- писал(а):
HUNTER UT2004 писал(а):Хелп плз...
У меня не работает вид от 3 лица при игре по инету :( , а в Instant Acthion работает... :-? но раньше работало и там и там...

На алькаре в настройках сервера запрещён вид от третьего лица.




Извиняюсь за тупой вопрос! А почему он запрещен???
Аватара пользователя
HUNTER UT2004
Школота
Школота
 
Сообщения: 45
Зарегистрирован:
07 окт 2004, 17:56
Откуда: Киев
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 10 янв 2005, 09:52

r45p|wilson писал(а):как можно забиндить выкидовать определёное оружие в тиме не выбирая его а просто на каждую кнопку свая пушка .. а то я как то пробовал сам зделать невышло .. :roll:

0=SwitchWeapon 0|OnRelease ThrowWeapon
1=SwitchWeapon 1|OnRelease ThrowWeapon
2=SwitchWeapon 2|OnRelease ThrowWeapon
3=SwitchWeapon 3|OnRelease ThrowWeapon
4=SwitchWeapon 4|OnRelease ThrowWeapon
5=SwitchWeapon 5|OnRelease ThrowWeapon
6=SwitchWeapon 6|OnRelease ThrowWeapon
7=SwitchWeapon 7|OnRelease ThrowWeapon
8=SwitchWeapon 8|OnRelease ThrowWeapon
9=SwitchWeapon 9|OnRelease ThrowWeapon

P.S.
Только жать на кнопку нужно около секунды, иначе будет просто переключаться оружие.
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 27 янв 2005, 13:56

Сомнительна полезность но вот еще один бинд: Стрейф по кругу

Aliases[??]=(Command="Axis aBaseX Speed=-20.0 | Axis aStrafe Speed=+300.0",Alias=CycleStrafeRight)
Aliases[??]=(Command="Axis aBaseX Speed=20.0 | Axis aStrafe Speed=-300.0",Alias=CycleStrafeLeft)

Key1=CycleStrafeLeft
Key2=CycleStrafeRight
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Сообщение HUNTER UT2004 » 14 мар 2005, 01:06

У меня ФПС сейчас упало до 6, но раньше было 40, что делать?
Аватара пользователя
HUNTER UT2004
Школота
Школота
 
Сообщения: 45
Зарегистрирован:
07 окт 2004, 17:56
Откуда: Киев
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 14 мар 2005, 09:09

HUNTER UT2004 писал(а):У меня ФПС сейчас упало до 6, но раньше было 40, что делать?

Выявить причину...
Может проблемы с драйверами (попробуй установить последнюю версию), может в инишках что то перенастроил (попробуй чужие инишки)...
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 10 май 2005, 14:29

Статья: "Создание командного символа"
http://www.prounreal.dp.ua/modules/xoopsfaq/index.php?cat_id=4#q136

Инструменты:
Photoshop
Unreal Editor
UT2004 Server

Шаги:
1) Создаем 2 новых файла в Фотошопе 256х256 точек в формате RGB или CMYK. Убеждаемся в этом через меню Image>Mode menu. Другие цветовые форматы, как Grayscale или Indexed, могут работать неверно.
2) Заливаем его черным цветом.
3) Создаем свою картинку белым цветом. На картинке ниже это показано для примера. Я назвал их Symbol1 и Symbol2.

Изображение

4) Выделяем маской белый цвет, и создаем новый альфа канал (Alpha Layer in Channels).

Изображение

5) Заливаем маску белым. Все белое будет показано в альфа канале.
6) Сохраняем картинку в формате TARGA 32bit

Изображение

7) Открываем UED (Unreal editor) и переходим в просмотр текстур (Texture Browser). Даем команду File->Import.
8) Выбираем обе наши текстуры и щелкаем "Open". Выскочит диалог:

Изображение

9) Указываем имя нашего командного пакаджа (Team Symbol Package). Только не надо использовать имя "FatJimmySymbolsVCTF", придумай что-нибудь своё.
10) Убедись, что флажок "Alpha" установлен, и щелкаем OK ALL.

Изображение

11) Можно видеть две картинки, правильно загруженные с альфа каналом. Делаем правый щелчок на каждой и выбираем "compress" с DXT5.
12) Открываем свойства каждой картинки и меняем их вот так:

Изображение

Surface

bAlphaTetxture = True

Texture

LODSet = LODSET_Interface

UClampMode = TC_Clamp

VClampMode = TC_Clamp

13) Сохрани свой пакадж. Перепиши этот файл в папку "Texture" установленной игры-сервера.
14) Меняем серверный UT2004.ini (или командную строку в UT2004.bat):
синтаксис такой:

?BlueTeamSymbol=FatJimmySymbolsVCTF.Symbol1
?RedTeamSymbol=FatJimmySymbolsVCTF.Symbol2

только вместо "FatJimmySymbolsVCTF", конечно же, свое имя пакаджа.

Полная командная строка может быть такой:
LocalMap=DM-Rankin.ut2?game=XGame.XDeathmatch?AccessControl=XA dmin.AccessControlIni?maxplayers=10?BlueTeamSymbol =FatJimmySymbolsVCTF.Symbol1?RedTeamSymbol=FatJimm ySymbolsVCTF.Symbol2?GameStats=True

15) Добавь свою текстурку в секцию [Engine.GameEngine] файла UT2004.ini, вот так:

[Engine.GameEngine]
ServerPackages=FatJimmySymbolsVCTF

16) А теперь можно радоваться полученным результатам!

Изображение

Изображение

Изображение

(c) +evergreen+
Перевод: Александр Кузьмиченко AKA Santino
Последний раз редактировалось agressor 11 дек 2006, 17:00, всего редактировалось 1 раз.
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 23 май 2005, 16:27

Четыре оружия на одной клавише

Пример для режима ONS:
На клавишу G прописаны Flak, MineLayer, GrenadeLauncher, Bio.

Aliases[32]=(Command="GetWeapon FlakCannon|set input G MySwitch2",Alias="MySwitch1")
Aliases[33]=(Command="GetWeapon ONSMineLayer|set input G MySwitch3",Alias="MySwitch2")
Aliases[34]=(Command="GetWeapon ONSGrenadeLauncher|set input G MySwitch4",Alias="MySwitch3")
Aliases[35]=(Command="GetWeapon BioRifle|set input G MySwitch1",Alias="MySwitch4")

Предварительно на клавишу G пропишите
G=MySwitch1

Инфу предоставил: Agressor AKA zd.Insider
Последний раз редактировалось agressor 11 дек 2006, 16:59, всего редактировалось 1 раз.
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 01 янв 2006, 03:19

Несколько замечаний по регламенту, этике игры и немного о ведении войны Onslaught
UT2004: ONS - основы игры
ONS-Vehicles in UT2004
UT2004: Руководство по ключевым точкам в ONS
Trixing in ONSlaught: The 4th High of Primeval
Советы от _Lynx

http://www.prounreal.dp.ua/modules/xoopsfaq/index.php?cat_id=16
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Сообщение Ekzot » 02 янв 2006, 22:19

там в трикерстве для ОНСа о видео говорицо, в Днепре оно у кого-то есть?
Аватара пользователя
Ekzot
Школота
Школота
 
Сообщения: 39
Зарегистрирован:
08 ноя 2004, 10:27
Откуда: Днепр
Has thanked: 0 time
Have thanks: 0 time

Сообщение agressor » 29 янв 2006, 12:01

Добавлен новый раздел: Unreal Script
Выложена новая статья: Основы работы с Unreal Script

Автор DarwiN

Я конечно чайник в этом деле, но хотел бы поделиться тем, что уже узнал сам...

Урок 1

Подготовка к работе
Компилятор UCC.exe для UnrealScript устроен таким образом, что принимает только определённую структуру расположения папок со скриптами. Дело в том, что для начала вам необходимо создать все условия для того что бы компилятор нашёл ваш исходный код и создал U-файл (такие файлы называются Packages, но для простоты далее мы будем употреблять слово пакаджи) с определённым именем. Делается это так:
-->В папке UnrealTournament (там где находятся папки System, Maps, Textures и т.д.) создаём свою папку с названием нашего мутатора. Именно с таким названием будет создан наш U-файл или по-другому пакадж. В нашем случае имя папки будет, например, MyGame.

--> В папке MyGame создаём папку Classes. В этой папке будут храниться наши файлы скриптов (UC-файлы).

--> Теперь необходимо сообщить UCC.exe, что скрипты, лежащие в папке MyGame должны быть скомпилированы. Для этого в файле UnrealTournament.ini, находящемся в UnrealTournament/System, нужно дописать строчку EditPackages=MyGame после других строчек, начинающихся с EditPackages, в конце секции [Editor.EditorEngine].
Для упрошения создайте BAT-файл с именем compile.bat, откройте его и впишите такие строки:
cd ..
cd ..
cd System
del MyGame.u
ucc make
Это обеспечит нам переход в папку UnrealTournament/System, удаление старой версии нашего мутатора и запуск UCC.exe с параметром Make. Рекомендую в свойствах нашего BAT-файла убрать флажок «Закрывать окно по завершении сеанса работы», так как нам нужно видеть какие ошибки возникли в процессе компиляции.

Основной код мутатора
Итак, приступим. Основой каждого мутатора, создаваемого пользователем, является класс, наследующий свойства и методы класса Mutator. Создайте в папке MyGame текстовый файл MyGame.uc и впишите в него следующие строки:

//===================================
// MyGame ; This is mutator script.
// Description: You gain life equal to the amount of damage you do to
// an enemy.
//===================================

class MyGame expands Mutator;

var bool Initialized;

var() float LifeStolenPerHit;
var() int MaxLife;
var() bool bInflictedDamageOnly;

function PostBeginPlay()
{
if (Initialized)
return;
Initialized = True;
Level.Game.RegisterDamageMutator( Self );
}

function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation,
out Vector Momentum, name DamageType)
{
if ((InstigatedBy.IsA('Bot') || InstigatedBy.IsA('PlayerPawn')) && (Victim != InstigatedBy) && (InstigatedBy != None) && (Victim != None))
{
if ((Victim.Health < ActualDamage) && bInflictedDamageOnly)
ActualDamage = Victim.Health;
InstigatedBy.Health += ActualDamage * LifeStolenPerHit;

if ((InstigatedBy.Health > MaxLife) && (MaxLife != 0))
{
InstigatedBy.Health = MaxLife;
}
}

if ( NextDamageMutator != None )
NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType );
}

defaultproperties
{
LifeStolenPerHit=1.000000
MaxLife=200
bInflictedDamageOnly=True
}

Теперь детально разберём этот текст.
Как видите в начале файла стоят строки:

//===================================
// MyGame ; This is mutator script.
// Description: You gain life equal to the amount of damage you do to
// an enemy.
//===================================

Всё, что стоит после символов //, считается комментарием. Этот комментарий является однострочным, то есть символами // можно закомментировать только тот участок текста, который стоит после этих символов и до конца строки. В UnrealScript есть также многострочный комментарий. Он начинается с символов /* и заканчивается соответственно символами */. Таким образом, весь текст, что стоит между этими символами будет закомментирован. Комментарии не обязательны, но иногда в процессе отладки нужно временно убрать некоторый участок текста. Также комментарии служат для упрощения понимания кода скрипта. В нашем случае в комментарии указано название класса и краткое описание.
Далее идёт описание класса мутатора:

class MyGame expands Mutator;

Описание начинается со слова class, после чего идёт название описываемого класса. В нашем случае это MyGame. После определения имени класса идёт слово expands, которое означает, что описываемый класс является наследником какого-либо другого класса. И, наконец, идёт имя родительского класса. Так как мы создаём мутатор, то родительским для нашего класса является класс Mutator. Иногда вы можете увидеть в описании других классов, что слово expands заменено на слово extends. С самого начала UnrealScript использовал слово expands, но довольно давно оно было заменено на слово extends, которое используется в Java. Компилятор принимает их обоих и понимает одинаково, но в следующих версиях движка слово expands может не работать. Поэтому всегда используйте слово extends когда у вас есть выбор. Пусть в нашем примере будет слово expands что бы вы видели, что бывают различные методы описания, но всё таки потом рекомендуется заменить его на слово extends. Как видите, в конце строчки ставится сивол ; (точка с запятой). Он является разделительным символом и ставится в конце строки после описания чего-либо или после выражений. Точка с запятой не ставится перед символом { и после символа }. Заметьте также, что имя описываемого класса должно совпадать с именем файла, в котором этот класс определён. Например у нас класс Vampire описан в файле Vampire.uc (это необходимо и в случае отличия будет ошибка). Также после имени родительского класса могут идти модификаторы:

Abstract – данный класс не может быть вызван (spawned), так как является базовым;
Config – значения переменных данного класса сохраняются во внешнем конфигурационном файле. Если после этого ключевого слова стоят скобки с каким либо текстом в них, то значения переменных будут сохраняться в INI-файле с именем, стоящим в скобках. В противном случае (если в скобках ничего нет) значения переменных будут сохраняться в файле UnrealTournament.ini, который используется для этого по умолчанию;
NoUserCreate – данный класс не может быть помещён на уровень с помощью UnrealEd;
Native – некоторые фрагменты данного класса описаны с использованием внешнего программирования (импорт функций из библиотек DLL);
NativeReplication – переменные данного класса полностью описаны с использованием внешнего программирования;
SafeReplace – означает, что ссылка на этот класс может быть изменена на Null (пустая ссылка) или на значение по умолчанию, если данный класс не найден ни в одном из пакаджей. Пакаджи сами по себе не имеют свойства SafeReplace. Например вы в редакторе сделали свою карту с применением двух текстур MyTex1 и MyTex2 из пакаджа MyTextures.utx, а потом сохранили.
Если теперь вы удалите из пакаджа MyTextures.utx текстуру MyTex1, то на вашей карте те грани, на которые была наложена текстура MyTex1, покроются другой текстурой (той, которая выбрана по умолчанию) и карта всё равно будет запускаться. Но если теперь удалить сам пакадж MyTextures.utx и запустить карту, то игра выдаст сообщение об ошибке: &laquo;Пакадж MyTextures.utx не найден&raquo;;
Within <Класс> - обьекты данного класса могут быть созданы только внутри указанного Класса (это не работает для UnrealTournament v 420);
PerObjectConfig – информация о каждом обьекте данного класса должна храниться в конфигурационном файле отдельно под секцией с названием, зависящим от его (обьекта) имени. Смотри описание ключевого слова Config;
Transient – данный класс не включается при сохранении игрового соcтояния (в Unreal);
NoExport – не экспортировать в заголовок C++. Исполнение через командную строчку "UCC.exe Make -h" не будет генерировать автоматически заголовок C++ для функций и событий, описанных с помощью внешнего программирования.

После описания класса обычно идёт описание переменных (свойств, параметров) класса:

var bool Initialized;

var() float LifeStolenPerHit;
var() int MaxLife;
var() bool bInflictedDamageOnly;

Описание переменной начинается со слова var (от англ. Variable - величина), после чего идёт тип переменной (например, float, bool, int, string и т.д.), а за ним имя переменной. Если за словом var стоят скобки, то это означает, что этот параметр помещается в каком-нибудь разделе. Пример: если в скобках указано название раздела Display, а переменная называется bUnlit, то в редакторе UnrealEd можно изменять значение данного параметра через окно Actor properties. В случае, когда в скобках не указано ничего, редактор UnrealEd не даёт возможности изменять значение параметра и единственный способ сделать это – редактировать раздел defaultproperties в скрипте класса (об этом ниже). Иногда вместо слова var вы можете встретить другие слова. Все они как и var обозначают характер описываемого свойства.
Они могут быть следующие:

var – переменная, может принимать различные значения в зависимости от типа;
const – константа. Не может быть изменена ни из UnrealScript, ни из вне (с помощью внешнего программирования);
local – используется только внутри функций. Данная переменная существует на этапе исполнения функции, в которой она описана, а потом её значение будет утеряно.

Описываемые переменные могут быть следующих типов:

bool – бинарная переменная для логических опираций. Значения: True/False (Правда/Ложь);
int – целое значение от –2147483648 до 2147483647 (включая пределы);
byte – целое значение от 0 до 255 (включая пределы). Значение, которое выходит за эти границы будет заворачиваться. Пример: число 256, введённое в переменную типа byte примет значение 0;
float – вещественное значение, десятичная дробь;
string – строка символов, заключённых в двойных кавычки;
name – идентификатор (имя), заключённый в одинарные кавычки. Имена могут содержать только буквы. Цифры и символ подчёркивания. Регистр букв в именах не имеет значения.

После описания списка параметров идёт тело функции, заключённое в фигурные скобки.
Итак, перейдём к рассмотрению функций (методов), описанных в нашем мутаторе.

Первым идёт метод PostBeginPlay(), который у нас определяется так:

function PostBeginPlay()
{
if (Initialized)
return;
Initialized = True;
Level.Game.RegisterDamageMutator( Self );
}

Этот метод вызывается после создания экземпляра класса мутатора. Короче, почти в самом начале. Тут сначала с помощью служебной переменной Initialized мы проверяем мутатор на инициализацию. Если мутатор инициализирован, то выйти из данной функции (return – выйти из тела функции). В противном случае (мутатор не инициализирован) – функция выполняется дальше и вызывается метод RegisterDamageMutator с параметром Self, указывающим на данный мутатор. Метод RegisterDamageMutator необходимо вызывать в тех мутаторах, где нужно что-либо делать, когда живым обьектам (Pawn) наносится урон. Этот метод регистрирует наш мутатор как DamageMutator. Если мутатору не будет поставлен такой статус, то функция MutatorTakeDamage для обработки нанесённого урона вызываться не будет.

Далее описывается функция, которая и является костяком всего мутатора.

function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation,
out Vector Momentum, name DamageType)
{
if ((InstigatedBy.IsA('Bot') || InstigatedBy.IsA('PlayerPawn')) && (Victim != InstigatedBy) && (InstigatedBy != None) && (Victim != None))
{
if ((Victim.Health < ActualDamage) && bInflictedDamageOnly)
ActualDamage = Victim.Health;
InstigatedBy.Health += ActualDamage * LifeStolenPerHit;

if ((InstigatedBy.Health > MaxLife) && (MaxLife != 0))
{
InstigatedBy.Health = MaxLife;
}
}

if ( NextDamageMutator != None )
NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType );
}

Эта функция вызывается тогда, когда один живой обьект (Pawn) наносит урон другому. Она вызывается в методе TakeDamage живого обьекта, которому был нанесён урон, если мутатор зарегистрирован как DamageMutator. Если наш мутатор будет работать, то игра сначала определит какой урон наносит один игрок другому с помощью оружия и параметры попадания, затем идёт проверка инвентаря игрока на предмет наличия брони для уменьшения урона, а потом мы можем обработать это событие по-своему и изменить сам механизм нанесения урона. Как видите, процедура имеет некоторые параметры:

out int ActualDamage – параметр, определяющий величину нанесённого урона. Величина урона должна быть целым числом (int).Так как параметр описан со словом out, то это означает, что в процедуру через данный параметр будет передано некоторое значение, которое мы можем обработать и изменить, а затем уже оно будет возвращено обратно во внешний код;
Pawn Victim – параметр, указывающий на обьект, которому был нанесён урон. Это жертва;
Pawn InstigatedBy – параметр, указывающий на обьект, который нанёс урон жертве. Это подстрекатель;
out Vector HitLocation – параметр, содержащий вектор, координаты которого определяют координаты точки попадания. Именно в эту точку подстрекатель нанёс урон жертве. Так как параметр описан со словом out, то это означает, что в процедуру через данный параметр будет передано некоторое значение, которое мы можем обработать и изменить, а затем уже оно будет возвращено обратно во внешний код;
out Vector Momentum – параметр, определяющий вектор отдачи при получении урона жертвой. Так как параметр описан со словом out, то это означает, что в процедуру через данный параметр будет передано некоторое значение, которое мы можем обработать и изменить, а затем уже оно будет возвращено обратно во внешний код;
name DamageType – параметр, определяющий тип наносимого урона. В соответствии с различными типами урона можно описать различные методы его обработки.

Далее в теле функции идёт проверка:

if ((InstigatedBy.IsA('Bot') || InstigatedBy.IsA('PlayerPawn')) && (Victim != InstigatedBy) && (InstigatedBy != None) && (Victim != None))

Тут проверяется:
- Является ли подстрекатель ботом;
- Является ли подстрекатель игроком;
- Не совершила ли жертва суицид;
- Существует ли жертва как обьект;
- Существует ли подстрекатель как обьект.
Эти проверки нужны для корректной работы мутатора. Если данные условия выполняются, то выполняется следующий отрезок кода:

if ((Victim.Health < ActualDamage) && bInflictedDamageOnly)
ActualDamage = Victim.Health;
InstigatedBy.Health += ActualDamage * LifeStolenPerHit;

if ((InstigatedBy.Health > MaxLife) && (MaxLife != 0))
{
InstigatedBy.Health = MaxLife;
}

Его можно разбить на две части.
Первая часть:

if ((Victim.Health < ActualDamage) && bInflictedDamageOnly)
ActualDamage = Victim.Health;
InstigatedBy.Health += ActualDamage * LifeStolenPerHit;

Тут оценивается количество жизни у жертвы и в зависимости от параметров bInflictedDamageOnly и LifeStolenPerHit нашего мутатора начисляется определённое количество жизни подстрекателю.
Вторая часть:

if ((InstigatedBy.Health > MaxLife) && (MaxLife != 0))
{
InstigatedBy.Health = MaxLife;
}

Тут оценивается количество жизни подстрекателя после получения дополнительной жизни. В зависимости от параметра MaxLife нашего мутатора жизнь подстрекателя будет ограничена определённым числом или не будет ограничена вообще (кроме ограничения поставленного разработчиками в игре).

Таким мы определили свой механизм нанесения урона, который кроме стандартного уменьшения количества жизни жертвы также даёт определённое количество жизни подстрекателю.

После всего этого (в конце функции) идут стандартные для DamageMutator’ов строки:

if ( NextDamageMutator != None )
NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType );

Они отвечают за корректную работу механизма нанесения урона, который описан в нашем мутаторе в том случае, когда кроме нашего мутатора подключены другие мутаторы, которые имеют статус DamageMutator и определяют функцию MutatorTakeDamage по-своему.
Тут идёт проверка на наличие следующего DamageMutator’а. Если такой мутатор есть, то выполняется его метод MutatorTakeDamage. Таким образом после обработки урона нашим мутатором его обрабатывает следующий DamageMutator и так далее пока все DamageMutator’ы не обработают наносимый урон.

В конце описания любого класса всегда (или почти всегда) идёт раздел defaultproperties. В этом разделе между фигурными скобками указываются имена переменых класса и значения, которые будут присвоены им по умолчанию. Когда создаётся обьект (экземпляр) какого-либо класса, то Unreal смотрит раздел defaultproperties и присваивает соответствующим переменным определённые разработчиком значения. Если этого раздела нет или в нём нет какой-либо переменной, то в качестве значений по умолчанию будут поставлены значения, указанные в разделе defaultproperties класса, который является родительским для нашего.

Вот и всё. Класс нашего мутатора описан. Теперь нужно скомпилировать текст скрипта в пакадж. Если вы всё делали в соответствии с действиями указанными в разделе &laquo;Подготовка к работе&raquo;, то вам нужно просто зайти в папку UnrealTournament/MyGame и запустить файл COMPILE (ярлык на файл compile.bat). Если в процессе компиляции будут возникать ошибки, то ещё раз прочитайте и проделайте указанные в данной статье действия по написанию кода скрипта. В результате правильной компиляции мы должны получит файл MyGame.u в папке UnrealTournament/System.
Осталось только присоединить наш пакадж к движку Unreal Tournament. Игра должна &laquo;увидеть&raquo; наш мутатор и поместить его в список рядом с другими мутаторами. Это делается с помощью INT-файлов.
Создайте в папке System текстовый файл, назовите его MyGame.int и откройте в каком-либо текстовом редакторе (Wordpad например).
Добавьте следующие строки:

[Public]
Object=(Name=MyGame.MyGame, Class=Class, MetaClass=
Engine.Mutator, Description="MyGame, You gain life equal to the amount of damage you do to an enemy.")

Это и есть привязка. Тут указывается имя мутатора как класса, тип обьекта, родительский класс и описание. Имя состоит из имени пакаджа и имени класса в нём, разделяющихся точкой. Тип нашего обьекта – Class, а не текстура или звук. Родительским является класс Mutator, описанный в пакадже Engine. Описание состоит из двух предложений, разделяемых запятой. Первое предложение определяет имя мутатора в списке мутаторов, а второе – строчку, которая будет показываться в стоке состояния снизу экрана.
Сохраните и закройте этот файл.
Теперь запускайте UnrealTournament, выбирайте ваш мутатор в списке и начинайте новую игру.

На этом первый свой урок закончу скоро будет продолжение...

www.planetunreal.ru
Последний раз редактировалось agressor 11 дек 2006, 17:01, всего редактировалось 1 раз.
AKA zd.Insider
Аватара пользователя
agressor
Путешественник
Путешественник
 
Автор темы
Сообщения: 362
Зарегистрирован:
07 фев 2002, 02:00
Откуда: Днепропетровск
Has thanked: 0 time
Have thanks: 0 time

Пред.След.

Вернуться в Unreal Tournament

Кто сейчас на конференции

Посетителей: 9, из них зарегистрированных: 0, скрытых: 0 и гостей: 9 (находятся на конференции)
Этот раздел просматривают: нет зарегистрированных пользователей и гости: 9