Форум - Russian Tournament » Игры » UnrealED » Просьбы, подсказки, помощь.
Просьбы, подсказки, помощь.
UberSoldier
Если я првильно понял это куб, просто нажми на кубик создать кубобраш и он станет ровный и орентацию там вкл что бы порог перемещения был в см-2см-4см и т.д.
Чет в карте знакомое suspicious

Infinite War v5.0.2 construction
UIP 2.0 - UIPP(UIP 2.1)
Malcolm
GP, спасиб за помощь, я тупо забыл про rotation...  yaoming
XCanG
UberSoldier, как продвигается твой пак с танками? Есть какие-то новые скриншоты или видео? (с сентября, когда я тут последний раз был)

Мой IP сменился с 89.113.234.78/185.42.146.32 на 83.167.1.167. Теперь будет этот. Надолго. Порты те же.
http-сервер
.do impossible   beat unbeatable
UberSoldier

Цитата
как продвигается твой пак с танками?
Да ну так, медленно, нового не особо чего.
Тут есть пару скринов.

Infinite War v5.0.2 construction
UIP 2.0 - UIPP(UIP 2.1)
Gadavre
Ребят, всем привет! Я также как и UberSoldier доделываю свой мутатор, но пока  мои грандиозные задумки не выходят, так как знать надо unreal engine  не просто по кусочкам из сети, а академически. А все самое простое я уже сделал.

Как Вы думаете, что означает это условие в стейте Function ScoreKill (Pawn Killer, Pawn Other) ?

Код
If (Killer != None && Killer != Other)
{
}
То есть условие такое,  что , если убийца не пустое место и убийца не игрок и бот, то.... ?
Сообщение отредактировал Gadavre - Понедельник, 05 Декабря 16, 11:24
Reborn
Function ScoreKill (Pawn Killer, Pawn Other)
If (Killer != None && Killer != Other)
Код
Function ScoreKill (Pawn Убийца, Pawn Жертва)
If ( Убийца != None && Убийца !=  Жертва)
 
То есть если не самоубийство.

Тут отсекаются два
варианта  -
упал или бросился в пропасть (в этом случае   Убийца == None )
или пристрелил сам себя из гранатомёта  (в этом случае   Убийца ==  Жертва)
Сообщение отредактировал Reborn - Четверг, 08 Декабря 16, 10:31
Gadavre
Ребят, все пытаюсь прикрутить ботам  ut99 способность поражать игрока на дальних дистанциях, чтобы зум игрока не был больше преимуществом в борьбе с искуственным интеллектом.  В оригинальной  игре игрок может спокойно залезть  на какую-нибудь башню и  спокойно расстреливать godlike ботов, что не есть хорошо.

Максимальное значение  осторожности бота в игре 1.000000, я же увеличил это значение в 2 раза и, о чудо! появилась уже анимация стрельбы бота в игрока, но выстрела самого почему то нет.... Я добавил стейт стрельбы при условии прицеливания бота, но че то не проходит.  Что нужно добавить или исправить, но что, никак не пойму, хотя перерыл класс бота вдоль и поперек. Хотелось бы прочесть ваши любые идеи по поводу решения этой проблемы.

Код
function ModifyPlayer(Pawn Other)    // called by GameInfo.RestartPlayer()
{   
        Bot(Other).BaseAlertness = 2.000000;
       Other. Visibility = 255;  //  в оригинале  видимость павна 128
       if(VSize(Bot(Other).Location - Target.Location) > 0)  //  расстояние между ботом и его целью (target)
                           GotoState ( 'PlayFiring' ); // запуск стейта стрельбы из снайперки.
                    
                         
    if ( NextMutator != None )
              NextMutator.ModifyPlayer(Other);
}

А вот сама функция PlayFiring    в классе снайперки из которой бот стреляет. В классе ничего не менял.

Код
simulated function PlayFiring()
{
    local int r;

    PlayOwnedSound(FireSound, SLOT_None, Pawn(Owner).SoundDampening*3.0);
    PlayAnim(FireAnims[Rand(5)],0.5 + 0.5 * FireAdjust, 0.05);

    if ( (PlayerPawn(Owner) != None)
        && (PlayerPawn(Owner).DesiredFOV == PlayerPawn(Owner).DefaultFOV) )
        bMuzzleFlash++;
}
Сообщение отредактировал Gadavre - Пятница, 09 Декабря 16, 17:43
Gadavre
Цитата Gadavre ()
У тебя этот код выполняется ровно один раз же
То есть нужно добавить в конце return ?
Reborn
Судя по вашему посту, функция ModifyPlayer(Pawn Other) // called by GameInfo.RestartPlayer()
выполняется каждый раз при респауне игрока (GameInfo.RestartPlayer() )
Когда в руках у бота енфорсер и он не видит противника.
В этот момент вы приказываете ему стрелять (в кого??????)

