Новые сообщения Участники Правила Поиск
Модератор форума: freeknik, SLAwww, thecre, RealCrazyMan  
Форум » Serious Sam » Серьёзное редактирование » Помощь по SDK для Serious Sam 1.05/1.07 (Вопросы по комплекту средств разработки для Serious Sam 1.)
Помощь по SDK для Serious Sam 1.05/1.07
ST27 Среда, 08.02.2017, 16:48 | Сообщение # 2701


Сообщений: 457
Награды: 6
Замечания: 0%
 
GetPlayerWeapons()->iAmmo;

Где вместо iAmmo может быть:
m_iShells, m_iBullets, m_iRockets, m_iGrenades, m_iNapalm, m_iSniperBullets, m_iElectricity, m_iIronBalls
Которые объявлены, очевидно, в PlayerWeapons


- My Personal Site -
art-serious Среда, 08.02.2017, 16:55 | Сообщение # 2702


Старый маппер
Сообщений: 652
Награды: 29
Замечания: 0%
 
Перечитал свой вопрос... Теперь надо конкретный вид iAmmo связать с текущим оружием. Пример TFE - подсвечивается иконка боеприпасов в ряде общего боезапаса, которое использует текущее оружие.

То есть узнать текущий тип патронов игрока
Сообщение отредактировал art-serious - Среда, 08.02.2017, 17:06


[ zc-lab.org ] [ Операция "Новый год" - 40% ]
ST27 Среда, 08.02.2017, 17:26 | Сообщение # 2703


Сообщений: 457
Награды: 6
Замечания: 0%
 
Переменной нет, но можно сделать что-то типа такого:
Код
CTString iAmmo = -1;
switch (GetPlayerWeapons()->m_iCurrentWeapon) {
  case WEAPON_SINGLESHOTGUN: iAmmo = AMMO_SHELLS; break;
  case WEAPON_TOMMYGUN: iAmmo = AMMO_BULLETS; break;
  ..
  default: iAmmo = -1;
}

И потом использовать везде iAmmo
И если оно равно -1, то ничего не рендерить

Прочие "AMMO_" можно найти в файле Common/Common.h

Добавлено (08.02.2017, 17:26)
---------------------------------------------
А еще я почему-то написал тип CTString вместо INDEX, ошибочка

- My Personal Site -
art-serious Среда, 08.02.2017, 17:58 | Сообщение # 2704


Старый маппер
Сообщений: 652
Награды: 29
Замечания: 0%
 
Если INDEX, то вместо AMMO_SHELLS в переменную iAmmo заносится "1", судя по Common.h, я так понимаю...




Решено.
Сообщение отредактировал art-serious - Среда, 08.02.2017, 20:42


[ zc-lab.org ] [ Операция "Новый год" - 40% ]
Andrey Пятница, 10.02.2017, 07:29 | Сообщение # 2705


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

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


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

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


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

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


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

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


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

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


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


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


Сообщений: 457
Награды: 6
Замечания: 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 | Сообщение # 2712


Сообщений: 140
Награды: 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 | Сообщение # 2713


Сообщений: 457
Награды: 6
Замечания: 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 | Сообщение # 2714


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

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


Сообщений: 140
Награды: 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 | Сообщение # 2716


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


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


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

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


Рряа? ^..^
Сообщений: 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 | Сообщение # 2719


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

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


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

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


Рряа? ^..^
Сообщений: 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 | Сообщение # 2722


Сообщений: 140
Награды: 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 | Сообщение # 2723


Сообщений: 140
Награды: 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 | Сообщение # 2724


Рряа? ^..^
Сообщений: 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 | Сообщение # 2725


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

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


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


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


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

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


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

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


Double Jumper
Сообщений: 883
Награды: 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 | Сообщение # 2730


Сообщений: 140
Награды: 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


Форум » Serious Sam » Серьёзное редактирование » Помощь по SDK для Serious Sam 1.05/1.07 (Вопросы по комплекту средств разработки для Serious Sam 1.)
Поиск:

Статистика