Новые сообщения Участники Правила Поиск
Помощь по SDK для Serious Sam 1.05/1.07
Andrey Пятница, 10.02.2017, 07:29 | Сообщение # 2671


Сообщений: 268
Награды: 1
Замечания: 0%
 
По какой-то неведомой мне причине в моём моде не работает ЛОД у моделей. Если открыть эту же модель в оригинальной игре или другом моде, то всё работает как надо. Возможно я где-то испоганил код, но если заменить в другой мод мои EntitiesMP, то там всё работает. Пробовал убрать все длл из мода вообще - всё равно ЛОД не работает. В чём может быть проблема? В моде я дополнял ModelHolder2, но я не изменял ничего, только добавлял новые функции

seriously_petr Пятница, 10.02.2017, 19:09 | Сообщение # 2672


Сообщений: 446
Награды: 4
Замечания: 0%
 
Andrey, Вполне может быть, что ЛОДы отключены в настройках (файлах конфигурации).

Jack_Stone Воскресенье, 26.02.2017, 18:08 | Сообщение # 2673


Сообщений: 146
Награды: 1
Замечания: 0%
 
Скажите, пожалуйста, как сделать фиксированный прицел? :)

Heming_Hitrowski Воскресенье, 26.02.2017, 18:17 | Сообщение # 2674


Double Jumper
Сообщений: 888
Награды: 32
Замечания: 0%
 
/hud_bCrosshairFixed=1 вроде бы

Jack_Stone Понедельник, 27.02.2017, 08:01 | Сообщение # 2675


Сообщений: 146
Награды: 1
Замечания: 0%
 
Спасибо, получилось, но не до конца. Пули всё равно летят не туда, где прицел: например, если упереться в стену или смотреть вниз, то Сэм стреляет ниже.

art-serious Понедельник, 27.02.2017, 12:47 | Сообщение # 2676


Старый маппер
Сообщений: 652
Награды: 29
Замечания: 0%
 
Приближаемся к абстрактному пределу.
Хочу привязать движение (поворот от точки опоры) оружия (и интерфейса. Они привязаны) от направления движения мыши. Где можно глянуть примеры в сорсах или откуда начать копать?
PlayerView.es ?


[ zc-lab.org ] [ Операция "Новый год" - 40% ]
ST27 Понедельник, 27.02.2017, 14:49 | Сообщение # 2677


Сообщений: 460
Награды: 7
Замечания: 0%
 
Jack_Stone, ищешь функцию CalcWeaponPosition в PlayerWeapons, копируешь ее и называешь как-нибудь типа CalcWeaponPositionFixed и далее в ней под строкой // weapon handle заменяешь
Код
if (!m_bMirrorFire) {
  plPos.pl_PositionVector = FLOAT3D( wpn_fX[m_iCurrentWeapon], wpn_fY[m_iCurrentWeapon],
                    wpn_fZ[m_iCurrentWeapon]);
  if (m_bSniping) {
    plPos.pl_PositionVector = FLOAT3D( 0.0f, 0.0f, 0.0f );
  }
} else {
  plPos.pl_PositionVector = FLOAT3D( -wpn_fX[m_iCurrentWeapon], wpn_fY[m_iCurrentWeapon],
                    wpn_fZ[m_iCurrentWeapon]);
}

на следующее:
Код
plPos.pl_PositionVector = FLOAT3D( 0.0f, 0.0f, 0.0f );

А потом заменяешь CalcWeaponPosition на CalcWeaponPositionFixed в функциях UpdateTargetingInfo и PrepareBullet


- My Personal Site -
Jack_Stone Понедельник, 06.03.2017, 07:30 | Сообщение # 2678


Сообщений: 146
Награды: 1
Замечания: 0%
 
STPROD, большое спасибо :)

Добавлено (06.03.2017, 07:27)
---------------------------------------------
Хочу прописать переменную для Nukeballs, но не выходит. Подскажите, пожалуйста, чего не хватает.

