PipeBomb

Тема в разделе "Кодинг", создана пользователем baikal_87, 28 апр 2015.

  1. baikal_87

    baikal_87 Соучастник

    Доброго времени суток!
    Появилась нужда сделать чтобы PipeBomb взрывалась в случае если игрок наступит на нее.

    Вопрос: Где в коде это отслеживается?

    Я так понял это в классе PipeBombProjectile, в функции Timer, вот этот кусок:

    if( !bEnemyDetected )
    {
    bAlwaysRelevant=false;
    PlaySound(BeepSound,,0.5,,50.0);

    foreach VisibleCollidingActors( class 'Pawn', CheckPawn, DetectionRadius, Location )
    {
    if( CheckPawn == Instigator || KFGameType(Level.Game).FriendlyFireScale > 0 &&
    CheckPawn.PlayerReplicationInfo != none &&
    CheckPawn.PlayerReplicationInfo.Team.TeamIndex == PlacedTeam )
    {

    Тут отслеживается когда к мине подходишь и она начинает пищать громче.

    Как сделать чтобы когда игрок подходит она сдетанировала и нанесла ему урон?
     
  2. Flame

    Flame -Заслуженый кодер форума-

    Тут мы игрались с этим)

    Но вообще я бы выкинул нафик таймер
    И в ProcessTouch отслеживал бы людишек)
     
  3. baikal_87

    baikal_87 Соучастник

    Спасибо за ответ.

    А можно пример кода с функцией ProcessTouch. Ну т.е. как отследить именно людишек?

    if( KFHumanPawn(CheckPawn) != none )
    Explode(Location, vector(Rotation));

    Так будет верно?
     
  4. Flame

    Flame -Заслуженый кодер форума-

    Ну у меня для зомбиков так
    function Timer()
    {}

    simulated function ProcessTouch( actor Other, vector HitLocation )
    {
    if (
    (
    KFMonster(Other.Instigator)!=None
    && KFMonster(Other.Instigator).Mass>400
    )
    ||
    (
    KFMonster(Other)!=None
    && KFMonster(Other).Mass>400
    )
    )
    {
    Explode(Location, vector(Rotation));
    Destroy();
    }
    if(Other.bBlockHitPointTraces)
    return;
    if(Other.IsA('NetKActor'))
    KAddImpulse(Velocity,HitLocation,);
    if (
    !Other.bWorldGeometry
    && (
    Other != Instigator && Other.Base != Instigator
    || bCanHitOwner
    )
    )
    {
    Velocity = Vect(0,0,0);
    }
    }
    CheckPawn в ProcessTouch нет, там эктор Other есть. Можно так попробовать

    if (
    KFHumanPawn(Other.Instigator)!=None
    || KFHumanPawn(Other)!=None
    )
    {
    Explode(Location, vector(Rotation));
    Destroy();
    }

    И возможно надо будет поиграться с

    CollisionRadius=10.000000
    CollisionHeight=5.000000

    В defaultproperties

    Может показаться непонятной проверка KFHumanPawn(Other.Instigator)!=none
    Иногда Pawn касается мины не собой, а классом обёрткой
    И чтобы добраться до тела надо проверять Other.Instigator
     
  5. baikal_87

    baikal_87 Соучастник

    Понял, спасибо, попробую!
     
  6. Flame

    Flame -Заслуженый кодер форума-

    Только ты меня под спойлер запихни)
    Цитатку
    А то и я и админы агримся))

    Upd. О. Спасибо (и админчики - удалите этот пост)) )