Да я видел, просто удивилса что там нельзя декомпилировать. Порылса в коде аврила... того что советовал не нашел))) там возможность самонаводки учтена в коренном класе прожектиля... ну и как-то все универсализировано - осуждать не берусь, но после тукейного кода очень непривычно на такое смотреть. Но к сути: проверки как таковой игрок это или вехикл там нету - пустой ивент с коментарием, что стандартно мол лочимся только на павнах, а другие пушки могут захотеть на чем-то другом, и это надо будет проверять сдесь (где коментарий). Вариант - дописать в пустом can_lockon "return true", но вероятно пушка начнет лочитса на всем подряд. Идеальный вариант - скопировать функцыю (adjust_lock*** ) от рокетланчера - там отличие только в двух местах: у рокета есть строчка с чем-то относительно PRI (player replication info?), а у аврила есть кусок касательно ракеты (у рокета сложная система зарядки, и видать это в другом месте). Короч если кто возьметса то помогу с дебагингом))э
Это пи..дец полный. Вы с какой планеты? А я когда комп купил, думал тоже игру какую нибудь сделать... Ага б..ядь.
Сообщение отредактировал Creativ - Среда, 21 Января 15, 08:27
Что-то странное они намутили с тем компилятором. Я в принципе все скрипты сделал, но вот в чём проблема, если как в той статье я ложу файлы в (только в 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 - Среда, 21 Января 15, 21:51
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%, если нет конкретного файла - ошыбка будет в том файле который первый хочет использовать недостающий (тип переменной, заспавнить и т.д) и то, какая в таком случае будет ошыбка зависит от алгоритма роботы компилятора и структуры кода.
ЦитатаGP ()
файл LongBowAvril.uc в студию
тяжело скопипастить в спойлер?
Сообщение отредактировал GP - Четверг, 22 Января 15, 00:25
А по поводу кода - он тебе ничего не даст, но раз так хочешь то попробуй найти эту ошибку: 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', которого не существует.
Сообщение отредактировал GP - Четверг, 22 Января 15, 01:05
... походу ты не понял как всё тут устроено. Для начала прочитай статью как делать моды на УТ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
Сообщение отредактировал XCanG - Четверг, 22 Января 15, 22:15
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. Только тогда ты своей функцыей "затмиш" функцыю суперкласа. НО! В тукее например такое не всегда получаетса провернуть: содержымое функцыии можно поменять, а вот шапку, которая идет в описание редко. Так что лучше первый вариант. Как по мне первый вариант "правильней" - так как ты не меняеш того что тебе не надо менять. Проблем с самонаводкой не будет, так как твоя пушка подклас стандартной, и ей свойственно все, что свойственно ей до тех пор, только если это не переделать криво, поэтому нет ничего кривого в обращении к стандартному прожектилю типа "смотри, я тоже стандартная пушка а не что-попало".
Сообщение отредактировал GP - Четверг, 22 Января 15, 22:58
Ааа, вот она где собака зарыта, вот именно этот класс мне надо изменить. Я думал сначала что этот класс для другого нужен и не стал его дубликат делать.
Тогда стоит переделать. Если я первым вариантом сделаю, тогда я могу избавиться в 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 отличия, в детали проверок не вникал. Возьми ту функцыю из рокет ланчера и замени ей, от авриловской оставь только кусок про прожектиль в конце, которого у рокетланчера явно нет.