Код
--------------------Configuration: EntitiesMP - Win32 Release--------------------
EntitiesMP/PlayerWeapons.es
Compiling...
HUD.cpp
PlayerWeapons.cpp
D:/Images/For_games/SeriousSam/Sam/NE/Sources/EntitiesMP/PlayerWeapons.es(642) : error C2065: 'MAX_NUKEBALLS' : undeclared identifier
D:/Images/For_games/SeriousSam/Sam/NE/Sources/EntitiesMP/PlayerWeapons.es(2810) : error C2065: 'AMMO_NUKEBALLS' : undeclared identifier
D:/Images/For_games/SeriousSam/Sam/NE/Sources/EntitiesMP/PlayerWeapons.es(3296) : error C2065: 'AV_NUKEBALLS' : undeclared identifier
Generating Code...
Error executing cl.exe.

GameMP.dll - 3 error(s), 0 warning(s)

Добавлено (06.03.2017, 07:30)
---------------------------------------------
MAX_NUKEBALLS объявлял, и всё равно как не объявленное пишет:

Код
65 INDEX m_iMaxNukeBalls   = MAX_NUKEBALLS,


AMMO_NUKEBALLS и AV_NUKEBALLS понятия не имею, где объявлять.


ST27 Понедельник, 06.03.2017, 08:35 | Сообщение # 2679


Сообщений: 460
Награды: 7
Замечания: 0%
 
А поиск по всем файлам не помогает, нет? Вот эта вот кнопка

А так, файл Common.h


Прикрепления: 0302447.png (12.0 Kb) · 4106552.png (16.3 Kb) · 7522841.png (9.1 Kb)


- My Personal Site -
Jack_Stone Понедельник, 06.03.2017, 09:14 | Сообщение # 2680


Сообщений: 146
Награды: 1
Замечания: 0%
 
STPROD, спасибо :)

Jack_Stone Понедельник, 13.03.2017, 18:59 | Сообщение # 2681


Сообщений: 146
Награды: 1
Замечания: 0%
 
Помогите, пожалуйста с кодом. Я хочу сделать так, что биомех при ходьбе мог ранить других монстов и Сэма (как бык или бензопильщик при беге), прописал по аналогии, объявил все нужные переменные, но все равно не работает. Что может быть не так?

Код
/************************************************************
*                   ATTACK SPECIFIC                        *
************************************************************/
  void IncreaseKickedMass(CEntity *pen) {
    EntityInfo *peiTarget = (EntityInfo*) (pen->GetEntityInfo());
    if (peiTarget!=NULL) {
      m_fMassKicked += peiTarget->fMass;
    }
  };

/************************************************************
*                      ATTACK FUNCTIONS                    *
************************************************************/
  // touched another live entity
  void LiveEntityTouched(ETouch etouch) {
    if (m_penLastTouched!=etouch.penOther || _pTimer->CurrentTick()>=m_fLastTouchedTime+0.25f) {
      // hit angle
      FLOAT3D vDirection = en_vCurrentTranslationAbsolute;
      vDirection.Normalize();
      ANGLE aHitAngle = FLOAT3D(etouch.plCollision)%vDirection;
      // only hit target in front of you
      if (aHitAngle < 0.0f) {
        // increase mass - only if not another bull
        if (!IsOfSameClass(this, etouch.penOther)) {
          IncreaseKickedMass(etouch.penOther);
        }

        // store last touched
        m_penLastTouched = etouch.penOther;
        m_fLastTouchedTime = _pTimer->CurrentTick();
        // damage
        FLOAT3D vDirection = m_penEnemy->GetPlacement().pl_PositionVector-GetPlacement().pl_PositionVector;
        vDirection.Normalize();
        InflictDirectDamage(etouch.penOther, this, DMT_CLOSERANGE, -aHitAngle*40.0f,
          FLOAT3D(0, 0, 0), vDirection);
        // kick touched entity
        FLOAT3D vSpeed = -FLOAT3D(etouch.plCollision);
        vSpeed = vSpeed*10.0f;
        const FLOATmatrix3D &m = GetRotationMatrix();
        FLOAT3D vSpeedRel = vSpeed*!m;
        if (vSpeedRel(1)<-0.1f) {
          vSpeedRel(1)-=5.0f;
        } else {
          vSpeedRel(1)+=5.0f;
        }
        vSpeedRel(2)=5.0f;

        vSpeed = vSpeedRel*m;
        KickEntity(etouch.penOther, vSpeed);
      }
    }
  };

  // touched entity with higher mass
  BOOL HigherMass(void) {
    return (m_fMassKicked > 500.0f);
  };
