#51 Re: Вопросы по скриптингу » Один вопрос » 25-02-2017 08:32

Zin_869731, проверь, можешь ли ты создавать проекты в своей студии.
File -> New -> Project... ->
Templates : Visual C++ : General : Empty Project

#52 Re: Вопросы по скриптингу » Получение названия анимации игрока » 25-02-2017 07:31

Ну хотя бы название.

А хеш не хочешь?

Есть опкод

0611:   is_char_playing_anim 2@ anim "LRGIRL_IDLE_TO_L0"

Он сверяет все анимации, прицепленные к клампу, по хешу названия.
Если не залезать в дебри, можно предположить, что имена анимаций нигде не сохраняются (вместо них - хеши).
Можно составить таблицу связок хеш-имя, но это уже выходит за рамки скриптинга.

#55 Re: Вопросы по скриптингу » Один вопрос » 20-01-2017 19:21

Zin_869731 wrote:

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

Нужно отразить модель по одной из оси и подровнять смещение.
Вариант реализации с plugin-sdk.

#include "plugin.h"
#include "game_sa\CModelInfo.h"

using namespace plugin;

const unsigned int MY_WEAPON_MODEL_ID = MODEL_BRASSKNUCKLE;
const RwV3d        MY_WEAPON_OFFSET   = { 0.0f, 0.0f, 0.0f };

class MyTwinWeapon {
public:
    MyTwinWeapon() {
        static CdeclEvent<
            AddressList<0x733119, H_CALL>, PRIORITY_BEFORE, ArgPickN<RpClump*, 0>, RpClump*(RpClump*)> onRenderSecondWeaponClump;

        onRenderSecondWeaponClump += [](RpClump *clump) {
            CWeaponModelInfo *weapModel = CallAndReturn<CWeaponModelInfo *, 0x732AC0>(clump);
            if (weapModel && CModelInfo::ms_modelInfoPtrs[MY_WEAPON_MODEL_ID] == weapModel) { // Если нужная модель
                RwFrame *frame = reinterpret_cast<RwFrame *>(clump->object.parent);
                RwV3d scale = { 1.0f, -1.0f, 1.0f };
                RwMatrixScale(&frame->modelling, &scale, rwCOMBINEPRECONCAT); // Масштабируем
                RwMatrixTranslate(&frame->modelling, &MY_WEAPON_OFFSET, rwCOMBINEPRECONCAT); // Смещаем
            }
        };
    }
} myTwinWeap;

Тест

#include "plugin.h"
#include "game_sa\common.h"
#include "game_sa\CStreaming.h"

using namespace plugin;

class MyTwinWeaponTest {
public:
    MyTwinWeaponTest() {
        patch::Nop(0x7330B9, 2); // Рендерим два оружия независимо от флага в weapon.dat
        Events::gameProcessEvent += [] {
            CPed *playa = FindPlayerPed();
            if(playa && KeyPressed('T')) {
                CStreaming::RequestModel(MODEL_BRASSKNUCKLE, GAME_REQUIRED);
                CStreaming::LoadAllRequestedModels(false);
                playa->GiveWeapon(WEAPON_BRASSKNUCKLE, 0, true); // Даём игроку оружие
                CStreaming::SetModelIsDeletable(MODEL_BRASSKNUCKLE);
            }
        };
    }
} myTest;
d88 wrote:

Ещё вопрос. Я отключил читы

0A8C: write_memory 0x0053BFB8 size 4 value 0x90909090 virtual_protect 1
0A8C: write_memory 0x0053BFBC size 1 value 0x90 virtual_protect 1

и после этого 0ADC: тоже перестал действовать. Можно это исправить?

Попробуй так.

0A8C: write_memory 0x4384F6 size 2 value 0xE990 virtual_protect 1
d88 wrote:

Хорошо, но может, есть какая-то специальная проверка, что игрок ничего не делает в течение определённого времени? В оригинальной СА ведь такое есть - если не нажимать ничего в течение одной минуты, камера отправляется в свободное плавание. Я вот сейчас работаю с мэйном, убрал оттуда оригинальные потоки, и теперь это не происходит. Значит, там был скрипт, в котором это было прописано.

0A8D: 0@ = read_memory 0xB73578 size 4 virtual_protect 0
0A8D: 1@ = read_memory 0xB7CB84 size 4 virtual_protect 0
0062: 1@ -= 0@
// if (CTimer::m_snTimeInMilliseconds - Pads[0].LastTimeTouched > 2000)
if
    1@ > 2000
then
    0AD1: show_formatted_text_highpriority "You didn't touch the pad for %d ms" time 100 1@
end
// Пока игрался с этим кодом - обнаружил, что SB не умеет правильно обрабатывать комбинации //{ //}.

В виде опкода (plugin-sdk + CLEO SDK)

#include "CLEO.h"
#include "game_sa\CTimer.h"
#include "game_sa\CPad.h"

class TimeNotTouchingPadOpcode {
public:
    static OpcodeResult WINAPI OpcodeFunc(CScriptThread* thread) {
        int playerId = CLEO_GetIntOpcodeParam(thread);
        CLEO_SetIntOpcodeParam(thread, CTimer::m_snTimeInMilliseconds - CPad::GetPad(playerId)->LastTimeTouched);
        return OR_CONTINUE;
    }

    TimeNotTouchingPadOpcode() {
        CLEO_RegisterOpcode(0x1A00, OpcodeFunc); // 1A00=2,%2d% = get_player %1d% time_not_touching_pad
    }
} opcodePlg;

#56 Re: Работа с памятью, EXE » Помогите люди » 22-12-2016 18:43

