Да я видел, просто удивилса что там нельзя декомпилировать. Порылса в коде аврила... того что советовал не нашел))) там возможность самонаводки учтена в коренном класе прожектиля... ну и как-то все универсализировано - осуждать не берусь, но после тукейного кода очень непривычно на такое смотреть. Но к сути: проверки как таковой игрок это или вехикл там нету - пустой ивент с коментарием, что стандартно мол лочимся только на павнах, а другие пушки могут захотеть на чем-то другом, и это надо будет проверять сдесь (где коментарий). Вариант - дописать в пустом can_lockon "return true", но вероятно пушка начнет лочитса на всем подряд. Идеальный вариант - скопировать функцыю (adjust_lock*** ) от рокетланчера - там отличие только в двух местах: у рокета есть строчка с чем-то относительно PRI (player replication info?), а у аврила есть кусок касательно ракеты (у рокета сложная система зарядки, и видать это в другом месте). Короч если кто возьметса то помогу с дебагингом))э
Это пи..дец полный. Вы с какой планеты? А я когда комп купил, думал тоже игру какую нибудь сделать... Ага б..ядь.
Что-то странное они намутили с тем компилятором. Я в принципе все скрипты сделал, но вот в чём проблема, если как в той статье я ложу файлы в (только в 7 в:) C:\Users\имя_юзера\Documents\My Games\Unreal Tournament 3\UTGame\Src\класс\Classes\ и компилирую, то мне выдаёт ошибку
Собственно используется почему-то путь в папке стима, хотя непонятно почему, ну допустим, иду я в UTEditor.ini, а там такое написано:
А тут и слова про \Development\Src\ нету, ведт в данном случае проверяется ни путь в документах, ни путь в девелопменте, а в папке стима подпапке UTGame\Src. Проповал переложить в эту папку из инишки - вообще не видит, а если положу туда, где возникает ошибка, то компилятор считает, что ничего компилировать не нужно (он эти исходные коды видит, но .u файл не сохраняет, как будто он уже есть).
В общем что-за херомантия тут творится? Кто-нибуть сможет разобрать это без бутылки? Ну а почти всё, что нужно было написать в кодах самого аврила я уже сделал, только затестить не могу (потому что не компилируется).
Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же. http-сервер .do impossible beat unbeatable
? По содержымому красной строчки ошыбка в самом коде в первой строчке ( начинаетса с 0, тоесть вторая). Unexpected 'i' скорее всего значит что компилятор не понимает что с этим 'i' делать, мол не ожыдал. Причина часто не в той строчке куда тычет ошыбка, а где-то до и или после - точка с запятой не стоят, скобка там... К примеру если не поставить скобку где-то в конце функцыи, ошыбка может возникнуть в самом конце, где не будет хватать скобки, напишет типа "Unexpected end of class" и т.д. - логика нарушытса, но просечет он это уже в полной жопе. Компилятор проверяет код поуровнево - скобки, "граматику, и т.д., от макроструктуры к деталям. Если хочеш конкретики - файл LongBowAvril.uc в студию
GP, первая строчка это вообще наследование и вообще в коде у меня нет никаких i, разделённых пробелами, но суть в том, что у меня файлы лежат в моих документах, а не на диске D в папке стима.
Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же. http-сервер .do impossible beat unbeatable
суть в том, что у меня файлы лежат в моих документах, а не на диске D в папке стима
и что? а у меня исключительно звуки импортируютса только с робочего стола и хоть сдохни, в коде так и пишу ... Audio Import File=С:\Users\....\xxx.wav... Как я могу помочь не видя кода? А относитьльно путей - вспомни танцы с бубном вокруг UDE... пути-пути... ucc компилирует те файлы, которые есть где нужно. Если их вообще нет - другая ошыбка 100%, если нет конкретного файла - ошыбка будет в том файле который первый хочет использовать недостающий (тип переменной, заспавнить и т.д) и то, какая в таком случае будет ошыбка зависит от алгоритма роботы компилятора и структуры кода.
А по поводу кода - он тебе ничего не даст, но раз так хочешь то попробуй найти эту ошибку: http://pastebin.com/6CkFHEG0
Добавлено (22 Января 15, 00:38) --------------------------------------------- Кроме того вместе со скриптами лежат UTAmmo_LongbowAvril.uc (патроны), UTProj_LongbowAvrilRocket.uc (прожектиль (где я увеличил ему скорость, как просили)), UTWeap_LongbowAvril.uc (подклас UTWeapon), UTWeap_LongbowAvril_Content.uc (подклас предыдущего файла, т.к. он шёл вместе с дефолтным аврилом)
Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же. http-сервер .do impossible beat unbeatable
А теперь мои "идеи": 1 - в тукее например не нужны исходники классов, которые уже скомпилированы и роботают. Нужны только те скрипты которые ты делаеш - соответственно скачаные исходники ложыть никуда не надо - они нужны чтоб разобратса как роботает код и скорее всего просто не скомпилируютса (попробуй скомпилируй в тукее пакедж engine например) 2 - исходя их структуры тех же стандартных исходников, система похожа.
- че за х___я??? Ты хочеш запихнуть свою пушку в пакедж UTGame??? Считай что Development = Unreal Tournament 3, должно быть (по моему мнению) C:\Users\имя_юзера\Documents\My Games\Unreal Tournament 3\LongbowAvrilPackage\Classes\LongbowAvril.uc 3 - ини файл править уже под это.
Добавлено (22 Января 15, 00:47) --------------------------------------------- Ты сначала попробуй успешно скомпилировать файл с одной строчкой, который просто extend стандартный avril, кроме него ничего в папке classes быть не должно. А тогда уже можна гулять.
Добавлено (22 Января 15, 01:01) --------------------------------------------- И ещо, не являетса ли граблями на первой строчке кодировка? писано что надо ANSI. Хорошее обьяснение для 'i', которого не существует.
... походу ты не понял как всё тут устроено. Для начала прочитай статью как делать моды на УТ3 по ссылке Аншейма, например. Собственно да, я туда положил свои файлы, но ты ошибаешься, я остальные файлы из архива не брал, они вообще нигде там не лежат и не пытаются скомпилироваться. Но этот вариант не прокатил и вышла та ошибка, что на скриншоте. И тут вот в чём загвоздка! В том архиве с исходниками была какая-то папка, а в ней подпапка Developments, а в ней Src. Это просто совпадение, что путь в ошибке совпадает с путём в архиве исходников? Однако этого пути нету в ini-файле, в нём путь который был описан в статье, ЕСЛИ БЫ там была ссылка на диск C с моими документами (хотябы переменная среды), но ведь там написано ..\UTGame, что означает (пример) "C:\A\b\c\d\launcher.exe make" проверяет каталог C:\A\b\c\UTGame, но не C:\Users\....... Поэтому я компилировал после первой ошибки в ...Unreal Tourmanent 3\Development\Src\класс\Classes и я уже сказал, но у меня ведь ошибки небыло и "типа" прошла компиляция, вот только в обещаном ModOutputDir=..\UTGame\Unpublished\CookedPC\Script, ни вообще на компьютере, скомпилированного .u не оказалось. Третий вариант это поместить в ...Unreal Tourmanent 3\UTGame\Src, но в этом случае мне компилятор выдал другую ошибку, что пакадж мой не найден нигде и компиляция невозможна.
Добавлено (22 Января 15, 01:04) --------------------------------------------- Этот код оринтировочно правильный в стиле UT2004. Я всё специально сверил, вот только в чём дело и проблема ли вообще в самом коде, а не компиляторе, я не знаю.
Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же. http-сервер .do impossible beat unbeatable
- че за х___я??? Ты хочеш запихнуть свою пушку в пакедж UTGame??? Считай что Development = Unreal Tournament 3, должно быть (по моему мнению) C:\Users\имя_юзера\Documents\My Games\Unreal Tournament
На UE3 можно сразу несколько проектов иметь, то есть у тебя может быть UTGame и еще что-то, и они будут независимо друг от труга работать. В ут3 тотальные конверсии таким образом работают.
Добавлено (22 Января 15, 12:11) --------------------------------------------- Попробовал скомпилировать, получил туже ошибку, оказалось, что проблема в кодировке поменял на UTF-8, все скомпилировалось
UnShame, у тебя файлы лежали в моих документах? И кодировка UTF-8 или UTF-8 without BOM? Сейчас и вчера у меня все .uc файлы были в кодировке UTF-8.
Я тут подумал может это стимовский UT3 какой-то не такой или что. У тебя какой установлен?
Добавлено (22 Января 15, 15:01) --------------------------------------------- Да, сделал UTF-8 without BOM и теперь компилирование пошло дальше, а всё лежало в моих документах. Вот только теперь ему не нравится ошибка в стандартном коде, который я не менял пока.
Код
simulated function EndFire(byte FireModeNum) { local UTPlayerController PC; local int i; local UTProj_AvrilRocketBase Rocket; local UTPawn P;
if (FireModeNum == 1 && bTargetingLaserActive) { // targeting laser altfire bTargetingLaserActive = false; LaserEffect.DeactivateSystem(); WeaponPlaySound(TargetingLaserStopSound); ClearFlashLocation(); P = UTPawn(Instigator); if (P != None) { P.SetWeaponAmbientSound(None); } // lose target lock on any rockets we were controlling for (i = 0; i < TargetedProjectiles.length; i++) { Rocket = UTProj_AvrilRocketBase(TargetedProjectiles[i]); if (Rocket != None && Rocket.LockingWeapon == self && Rocket.MyWeapon != self) { Rocket.SetTarget(None, self); // ошибка в этой строчке, это 615-ая строка } } TargetedProjectiles.length = 0; }
Вот только теперь ему не нравится ошибка в стандартном коде, который я не менял пока.
если ты не юзал исходный код, а декомпилировал, то из-за этого
иначе - хз
Добавлено (22 Января 15, 15:33) --------------------------------------------- вообще, в гугле по UE3 куча информации, значительно больше, чем про UE2, так что ищи там, если что-то не работает
. Так как я понял из туториалов в ини файле мы говорим компилятору где скрипты лежат, тоесть ModPackagesInPath=..\UTGame\Src - папка мода, в которой все пакеджы мода, а ModPackages=LongbowAvril - папка-пакедж в которой непосредственно папка с классами.
По ошыбке: ошибка говорит, что второй параметр в Rocket.SetTarget(None, self) не того типа, что должен быть. Например функцыя хочет чтоб там был павн, а ты пихаеш туда переменную A, которая в var описана как актор (var Actor A), и может быть чем угодно. И даже если ты проверил павн ли это, надо писать Pawn(A). в таком случае если А павн или подклас павна - то все ок, а если нет то там просто получитса none. Если покороче то нужно: посмотреть какого типа вторая переменная в класе UTProj_AvrilRocketBase, т.к. он кастомный, то в его суперкласе. посмотрел... если твой UTWeap_LongbowAvril extends UTWeap_Avril можно self заменить на UTWeap_Avril(self), или в класе прожектиля прожектиля изменить чтоб он обращалса не к UTWeap_Avril а к UTWeap_LongbowAvril.
Предположитльно хотелось бы второй вариант сделать, так как если я буду наследовать, то возможно появятся проблемы из-за другой системы прицеливания (которую я собирался настроить после первой удачной компиляции -_-), поэтому я наследую от UTWeapon, а не от Аврила. Это в случае с патронами, с прожектилем я могу наследовать от аврильских патронов и прожектиля, изменив только defaultproperties.
Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же. http-сервер .do impossible beat unbeatable
Extennds - расшыряет, дополняет... каждый клас наследует все функцыи предшественника и то что ты их не копировал ничего не значит - они там есть, там даже есть все функцыи которые есть в Actor и тем более в Object. Ты их не пишеш, но они берутса "которая ближе по дереву". (очевидно, но на всякий случай пишу) У тебя UTProj_LongbowAvrilRocket это подклас UTProj_AvrilRocket, он в свою очередь подклас UTProj_AvrilRocketBase. Другими словами: открой UTProj_AvrilRocket, в нем нет функцыи которую вызывает пушка, значит лезеш в его суперклас - UTProj_AvrilRocketBase. Вот в нем есть функцыя "function bool SetTarget(Actor NewTarget, UTWeap_Avril NewLockOwner)" Как видиш второй параметр имеет тип UTWeap_Avril. Вот эту функцыю целиком с кишками копируеш в свой прожектиль изменив тип с UTWeap_Avril на UTWeap_LongbowAvril. Только тогда ты своей функцыей "затмиш" функцыю суперкласа. НО! В тукее например такое не всегда получаетса провернуть: содержымое функцыии можно поменять, а вот шапку, которая идет в описание редко. Так что лучше первый вариант. Как по мне первый вариант "правильней" - так как ты не меняеш того что тебе не надо менять. Проблем с самонаводкой не будет, так как твоя пушка подклас стандартной, и ей свойственно все, что свойственно ей до тех пор, только если это не переделать криво, поэтому нет ничего кривого в обращении к стандартному прожектилю типа "смотри, я тоже стандартная пушка а не что-попало".
Ааа, вот она где собака зарыта, вот именно этот класс мне надо изменить. Я думал сначала что этот класс для другого нужен и не стал его дубликат делать.
Тогда стоит переделать. Если я первым вариантом сделаю, тогда я могу избавиться в UTWeap_LongbowAvril от тех функций, где я не вношу никаких изменений и оставить только те, где я изменю самонаводку, при этом оружие будет новое с нужными нам параметрами, так ведь?
Добавлено (22 Января 15, 23:20) --------------------------------------------- Если тупо не менять код, а изменить наследование, то мне компилятор выдал варинги на все функции, что они уже объявлены, но компиляция наконец-то прошла успешно.
Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же. http-сервер .do impossible beat unbeatable
Понимаеш, если например обьявить переменную как прожектиль, то ты можеш через нее напрямую обращатса к функцыям прожектиля, а если ты обьявил эту переменную как актор, то чтоб воспользоватса функцыями прожектиля тебе нужно указать, что твой актор есть именно прожектиль Даже если ты ей присвоил 100% прожектиль, компилятор это не интересует, там может быть любой актор, и доступны функцыи только те, которые есть у всех акторов (общие), и так далее. Твой прожектиль есть подклас стандартного, тоесть тупо копия. А стандартный прожектиль расчитан на стандартную пушку, и его копия тоже. Поэтому ему приходитса обьяснять, что твоя пушка это тоже "типа стандартная", или переделать так, чтоб его не интересовало какая пушка. Первое проще и короче. В тукее к примеру такое в основном с эфектами - например в ракете переменная взрыва указана не как эмиттер, а как конкретный его подклас, скажем рокет_експложын_эмиттер. И вместо него другой эмиттер подставить в дефолт пропертис не получитса - выбьет ошыбку, и в коде а не в дефолт пропертис. А если переменную указать как просто эмиттер, то можно будет спавнить и стандартный и любой другой, все что емиттер. Но если у тебя емиттер с какими-то дополнительными, которые ты собираешся использовать, то тебе придетса либо его прописать конкретно, либо каждый раз в коде указывать что это не просто эмитер, а особенный.
ЦитатаXCanG ()
Если я первым вариантом сделаю, тогда я могу избавиться в UTWeap_LongbowAvril от тех функций, где я не вношу никаких изменений
В иделе, те функцыи, которых ты не меняеш писать не надо, они есть сами по себе, просто пишеш моя_херня extends стандартная_херня, и все, может быть пустой файл - это уже копия, в нем уже все есть что есть в стандартной_херне, не надо копировать текст из оригинала. Копируеш толко те функцыи, которые ты переделываеш, и те которые жестко задают типы (вот эта последняя ошыбка). Чесно говоря, смотря на то как тут все сделано, я бы тебе посоветовал просто скопировать все что связано с аврилом. Тоесть не делать свою пушку как подклас аврила, прожектиль как подклас стандартного и т.д, а сделать просто копию всех файлов со всем их содержымым просто с другими названиями, не менять им екстендс. А уже в самих файлах менять везде где есть посылка на стандартное поставить свои названия. Торетически это длинный путь, но он надежный, и менять можно будет что угодно без гемороя. к примеру поменял ты название с "прожектиль" на "новый_прожектиль", и просто во всех файлах ищеш поиском где попадаетса слово "прожектиль" и меняеш его на "новый_прожектиль", и так скаждым.
Настроил скорость. И кстати, лол, нашёл опечатку в коде
Так-же сделал так, чтобы после сброса фокуса с цели автонаведение не терялось, но вот что не получается, так это наведение на павн.
Вот что по теме я нашёл в коде, но привязки именно к технике я не заметил и тут ступор.
Код
native function UpdateLockTarget(Actor NewLockTarget);
/** * This function is used to adjust the LockTarget. * Called by UpdateLockTarget() only when NewLockTarget is different from LockTarget */ event AdjustLockTarget(actor NewLockTarget) { if ( (NewLockTarget == None) || NewLockTarget.bDeleteMe ) { // Clear the lock if (bLockedOnTarget) { } } else { // Set the lock bLockedOnTarget = true; LockedTarget = NewLockTarget; if ( LockAcquiredSound != None && Instigator != None && Instigator.IsHumanControlled() ) { PlayerController(Instigator.Controller).ClientPlaySound(LockAcquiredSound); } }
CheckLockZoom();
if (MyRocket != none) { MyRocket.SetTarget(NewLockTarget, self); } }
Код
/** * Given an actor (TA) determine if we can lock on to it. By default only allow locking on * to pawns. Some weapons may want to be able to lock on to other actors. */ native function bool CanLockOnTo(Actor TA);
Что тут изменить, чтобы наведение было и на игроков я не знаю.
Добавлено (23 Января 15, 00:52) ---------------------------------------------
ЦитатаGP ()
может быть пустой файл
Это то я знаю. Конкретно интересовал тот факт, когда я делаю обращение к функции, код которой не написан в этом контексте (то есть ни одного упоминания), то нужно ли её наличие или нет. Эта вещь мне пришла от опытов в программировании на С, когда мы классы объявляли public или private, либо когда работа была с мультипоточной оптимизацией и объявление функции в одном потоке не всегда означало, что второй поток сможет получить к ней доступ без дублирования оной.
ЦитатаGP ()
к примеру поменял ты название с "прожектиль" на "новый_прожектиль", и просто во всех файлах ищеш поиском где попадаетса слово "прожектиль" и меняеш его на "новый_прожектиль", и так скаждым.
Это и тому подобное я сделал сразу же, как только сделал дубликаты кода, ещё до того момента как написал мутатор, заменяющий оружие на карте.
Добавлено (23 Января 15, 00:53) --------------------------------------------- В общем у меня готово всё, кроме наведения на пехоту.
Добавлено (23 Января 15, 00:56) --------------------------------------------- UnShame, кстати, раз ты компилировал тоже, ты не в курсе как безопасно можно закрыть консоль? В саму консоль написать ничего нельзя (в тукее можно было ввесли quit), а любая попытка её закрыть вызывает окно, словно компилятор повис ("программа не отвечает, что выберете: поиск в инете, закрыть принудительно, отладка приложения") и каждый раз я закрываю её таким способом, лол.
Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же. http-сервер .do impossible beat unbeatable
если ты запустил ярлыком или бат-файлом, хз. Если запускал из консоли, та что "типа дос", то можно юзать кнопку Pause/Break, но не факт что здесь поможет.
ЦитатаXCanG ()
привязки именно к технике я не заметил и тут ступор.
ЦитатаGP ()
проверки как таковой игрок это или вехикл там нету - пустой ивент с коментарием, что стандартно мол лочимся только на павнах, а другие пушки могут захотеть на чем-то другом, и это надо будет проверять сдесь (где коментарий). Вариант - дописать в пустом can_lockon "return true", но вероятно пушка начнет лочитса на всем подряд. Идеальный вариант - скопировать функцыю (adjust_lock*** ) от рокетланчера - там отличие только в двух местах: у рокета есть строчка с чем-то относительно PRI (player replication info?), а у аврила есть кусок касательно ракеты (у рокета сложная система зарядки, и видать это в другом месте).
Сейчас не уверен что там только 2 отличия, в детали проверок не вникал. Возьми ту функцыю из рокет ланчера и замени ей, от авриловской оставь только кусок про прожектиль в конце, которого у рокетланчера явно нет.