Сообщение отредактировал Jack_Stone - Понедельник, 13.03.2017, 19:51


Heming_Hitrowski Понедельник, 13.03.2017, 22:56 | Сообщение # 2682


Double Jumper
Сообщений: 888
Награды: 32
Замечания: 0%
 
Сложно сказать с первого взгляда. Попробуй проставить CPrintF'ы где-нибудь в месте, где должен наноситься урон. Если в консоли не будет сообщения, то в самом начале процедуры и так далее. Проверь, соблюдаются ли все условия.
Сообщение отредактировал Heming_Hitrowski - Понедельник, 13.03.2017, 23:00


Jack_Stone Вторник, 14.03.2017, 17:55 | Сообщение # 2683


Сообщений: 146
Награды: 1
Замечания: 0%
 
А чем CPrintF может помочь? это же текст.

SLAwww Вторник, 14.03.2017, 18:05 | Сообщение # 2684


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Поменяй родительский класс биомеханоида на CEnemyRunInto, иначе LiveEntityTouched не будет вызван.

Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
Jack_Stone Вторник, 14.03.2017, 18:13 | Сообщение # 2685


Сообщений: 146
Награды: 1
Замечания: 0%
 
Сделал, но все равно урона не происходит :(

Jack_Stone Понедельник, 20.03.2017, 18:40 | Сообщение # 2686


Сообщений: 146
Награды: 1
Замечания: 0%
 
Подскажите, пожалуйста, как прописать изменение переменной в единицу времени после включения функции. Есть ли какая-нибудь общая формула?

SLAwww Вторник, 21.03.2017, 23:44 | Сообщение # 2687


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Ждать можно только в процедурах. Возможно несколько вариантов, в зависимости от ситуации. Если от игрового объекта ничего не требуется делать в течении этой секунды, можно использовать autowait. Если в это время могут обрабатываться другие события, то нужно написать wait с заданным временем ожидания:
Код
wait(1.0f) {
  on (EBegin) : { resume; }
  // тут обрабатываешь остальные события
  on (ETimer) : {
    // тут меняешь свою переменную
    stop;
  }
}

А если в период ожидания объект может перейти в другое состояние (процедуру), нужно использовать CReminder (поищи функцию SpawnReminder). Он через заданное время пришлёт ивент EReminder.


Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
Jack_Stone Вторник, 21.03.2017, 23:47 | Сообщение # 2688


Сообщений: 146
Награды: 1
Замечания: 0%
 
Предыдущий вопрос был некорректный.

Вот по-точнее.

Код
void Flashlight(){
      if (m_iBatCount>0) {
       for(INDEX i=m_iBatCount-1; i<m_iBatCount; i++)
   {
      m_iBatCount--;
   }

     }
   }


Я прописал фонарю батарейки и теперь хочу сделать так, чтобы они кончались (1 единица в секунду). m_iBatCount - батарейка.

Вопрос: Как сделать, чтобы этот цикл повторялся каждую секунду?

Если б хотя бы autowait работал в void, то осталось бы только понять, как запустить функцию заново.

Функция прописана в Player.es
Сообщение отредактировал Jack_Stone - Вторник, 21.03.2017, 23:49


Jack_Stone Среда, 22.03.2017, 00:38 | Сообщение # 2689


Сообщений: 146
Награды: 1
Замечания: 0%
 
SLAwww, а где это нужно прописать?

Цитата SLAwww ()
wait(1.0f) {
on (EBegin) : { resume; }
// тут обрабатываешь остальные события
on (ETimer) : {
// тут меняешь свою переменную
stop;
}
}


SpawnReminder я нашел, но никак не пойму как он работает.

В конечном итоге функция уменьшения батарейки фонаря идет в PlayerWeapons (не знаю глупо это или нет, но это пока единственный рабочий способ, и то наполовину), и если прописывать ее как Event наряду со стрельбой и тд, то она, понятное дело, заглушает и стрельбу и всё остальное, пока фонарь включен.

Есть ли еще способ сделать уменьшение переменной не в PlayerWeapons, а в Player?
Например, если менять что то стандартное - можно ли сделать так, чтобы Супер Бомба после нажатия на клавишу тратилась не один раз, а пока не нажмешь на клавишу снова? То же самое с фонарем - вкл/выкл, другими словами.
Я спрашиваю это, потому что прописал батарейку по аналогии с Бомбой.
Сообщение отредактировал Jack_Stone - Среда, 22.03.2017, 00:50


SLAwww Среда, 22.03.2017, 17:25 | Сообщение # 2690


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Цитата Jack_Stone ()
Если б хотя бы autowait работал в void

Налицо явное непонимание разницы между functions и procedures. Советую прочитать мою статью в последнем выпуске Serious Time ( http://www.serioussite.ru/load/raznoe/serious_time_1_5/10-1-0-2283 ), там я долго и подробно всё это объясняю. Уменьшать переменную раз в секунду ты можешь из любой процедуры.


Where did all the dragons go?
We searched in the hills and we searched down the canyons,
we even scanned the depths of the caves with our armour, swords and lanterns.
Oh, if only had we seen him lurch, from his glorious skull covered perch.

CRACK went his claws and SMACK swipped the tail,
a ROAR of might, one big BITE.

and so ended our search.
Jack_Stone Среда, 22.03.2017, 21:47 | Сообщение # 2691


Сообщений: 146
Награды: 1
Замечания: 0%
 
SLAwww, я в программировании ноль, потому наверное и вопросы глупые. Так что спасибо за помощь, обязательно прочту :) :) Что касается моего вопроса про фонарь, то я сделал что хотел, правда каким-то идиотским и совершенно случайным способом, но зато нужный результат получил. :)