Зачем наводить прицел на цвет?
Может, вам надо отдохнуть от GTA?  tongue

#58 Re: Вопросы по скриптингу » Многослойный dff обьект карты » 20-10-2016 21:27

Только если загружать такой обьект из секций anim и hier в IDE или как файл HIERFILE в gta.dat.

Похожий вопрос обсуждался здесь (правда, в Vice City, но суть та же - иерархия сохраняется только для тех обьектов, для которых она нужна - транспорт, анимированные обьекты и т.п.).

#59 Re: Вопросы по скриптингу » Изменение позиции проигрывания аудиострима » 04-10-2016 16:50

Такой опкод был в NewOpcodes, но позже пришлось его вырезать (не работал с новыми версиями CLEO).

#60 Re: Вопросы по скриптингу » Один вопрос » 15-09-2016 17:42

Hedgy wrote:

Тогда ещё вопрос, в гта на мото и велосипедах у персонажа руки крепятся к координатам дамми bargrip и его зеркалу по Х. Ты где-то писал ноп, чтобы не удалялись эти дамми, так что теперь я могу двигать его.
Вопрос в том, как выйти на адрес координат для левой руки (тех зеркальных координат по Х*-1)?

Увы, про nop я ничего не помню.
И вопрос я что-то не очень понял. Можно же просто умножить x-координату на (-1), нет?
Координаты bargrip записаны в VehicleStruct, в массиве позиций дамми:

CVector bargripRight = CModelInfo::ms_modelInfoPtrs[bike->m_wModelIndex]->m_pVehicleStruct->m_vDummyPos[10];

Компонент bargrip (RwFrame) действительно удаляется игрой (удаляются все компоненты, которые используются только для определения позиции - headlights, engine, exhaust и прочие, а их позиции записываются в массиве в VehiceStruct).

Hedgy wrote:

По поводу коллизии погрузчика - у него подвижная часть коллизии соединена с крышей :о
Вопрос - как игра отцепляет этот кусок и двигает? Хм.

Всё очень просто. Всем сферам и треугольникам коллизии, которые отвечают за подвижную часть, присвоен материал CAR_MOVINGCOMPONENT (ID: 65). Ищем все такие сферы/треугольники и перемещаем их.

Hedgy wrote:

Срочно буду его осваивать тогда, ибо весь бмх-мод хорошо бы увидеть в виде плагина.

Удачи. По всем вопросам можешь обращаться в skype (dk22pac).

#61 Re: Вопросы по скриптингу » Один вопрос » 13-09-2016 17:26

1) Можно передвинуть и можно уменьшить (можно даже попробовать поставить радиус в 0 и глянуть, что получится).
2) Можно удалить.

Могу показать как это выглядит в С++, в CLEO надо будет копипастить кучу read/write_memory, что есть нечитабельный код.

static void VehicleRemoveSphere(CVehicle *vehicle) {
    CColData *colData = vehicle->GetColModel()->m_pColData;
    for (unsigned int i = 0; i < colData->m_wNumSpheres; i++) {
        if (colData->m_pSpheres[i].m_nFlags == 19) { // windscreen col sphere
            colData->m_pSpheres[i].m_fRadius = 0.0f;
            colData->m_pSpheres[i].m_vCenter = {0.0f, 0.0f, 0.0f};
        }
    }
}

PS Модели коллизии - общие для всех авто с одной моделью, копии не создаются.

#62 Re: Вопросы по скриптингу » Мерцает текстдроу (1 всего лишь текст) другие тексты не мерцают » 23-08-2016 15:39

Chel555, если у тебя мод про зомби - так даже лучше будет.

А так - учись правильно писать алгоритмы и читай про высокоуровневые конструкции в SB. Наверняка ты что-то там с переходами намутил.

#63 Re: Вопросы по скриптингу » Searchlight на игрока. (Или освещение для скафандра) » 18-08-2016 16:22

"Луч" - это просто лоу-поли меш с прозрачностью. Он ничего не освещает.
Для имитации освещения надо вызывать 09E5 и 016F.

#65 Re: GTA Modding » A Question about Sanny » 27-07-2016 16:25

Ask SAMP-related questions at SAMP-related forums.
Good bye.   mad

#66 Re: Вопросы по скриптингу » CDamageManager - повреждения [GTA:VC] » 30-06-2016 16:10

Goldfish wrote:

не скажите какая версия IDA нужна для открытия последней базы SA ?
помню при открытии была ошибка типо не лицензионная версия была использованна в базе

Обычно такое случается, если неправильно установил (или вообще не установил) лекарство.

#69 Re: Вопросы по скриптингу » CDamageManager - повреждения [GTA:VC] » 26-06-2016 13:11

Значит надо другие функции вызывать.
Из кода CAutomobile::BlowUpCar()
Q9v3pGT.png

0x59B150 ; void __thiscall CAutomobile::SetDoorDamage(CAutomobile *this, int nodeId, eDoor doorId, bool status)

И не забывай, что в CLEO-опкодах надо передавать параметры процедуры в обратном порядке.

#70 Re: Вопросы по скриптингу » CDamageManager - повреждения [GTA:VC] » 26-06-2016 08:57

Там есть разные статусы, поробуй вызвать со значением 2 или 3.

#73 Re: Вопросы по скриптингу » Распальцовки банд в GTA SA. » 21-05-2016 21:31

Нужно делать в плагине или в скрипте.

#74 Re: Вопросы по скриптингу » Распальцовки банд в GTA SA. » 21-05-2016 21:16

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

Board footer

Powered by FluxBB