Выстрелив (уж не знаю, из пистолета или из пальца) бот спокойно занимается дальше своими делами.

В стейте 'PlayFiring' он держаться не будет - выполнив стейт один раз, он запросит движок что ему делать дальше, и тот даст ему разумный ответ (например, бежать за оружием). На этом выполнение вашего кода закончится.
Return здесь не поможет.

(Добавлено) Возможно, я ошибаюсь, но мне казалось, что за дальность зрения бота отвечает переменная
SightRadius=5000.000000
Это примерно 500 метров. На бОльшем расстоянии бот просто не видит врага.
Сообщение отредактировал Reborn - Пятница, 09 Декабря 16, 19:17
Gadavre
Цитата Reborn ()
Когда в руках у бота енфорсер и он не видит противника.В этот момент вы приказываете ему стрелять (в кого??????)
У   моего бота модифицированная снайперка.   Я не указываю боту стрелять в кого то . Я пытался создать условие при  котором, при расстоянии между ботом и игроком более 0 метров бот  производит выстрел.

Код
if(VSize(Bot(Other).Location - PlayerPawn(Other).Location) > 0)
                      GotoState ( 'PlayFiring' );
Цитата Reborn ()
(Добавлено) Возможно, я ошибаюсь, но мне казалось, что за дальность зрения бота отвечает переменная SightRadius=5000.000000
Это примерно 500 метров. На бОльшем расстоянии бот просто не видит врага.
Да, отвечает и я эксперементировал с этой переменной. Однако при стандартном значении 5000.000000 и   с добавлением
Код
Bot(Other).BaseAlertness = 2.000000;
Бот реагирует прицеливанием из  снайперки в сторону игрока, то есть, я так понимаю он игрока видит  и смысла увеличивать SightRadius нет... Я увеличивал SightRadius аж до 20000, однако бот никак не реагировал на игрока, как буддто в коде стоит какое-то ограничение.

Кстати я могу снять видео для Вас на Deck16, чтобы Вы увидели что происходит
Сообщение отредактировал Gadavre - Пятница, 09 Декабря 16, 19:20
Reborn
В любом случае, стейта 'PlayFiring' у бота нет. Функция - это не стейт.
Команда GotoState ( 'PlayFiring' ); не будет иметь никакого эффекта:
движок построен так, что при отправке актера в несуществующий стейт ничего не происходит.
Единственное, что вы возможно получите, это ошибку в логе, и то я не знаю, пишется она в лог или нет.

Вот статья о стейтах: http://unrealscript.narod.ru/tutorials/scripting/states/states.html
(Добавлено) если бот прицеливается. но на стреляет, должна быть где-то ошибка.
Я в свое время "провешивал" лог, чтобы определить какие функции выполняются, а какие нет.
В начале каждой функции добавлял строку:
Код
log ("выполнена функция такая-то"
);
Это помогало определять что именно выполняется и в каком порядке.
Когда находилась глючная функция - добавлял  log (****); после каждой строки, и выводил в него значения переменных. Это позволяло понять, в какой именно строке происходит сбой, и что именно не работает.
Сообщение отредактировал Reborn - Пятница, 09 Декабря 16, 19:23
Gadavre
Цитата Reborn ()
В любом случае, стейта 'PlayFiring' у бота нет. Функция - это не стейт.
У бота нет, но этот стейт есть в классе снайперки, которая в руках у бота.

Попытаетесь помочь разобраться? Все материалы по игре и то что нужно вам дам.
Reborn
Так вы же бота посылаете в стейт 'PlayFiring', а не снайперку.

Нет, не буду пытаться - нет времени, и с UT1 я не работал, даже не уверен, что она у меня запустится.
Если в классе снайперки такой стейт действительно есть - проверьте входит ли снайперка в этот стейт в процессе игры. Ну и в любом случае не мешает выложить код целиком - может кто-нибудь скажет что-нибудь умное.
Gadavre
Цитата Reborn ()
любом случае не мешает выложить код целиком - может кто-нибудь скажет что-нибудь умное.
Выложу конечно код, если кто возьмется. Кстати, UT99 прекрасно запускается и на windows 10. Я  также бы дал. если нужно конфиг вытягивающий графику на максимум, а также все необходимое для компиляции.

