You are not logged in.
Zin_869731, проверь, можешь ли ты создавать проекты в своей студии.
File -> New -> Project... ->
Templates : Visual C++ : General : Empty Project
Ну хотя бы название.
А хеш не хочешь?
Есть опкод
0611: is_char_playing_anim 2@ anim "LRGIRL_IDLE_TO_L0"
Он сверяет все анимации, прицепленные к клампу, по хешу названия.
Если не залезать в дебри, можно предположить, что имена анимаций нигде не сохраняются (вместо них - хеши).
Можно составить таблицу связок хеш-имя, но это уже выходит за рамки скриптинга.
077D: get_car_pitch 1@ store_to 2@
Not possible.
Драсте, у меня тут вопрос есть такой, связанный со вторым оружием в левой руке, т.е флаг 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;Ещё вопрос. Я отключил читы
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
Хорошо, но может, есть какая-то специальная проверка, что игрок ничего не делает в течение определённого времени? В оригинальной СА ведь такое есть - если не нажимать ничего в течение одной минуты, камера отправляется в свободное плавание. Я вот сейчас работаю с мэйном, убрал оттуда оригинальные потоки, и теперь это не происходит. Значит, там был скрипт, в котором это было прописано.
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;
Зачем наводить прицел на цвет?
Может, вам надо отдохнуть от GTA? 
gody, а зачем это нужно? 
Такой опкод был в NewOpcodes, но позже пришлось его вырезать (не работал с новыми версиями CLEO).
Тогда ещё вопрос, в гта на мото и велосипедах у персонажа руки крепятся к координатам дамми 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).
По поводу коллизии погрузчика - у него подвижная часть коллизии соединена с крышей :о
Вопрос - как игра отцепляет этот кусок и двигает? Хм.
Всё очень просто. Всем сферам и треугольникам коллизии, которые отвечают за подвижную часть, присвоен материал CAR_MOVINGCOMPONENT (ID: 65). Ищем все такие сферы/треугольники и перемещаем их.
Срочно буду его осваивать тогда, ибо весь бмх-мод хорошо бы увидеть в виде плагина.
Удачи. По всем вопросам можешь обращаться в skype (dk22pac).
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 Модели коллизии - общие для всех авто с одной моделью, копии не создаются.
Chel555, если у тебя мод про зомби - так даже лучше будет.
А так - учись правильно писать алгоритмы и читай про высокоуровневые конструкции в SB. Наверняка ты что-то там с переходами намутил.
"Луч" - это просто лоу-поли меш с прозрачностью. Он ничего не освещает.
Для имитации освещения надо вызывать 09E5 и 016F.
Ask SAMP-related questions at SAMP-related forums.
Good bye. 
не скажите какая версия IDA нужна для открытия последней базы SA ?
помню при открытии была ошибка типо не лицензионная версия была использованна в базе
Обычно такое случается, если неправильно установил (или вообще не установил) лекарство.
Попробуй 6.8.
Если не ошибаюсь, над этой базой работал maxorator.
https://drive.google.com/uc?export=down … S1FQy10OUk
Значит надо другие функции вызывать.
Из кода CAutomobile::BlowUpCar()
0x59B150 ; void __thiscall CAutomobile::SetDoorDamage(CAutomobile *this, int nodeId, eDoor doorId, bool status)
И не забывай, что в CLEO-опкодах надо передавать параметры процедуры в обратном порядке.
Там есть разные статусы, поробуй вызвать со значением 2 или 3.
Нужно делать в плагине или в скрипте.
Это название класса.
Это что-то вроде обьекта, который создаётся на месте руки педа.
Обьект этот создаётся в методе класса CTaskSimplePlayHandSignalAnim.
Полагаю, что надо просто создать этот таск и прицепить его к педу.
Копать в сторону CHandObject 