Jack_Stone Воскресенье, 26.03.2017, 21:43 | Сообщение # 2692


Сообщений: 146
Награды: 1
Замечания: 0%
 
Народ, скажите плиз, а можно поставить звуки от ударов ножа по поверхности? Я посмотрел что там с Bullet, много всего. С ножом, я так понял, то же самое? Или как то проще можно? Например сделать отсылку на Bullet. O_o
Сообщение отредактировал Jack_Stone - Воскресенье, 26.03.2017, 21:44


Heming_Hitrowski Воскресенье, 26.03.2017, 23:02 | Сообщение # 2693


Double Jumper
Сообщений: 888
Награды: 32
Замечания: 0%
 
Jack_Stone, это можно сделать в PlayerWeapons, в функции CutWithKnife

Jack_Stone Понедельник, 27.03.2017, 15:49 | Сообщение # 2694


Сообщений: 146
Награды: 1
Замечания: 0%
 
Heming_Hitrowski, пожалуйста, немного по-подробнее. Я не могу никак понять, как нужно это оформить.

Heming_Hitrowski Понедельник, 27.03.2017, 22:02 | Сообщение # 2695


Double Jumper
Сообщений: 888
Награды: 32
Замечания: 0%
 
Думаю тебе прежде всего стоит разобраться, как работает луч. (мне тут придется много расписывать, и возможно не самым точным образом, поэтому я этого делать не буду. Но ты обязательно поэкспериментируй с CastRay) Подскажу:

Там есть условие, когда то, на что ударил луч, является брашем:

Код
if(crRay.cr_penHit->GetRenderType()==RT_BRUSH)


или моделью

Код
else if(crRay.cr_penHit->GetRenderType()==RT_MODEL)


Вот туда и напиши звуки.
Только если надо чисто от ножа, само собой, надо будет добавить дополнительное условие:

if (m_iCurrentWeapon == WEAPON_KNIFE) {
//...
}


Пардон. Для бензопилы есть похожая функция - CutWithChainsaw.
Сообщение отредактировал Heming_Hitrowski - Понедельник, 27.03.2017, 22:12


Jack_Stone Понедельник, 27.03.2017, 23:34 | Сообщение # 2696