Добавлено (10 Декабря 16, 23:15)
---------------------------------------------
Ребят, нашел  полезные статьи по основам программирования  в C++.  На своих жалких  и долгих потугах в скриптинге заявляю, что без этого никак не написать грамотно код для своего мутатора. Всем новичкам обязательно ознакомиться с этими статьями, прежде запиливания своего мутатора!
Ссылка

Добавлено (11 Декабря 16, 12:58)
---------------------------------------------
Вот выложил видео из ut99, в котором бот на большой дистанции не может сделать выстрел, срабатывает только анимация прицеливания в игрока.


Бот стал прицеливаться только после такого изменения в моем мутаторе. В оригинале он просто пробегает и никого не видит.
Код
function ModifyPlayer(Pawn Other)    // called by GameInfo.RestartPlayer()
{
        Bot(Other).BaseAlertness = 2.000000;

        if ( NextMutator != None )
        NextMutator.ModifyPlayer(Other);
}

Прошу по возможности помочь пофиксить этот баг. Чтобы зум игрока не был больше нечестным преимуществом в дуели с искуственным интеллектом.

Добавлено (13 Декабря 16, 12:11)
---------------------------------------------
выяснил на   зарубежном  форуме  сайта  ut99.org, что проблема в том, что бот не стреляет когда видит одну голову игрока. От центра груди бота  в грудь игрока идет линия взгляда ( line of sight). Если на траектории этой линии появляется припятствие, то бот стрелять не будет. Как это профиксить и прописать в мутаторе, чтобы бот, если видит одну голову, то стрелял бы в голову, никто из мировых кодеров форума ut99.org, увы не знает... Предлагают поиграться в самодельных ботов типа MBot_D,  но интереса нет, так как главного, что приближает их к человеку они не делают.
Ccылка на тему

А в  UT2004  и в UT2007 бот также не стреляет в игрока, если видит только одну его голову???
Сообщение отредактировал Gadavre - Вторник, 13 Декабря 16, 12:16
Reborn
Сомневаюсь. 
Мало ли что на зарубежном форуме скажут. 

"что проблема в том, что бот не стреляет когда видит одну голову игрока"
по вашим словам, у вас проблема была с дальностью, то есть начиная с определенной дистанции,  бот не стрелял даже если видел игрока целиком. Что теперь изменилось?

Сделайте в эдиторе "кубик" с пропастью нужной ширины, встаньте на другой стороне, и проверьте, будет ли стрелять бот или нет когда видит вас целиком, и когда видит одну толко голову.

Отладка игры - это очень серьёзная работа, я сильно сомневаюсь, что кто-нибудь захочет за это взяться.

Кстати, в UT2004 бот шарашит в голову только так (даже если видит одну только голову).
Gadavre
Цитата Reborn ()
по вашим словам, у вас проблема была с дальностью, то есть начиная с определенной дистанции, бот не стрелял даже если видел игрока целиком. Что теперь изменилось?
Я думал, что была проблема с дальностью, но это не так. Я спустился вниз с той платформы со снайперкой и занял самую дальнюю точку у стены от той точки, когда бот подымается на лифте и подбегает к ступенькам. Сразу же получил  пулю, так как линия взгляда бота от центра его груди соединилась с центром моей груди.  Вот бы взять код с  ut2004  и перенести его как то в мутатор для UT99. Там наверняка прописаны координаты Line of Sight на голову пешки.  Это была бы революция, новый виток развития кодинга! И Россия могла бы этим прилично удивить товарищей с зарубежья.


Добавлено (13 Декабря 16, 15:12)
---------------------------------------------
Как можно было  бы написать код для увеличения параметра CollisionHeight  для игрока (PlayerPawn)?
Дело в том, что эта переменная относиться к классу Actor, а не к Pawn.  И подобная попытка как например:
PlayerPawn(Other).CollisionHeight = 25.000000;  просто не компилируется. .. :(
Сообщение отредактировал Gadavre - Вторник, 13 Декабря 16, 17:43
Reborn
Line of Sight можно заменить на  функцию Trace или FastTrace.
Там передаются координаты мишени, и их всегда можно поднять на 25 юнитов вверх.
Проблема в том, чтобы найти строку кода, которая отвечает за это безобразие - то есть в какой именно момент бот, уже прицелившись, получает от движка приказ не стрелять.
Gadavre
Цитата UnShame ()
если это не сарказм, ты меня пугаешь
Да,этот был бы прорыв в кодинге для первого движка, ведь никто еще для ut99 ничего подобного не делал! Я бы даже в кафешку пошел бы отметить  это дело!

Добавлено (13 Декабря 16, 20:59)
---------------------------------------------

Цитата Reborn ()
Проблема в том, чтобы найти строку кода, которая отвечает за это безобразие - то есть в какой именно момент бот, уже прицелившись, получает от движка приказ не стрелять.
 Может возможно как-то увеличить переменную CollisionHeight для класса PlayerPawn? Тогда бы методом подбора можно было  бы сместить Line of Sight с груди на голову. Мне кажется, это более простой путь, чем тот, который вы указали.
Reborn
Может возможно как-то увеличить переменную CollisionHeight для класса PlayerPawn?

От переменной  CollisionHeight в классе   PlayerPawn зависит, на какой высоте находится взгляд игрока, на какой высоте находится модель игрока, и может ли он провалиться сквозь землю.

Увеличить  CollisionHeight можно
final function bool SetCollisionSize( float NewRadius, float NewHeight );

При этом возможно три варианта:
1) модель игрока "подпрыгнет вверх", причем его ножки будут болтаться в воздухе.
2) Движок может посчитать, что ноги игрока оказались ниже уровня земли, после чего игрок провалится вниз - в комнату ниже или в черное "никуда".
3) Если высота помещения ниже, чем новая  CollisionHeight, движок посчитает, что игрок там не помещается, и его разорвёт на части.

Короче  CollisionHeight - это ФИЗИЧЕСКАЯ характеристика игрока, на которую завязана вся игровая физика. И лезть в неё нужно в последнюю очередь.  Можете, кстати, попробовать сделать это через функцию ModifyPlayer(Pawn Other) . Были в своё время
мутаторы, меняющие рост игрока.

Добавлено (13 Декабря 16, 23:48)
---------------------------------------------
"И Россия могла бы этим прилично удивить товарищей с зарубежья."
"Я бы даже в кафешку пошел бы отметить это дело!"

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

И я его понимаю - у меня голова трещала, когда в UT2004 я разбирался, что и как происходит при прицеливании. Эпиковские скрипты не то чтоб написаны криво, но слишком сложны для понимания, особенно в той части, где взаимодействуют клиент и сервер.

На мой взгляд, единственным способом решения данной проблемы является составление списка функций, которые последовательно вызываются при прицеливании, и затем постепенная локализация глючной функции.

Однако я морально не готов потратить 4-5 часов на поиск нужной строки, час на написание кода, и ещё 4-5 часов на его отладку (поиск и выявление возможных ошибок). Кроме того, это не просто работа - придется глубоко лезть в движок, рисуя сложные схемы, и держа в памяти тысячи строк кода (оно мне нужно?).
Кроме того, как показывает опыт, результаты моей работы окажутся бесполезны для Gadavre - все особенности работы движка будут помнить я, а не он, и он, не зная их, сам не сможет ничего изменить.

В общем, программирование не та область, где можно что-то сделать вместо программера.
Кто хочет программировать - программируйте сами, а форум используйте для вопросов.

... Разве что у нас на форуме найдется гениальный знаток скриптов, который ткнет пальчиком в код, и скажет "вот эта функция"....

Добавлено (14 Декабря 16, 00:35)
---------------------------------------------
(Добавлено 2)
Как я понимаю, за прицеливание в голову отвечает вот эта функция в UT2004:

Класс bot,
function rotator AdjustAim(FireProperties FiredAmmunition, vector projStart, int aimerror)
{
.............................
if ( Pawn.Weapon != None && Pawn.Weapon.bSniping && Stopped() && (Skill > 5 + 6 * FRand()) )
{
// try head
FireSpot.Z = Target.Location.Z + 0.9 * Target.CollisionHeight;
bClean = FastTrace(FireSpot, ProjStart);
}
}

То есть добавляется 0,9 высоты коллизии и бросается FastTrace.
Если функция  FastTraceвозвращает True (успешно) - бот стреляет в голову.
Причем важно отметить, что прицеливание в голову реализовано только для высокоуровневых ботов.
Хотя меня они на CTF-Face3 только так валили - в Ut2004 ещё и прописано, что человек является для бота приоритетной мишенью, в отличие от собратьев по разуму.
Сообщение отредактировал Reborn - Среда, 14 Декабря 16, 00:40
GP
Цитата Reborn ()
Сначала предложил нам в качестве приза Величие Нации,
затем, когда никто не заинтересовался - бесплатный поход в кафешку.

У меня начальство точно так же идеи закидывает yaoming пока "подводную часть айсберга" не достанеш.
Форум - Russian Tournament » Игры » UnrealED » Просьбы, подсказки, помощь.
Поиск:

Поддержать сайт

ВКонтакте