Сообщений: 146
Награды: 1
Замечания: 0%
 
Попробовал сделать по аналогии с Bullet, вот что выдает. Как тут нужно звук инициализировать?

warning C4700: local variable 'bSound' used without having been initialized

А прописал вот это:

SpawnHitTypeEffect(this, bhtType, bSound, vHitNormal, crRay.cr_vHit, vHitDirection, FLOAT3D(0.0f, 0.0f, 0.0f));


Код
          if(crRay.cr_penHit->GetRenderType()==RT_BRUSH)
          {
            INDEX iSurfaceType=crRay.cr_pbpoBrushPolygon->bpo_bppProperties.bpp_ubSurfaceType;
            EffectParticlesType eptType=GetParticleEffectTypeForSurface(iSurfaceType);
          
            FLOAT3D vNormal=crRay.cr_pbpoBrushPolygon->bpo_pbplPlane->bpl_plAbsolute;
            FLOAT3D vReflected = vDir-vNormal*(2.0f*(vNormal%vDir));
            ((CPlayer&)*m_penPlayer).AddBulletSpray( vBase+vFront, eptType, vReflected);
          SpawnHitTypeEffect(this, bhtType, bSound, vHitNormal, crRay.cr_vHit, vHitDirection, FLOAT3D(0.0f, 0.0f, 0.0f));
    
          }


Все переменные в скобках объявил, только с bSound проблема.
Сообщение отредактировал Jack_Stone - Понедельник, 27.03.2017, 23:36


Heming_Hitrowski Вторник, 28.03.2017, 14:12 | Сообщение # 2697


Double Jumper
Сообщений: 888
Награды: 32
Замечания: 0%
 
Да ты что! Тебе же надо просто звук добавить! Посмотри как, например, в процедуре SwingKnife проигрывается звук взмаха. Про Bullet вообще забудь)
Сообщение отредактировал Heming_Hitrowski - Вторник, 28.03.2017, 14:13


Jack_Stone Среда, 29.03.2017, 19:29 | Сообщение # 2698


Сообщений: 146
Награды: 1
Замечания: 0%
 
Heming_Hitrowski, я так и сделал :) просто я изначально хотел, чтобы при ударе по каждой поверхности проигрывался разный звук. А так то да)) Ничего тут сложного нет, прописал собственно как и все остальные звуки :D

Jack_Stone Четверг, 13.04.2017, 18:12 | Сообщение # 2699


Сообщений: 146
Награды: 1
Замечания: 0%
 
Народ, подскажите, пожалуйста, следующее. В одном условии мне нужно прописать наличие оружия, неважно есть к нему патроны или нет, важно то, что его уже подбирали. Если точнее, то я про функцию AddDefaultAmmoForWeapon. У меня для каждого оружия по 2 переменных патронов - магазин и патроны в запасе, так вот я хочу сделать так, чтобы при ПЕРВОМ подборе AmmoPicked равнялось 0, а при последующих подборах оружия AmmoPicked равнялось количеству патронов в магазине, потому и логично каким-то образом прописать наличие оружия у Сэма. Может кто-нибудь с этим сталкивался уже? :)

Jack_Stone Пятница, 05.05.2017, 09:12 | Сообщение # 2700


Сообщений: 146
Награды: 1
Замечания: 0%
 
Подскажите пожалуйста как сделать так, чтобы функция активировалась, когда Сэм находится внутри определенной области, как ,например, с SoundHolder - звук слышен, только если находишься в пределах FalloffRange. Возможно ли это сделать, не создавая отдельный класс-объект, а используя уже что-то готовое, хоть тот же SoundHolder, но чтобы при попадании в область FalloffRange, срабатывало что-то из другого класса - менялась какая-нибудь переменная. Это возможно?

Если попроще, то так -

Надо, чтобы во время нахождения на зоне FalloffRange какого-нибудь объекта, в Player.es какая-то переменная принимала значение TRUE, а при выходе из этой зоны становилась обратно FALSE.
Сообщение отредактировал Jack_Stone - Пятница, 05.05.2017, 12:43


Поиск: