You are not logged in.
Ну меняй, в чём проблема.
struct RwFrame { RwObject object; // 0 RwLLLink inDirtyListLink; // 8 RwMatrix modelling; // 16 RwMatrix ltm; // 80 RwLinkList objectList; // 144 RwFrame *child; // 152 RwFrame *next; // 156 RwFrame *root; // 160 // RenderWare plugins RpHAnimFrameExtension hAnimFrame; // 164 // GTA Plugins char nodeName[24]; // 172 union // 196 { void *model; int hierId; }; };
0A8E: 1@ = 0@ + 172 0AA5: call 0x69F910 num_params 2 pop 2 "new_name" 1@ // strcpy(dst, src)
Last edited by DK22Pac (19-06-2013 15:48)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Спасибо.
Название компонента перезаписывается, только вот конечный нужный результат не получен. Я всё пытаюсь получить доступ к вложенным компонентам (произвольно добавленным) во вращающиеся компоненты модели (двери, капот и багажник). Думал схитрить - перезаписать имя компонента и получить потом доступ к вложенным компонентам, но не всё так просто оказалось. Имя компонента перезаписалось и этот компонент находится функцией
0AA7: call_function 0x4C5400 num_params 2 pop 2 _nodename "myname" _rwObject 0@ _store_to 1@
но дальше доступ получить к вложенным компонентам всё также не удаётся.
Может у кого есть какие идеи, как это всё же можно сделать?
и сразу по структуре RwFrame вопросы
struct RwFrame { RwLLLink inDirtyListLink; // 8 RwLinkList objectList; // 144 // RenderWare plugins RpHAnimFrameExtension hAnimFrame; // 164 // GTA Plugins union // 196 { void *model; int hierId; }; };
вот эти смещения каким образом и для чего используются?
А вообще на русском языке есть какая-нибудь документация по RwFrame?
Offline
Тут могу ошибаться,
inDirtyListLink - список фреймов, нуждающихся в обновлении (например, после смены местоположения фрейма);
objectList - список атомиков, прикреплённых к этому фрейму. Для обработки всех атомиков фрейма можно использовать функцию RwFrameForAllObjects;
hAnimFrame - обьект анимации на уровне RwFrame. Используется только для заскиненных обьектов (вроде). В общем, для обьектов, которые анимируются.
model - указатель на обьект - наследователь CBaseModelInfo (т.е., CVehicleModelInfo, CPedModelInfo, CWeaponModelInfo и т.д.). В основном, используется для привязки между фреймом обьекта оружия и его моделью (CWeaponModelInfo). Для обьектов с иерархией заменяется на hierId;
hierId - id фрейма в иерархии. Используется только для фреймов транспорта/педов. Id определены заранее и привязаны к именам фреймов в специальной таблице (массив обьектов RwObjectNameIdAssocation). Для некоторых видов транспорта, эти таблицы представлены тут:
http://gtamodding.ru/wiki/Структура_мод … Automobile
По первому вопросу - фреймы, которые находятся внутри "повреждаемых" фреймов (двери, капот, и т.д.) удаляются игрой ещё при создании обьекта-модели транспорта. Их атомики получают флаг состояния компонента (если атомик был прикреплён к фрейму с пометкой _ok - это атомик целого компонента, _dam - поврежденного компонента), и переходят к родителю (в случае с капотом это фрейм с именем bonnet_dummy).
До
RwFrame( bonnet_dummy ) | +--RwFrame( bonnet_dummy_ok ) | RpAtomic( ok_atomic ) | +--RwFrame( bonnet_dummy_dam ) RpAtomic( dam_atomic )
После
RwFrame( bonnet_dummy ) RpAtomic( ok_atomic ) RpAtomic( dam_atomic )
А вообще на русском языке есть какая-нибудь документация по RwFrame?
Увы, нету.
Last edited by DK22Pac (20-06-2013 12:52)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Вот такой вопрос возник, опкодом можно задать номер авто (numplate), но из двух меняется только один, второй остается рандомным, как это исправить, заранее можно ли задать не для одного номера, а сразу все?
I know everything and nothing...
Offline
DK22Pac, спасибо, буду разбираться.
Ну к примеру "приаттачить" бампер этой машины к колесу этой же машины, чтобы крутился, двигался вместе с ним, это возможно?
кстате, заодно вопрос, как "сбросить" компонент, т.е. вернуть его в исходные координаты?опять же, это возможно?=)
Скорее всего - не получится.
Вращение обрабатывается специальными коллбэками, которые мняют углы в зависимости от времени.
Насколько я помню, в коллбэках обрабатывается только один атомик, и прикрепление атомиков друг к другу не предусмотрено.
Как оказалось такое возможно. Стоило покопаться в базе и вот результат:
{$CLEO .cs} 0000: 10@ = 1 while true wait 0 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then if 0AB0: key_pressed 77 // M then 03C0: 0@ = actor $PLAYER_ACTOR car 0441: 1@ = car 0@ model if 0A01: model 1@ car then 0A97: 2@ = car 0@ struct // получаем два компонента авто 0A8E: 3@ = 2@ + 0x65C // левое переднее колесо 0A8E: 4@ = 2@ + 0x678 // бампер передний 0A8D: 3@ = read_memory 3@ size 4 virtual_protect 0 0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0 if and 3@ > 0 // компонент имеется 4@ > 0 // компонент имеется then if 10@ == 1 then // получаем "родителя" второго компонента 0A8E: 5@ = 4@ + 0x4 0A8D: 5@ = read_memory 5@ size 4 virtual_protect 0 if 5@ > 0 then // записываем координаты второго компонента 0A8E: 6@ = 4@ + 64 0A8D: 7@ = read_memory 6@ size 4 virtual_protect 0 6@ += 4 0A8D: 8@ = read_memory 6@ size 4 virtual_protect 0 6@ += 4 0A8D: 9@ = read_memory 6@ size 4 virtual_protect 0 6@ -= 56 // помещаем второй компонент в центр модели 0AA6: call_method 0x59AF80 struct 6@ num_params 3 pop 0 0.0 0.0 0.0 // CMatrix__setPos (Z Y X) // разворачиваем !!! для некоторых компонентов без надобности 0AA6: call_method 0x59B020 struct 6@ num_params 1 pop 0 -3.14 // CMatrix__rotateAroundZ // прикрепляем второй компонент к первому 0AA5: call_function 0x7F0B00 num_params 2 pop 2 4@ 3@ // _RwFrameAddChild 10@ = 2 end else // возвращаем компонент на своё место 0AA6: call_method 0x59AF80 struct 6@ num_params 3 pop 0 9@ 8@ 7@ // CMatrix__setPos (Z Y X) // разворачиваем обратно !!! для некоторых компонентов без надобности 0AA6: call_method 0x59B020 struct 6@ num_params 1 pop 0 0.0 // CMatrix__rotateAroundZ // прикрепляем второй компонент к "родителю" 0AA5: call_function 0x7F0B00 num_params 2 pop 2 4@ 5@ // _RwFrameAddChild 10@ = 1 end end end repeat wait 0 until 8AB0: not key_pressed 77 // M end end end end
После цепляния одного компонента к другому он поддаётся управлению, так что таким образом можно решить мой же вопрос
но дальше доступ получить к вложенным компонентам всё также не удаётся.
Может у кого есть какие идеи, как это всё же можно сделать?
Offline
kenking, в ImVehFt это сделано через перехват вызова функции, которая удаляет фрйемы.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
другой вопрос: можно ли узнать количество 3д деталей машины (общее) ?
{$CLEO .cs} 0000: while true wait 0 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct 1@ += 0x18 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 0AA7: call_function 0x4C5400 num_params 2 pop 2 _nodename "chassis_dummy" _rwObject 1@ _store_to 2@ if 2@ > 0 then 0AA7: call_function 0x7F09B0 num_params 1 pop 1 2@ 3@ // _RwFrameGetRoot if // вообще-то лишнее, корень иераррхии у модели есть всегда 3@ > 0 then 0AA7: call_function 0x7F0E00 num_params 1 pop 1 3@ 4@ // _RwFrameCount 0AD1: show_formatted_text_highpriority "model has %d components" time 5000 4@ while Actor.Driving($PLAYER_ACTOR) wait 0 end end end end end end
Offline
kenking, поздновато ты отвечаешь, }0RIC)-( сейчас разрабатывает свой игровой движок и забил на гта
Last edited by DK22Pac (22-06-2013 14:35)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Когда нашёл ответ на вопрос, тогда и ответил. Если бы знал раньше, то и написал бы соответственно тогда. Тема предназначена не только для одного }0RIC)-(. Может кому ещё эта информация пригодится. А вообще лучше поздно, чем никогда.:D
Offline
DK22Pac, объясни пожалуйста, что получаем после вызова _RwFrameGetLTM
Offline
kenking, матрицу компонента в мировом пространстве.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Спасибо.
Offline
Есть функция
0x6DBA30 ; void __stdcall RotateVehicleComponent(RwFrame *component, int axis, float angle, char rotationType)
В CLEO должна вызываться так
0AA5: call 0x6DBA30 num_params 4 pop 4 _rotationType 1 _angle 1@ _axis 1 _component 0@
axis - ось вращения
0 - X 1 - Y 2 - Z
angle - угол в радианах
component - адрес компонента (RwFrame)
rotationType - тип вращения (0 или 1, надо экспериментировать).
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
как покрутить по оси x, допустим, компонент
вариант 1
{$CLEO .cs} 0000: while true wait 0 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct 0A8E: 2@ = 1@ + 0x18 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 0AA7: call_function 0x4C5400 num_params 2 pop 2 _nodename "new_comp" _rwObject 2@ _store_to 3@ if 3@ > 0 then // axis 10@ = 1.0 // X 11@ = 0.0 // Y 12@ = 0.0 // Z while Car.Defined(0@) if 00DB: actor $PLAYER_ACTOR in_car 0@ jf break 0AA5: call {RwFrameRotate} 0x7F1010 num_params 4 pop 4 _combine 1 _angle+= 1.0 _axis 10@v _frame 3@ wait 0 end end end end end
вариант 2
{$CLEO .cs} 0000: while true wait 0 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 0A97: 1@ = car 0@ struct 0A8E: 2@ = 1@ + 0x18 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 0AA7: call_function 0x4C5400 num_params 2 pop 2 _nodename "new_comp" _rwObject 2@ _store_to 3@ if 3@ > 0 then 3@ += 16 4@ = 0.0 while Car.Defined(0@) if 00DB: actor $PLAYER_ACTOR in_car 0@ jf break 4@ += 0.05 0AA6: call_method {CMatrix__rotateAroundX} 0x59AFA0 struct 3@ num_params 1 pop 0 4@ wait 0 end end end end end
Offline
На основе появившейся кучи информации, составил класс CVehicleModelInfo:
#pragma once #include "plugin\plugin.h" #include "CClumpModelInfo.h" #include "RenderWare.h" #include "CVector.h" #include "CQuaternion.h" #include "RwObjectNameIdAssocation.h" #include "CRGBA.h" enum VehicleUpgradePosn { UPGRADE_BONNET, UPGRADE_BONNET_LEFT, UPGRADE_BONNET_RIGHT, UPGRADE_BONNET_DAM, UPGRADE_BONNET_LEFT_DAM, UPGRADE_BONNET_RIGHT_DAM, UPGRADE_SPOILER, UPGRADE_SPOILER_DAM, UPGRADE_WING_LEFT, UPGRADE_WING_RIGHT, UPGRADE_FRONTBULLBAR, UPGRADE_BACKBULLBAR, UPGRADE_LIGHTS, UPGRADE_LIGHTS_DAM, UPGRADE_ROOF, UPGRADE_NITRO, }; #pragma pack(push, 4) struct PLUGIN_API UpgradePosnDesc { CVector m_vPosition; CQuaternion m_qRotation; int m_dwParentComponentId; UpgradePosnDesc(); ~UpgradePosnDesc(); }; #pragma pack(pop) #pragma pack(push, 1) class PLUGIN_API CVehicleModelInfo : public CClumpModelInfo { public: RpMaterial *m_pPlateMaterial; char m_plateText[8]; __int8 field_30; unsigned __int8 m_nPlateType; char m_nGameName[8]; __int16 pad0; unsigned __int32 m_dwType; float m_fWheelSizeFront; float m_fWheelSizeRear; unsigned __int16 m_wWheelModelId; unsigned __int16 m_wHandlingIndex; unsigned __int8 m_nNumDoors; unsigned __int8 m_nClass; unsigned __int8 m_nFlags; unsigned __int8 m_nWheelUpgradeClass; unsigned __int16 m_wTimesUsed; unsigned __int16 m_wFrq; union{ unsigned __int32 m_dwCompRules; struct{ unsigned __int32 m_nExtraA_comp1 : 4; unsigned __int32 m_nExtraA_comp2 : 4; unsigned __int32 m_nExtraA_comp3 : 4; unsigned __int32 m_nExtraA_rule : 4; unsigned __int32 m_nExtraB_comp1 : 4; unsigned __int32 m_nExtraB_comp2 : 4; unsigned __int32 m_nExtraB_comp3 : 4; unsigned __int32 m_nExtraB_rule : 4; }; }; float m_fBikeSteerAngle; class CVehicleStructure{ public: CVector m_avDummyPosn[15]; UpgradePosnDesc m_aUpgrades[18]; RpAtomic *m_apExtras[6]; unsigned char m_nNumExtras; unsigned int m_dwMaskComponentsDamagable; CVehicleStructure(); ~CVehicleStructure(); static class CPool *m_pInfoPool; } *m_pVehicleStruct; __int8 field_60[464]; RpMaterial *m_apDirtMaterials[16]; __int8 field_270[64]; unsigned __int8 m_anPrimaryColors[8]; unsigned __int8 m_anSecondaryColors[8]; unsigned __int8 m_anTertiaryColors[8]; unsigned __int8 m_anQuaternaryColors[8]; unsigned __int8 m_nNumColorVariations; unsigned __int8 m_nLastColorVariation; unsigned __int8 m_nPrimaryColor; unsigned __int8 m_nSecondaryColor; unsigned __int8 m_nTertiaryColor; unsigned __int8 m_nQuaternaryColor; __int16 m_awUpgrades[18]; __int16 m_awRemapTxds[5]; class CAnimBlock *m_pAnimBlock; static class CLinkedUpgradeList{ public: __int16 m_wUpgrade1[30]; __int16 m_wUpgrade2[30]; unsigned __int32 m_dwLinksCount; // add upgrade with components upgrade1 and upgrade2 void AddUpgradeLink(short upgrade1, short upgrade2); // find linked upgrade for this upgrade. In this case upgrade param could be upgrade1 or // upgrade2 short FindOtherUpgrade(short upgrade); } &ms_linkedUpgrades; // vehicle components description tables // static RwObjectNameIdAssocation ms_vehicleDescs[12]; static RwObjectNameIdAssocation *ms_vehicleDescs; // vehiclelights128 texture static RwTexture *ms_pLightsTexture; // vehiclelightson128 texture static RwTexture *ms_pLightsOnTexture; // color of currently rendered car // static unsigned __int8 ms_currentCol[4]; static unsigned __int8 *ms_currentCol; // number of wheel upgrades available // tatic __int16 ms_numWheelUpgrades[4]; static __int16 *ms_numWheelUpgrades; // wheels upgrades data // static __int16 ms_upgradeWheels[15][4]; static __int16 *ms_upgradeWheels; // lights states for currently rendered car // static __int8 *ms_lightsOn[4]; static __int8 *ms_lightsOn; // extras ids for next-spawned car // static __int8 ms_compsUsed[2]; static __int8 *ms_compsUsed; // vehicle colours from carcols.dat // static CRGBA ms_vehicleColourTable[128]; static CRGBA *ms_vehicleColourTable; CVehicleModelInfo(); ~CVehicleModelInfo(); // destroying vehiclelights textures static void ShutdownLightTexture(); // find remap texture with name static RwTexture *FindTextureCB(char const* name); // start using special finding callback static void UseCommonVehicleTexDicationary(); // stop using special finding callback static void StopUsingCommonVehicleTexDicationary(); // set new parent frame for object. Data is actually RwFrame * static RpAtomic *MoveObjectsCB(RwObject *object, void *data); // this is used to disable _dam atomic and "enable" _ok atomic at vehicle model setup. Data is // unused static RpAtomic *HideDamagedAtomicCB(RpAtomic *atomic, void *data); // hide all atomics with state data (data is actually unsigned char) static RpAtomic *HideAllComponentsAtomicCB(RpAtomic *atomic, void *data); // check if material has alpha. Boolean result is stored to data (data is actually bool *) static RpMaterial *HasAlphaMaterialCB(RpMaterial *material, void *data); // setup atomic renderer. Data is unused static RpAtomic *SetAtomicRendererCB(RpAtomic *atomic, void *data); // setup heli renderer. Data is unused static RpAtomic *SetAtomicRendererCB_RealHeli(RpAtomic *atomic, void *data); // setup plane renderer. Data is unused static RpAtomic *SetAtomicRendererCB_Plane(RpAtomic *atomic, void *data); // setup boat renderer. Data is unused static RpAtomic *SetAtomicRendererCB_Boat(RpAtomic *atomic, void *data); // setup heli renderer. Data is unused static RpAtomic *SetAtomicRendererCB_Heli(RpAtomic *atomic, void *data); // setup train renderer. Data is unused static RpAtomic *SetAtomicRendererCB_Train(RpAtomic *atomic, void *data); // setup model render callbacks void SetAtomicRenderCallbacks(); // setup objects flag. Data is actually flag (unsigned short) static RwObject *SetAtomicFlagCB(RwObject *object, void *data); // clear all atomic flag. Data is actually flag (unsigned short) static RwObject *ClearAtomicFlagCB(RwObject *object, void *data); // set component flags void SetVehicleComponentFlags(RwFrame *component, unsigned int flags); // get wheel position. Wheel is wheel id [0-3]. Local - get local offset (if false it will get // world position) void GetWheelPosn(int wheel, CVector &outVec, bool local); // get component local offset. Component is a frame hierarchy id. Returns true if component present bool GetOriginalCompPosition(CVector &outVec, int component); // get vehicle extra with rules. Returns extra id. int ChooseComponent(); // get vehicle second extra with rules. Returns extra id. int ChooseSecondComponent(); // check if upgrade is available bool IsUpgradeAvailable(VehicleUpgradePosn upgrade); // change colors and settings of material according to vehicle color and lights states. Data // contains pointer to restore entries RpMaterial *SetEditableMaterialsCB(RpMaterial *material, void *data); // execute SetEditableMaterialsCB(RpMaterial *, void *) for atomic materials and also remove // vehicle window if needed. Data contains pointer to restore entries RpAtomic *SetEditableMaterialsCB(RpAtomic *atomic, void *data); // execute SetEditableMaterialsCB(RpAtomic *, void *) for atomics in clump. This one is called // before vehicle rendering void SetEditableMaterials(RpClump *clump); // reset materials settings. This one is called after vehicle rendering void ResetEditableMaterials(RpClump *clump); // set current vehicle colour for model void SetVehicleColour(unsigned char prim, unsigned char sec, unsigned char tert, unsigned char quat); // get color for car. variationShift determines how many color variations to skip. // For example, 1 will simply give you next color variation. void ChooseVehicleColour(unsigned char &prim, unsigned char &sec, unsigned char &tert, unsigned char &quat, int variationShift); // get num remaps in this model int GetNumRemaps(); // add remap to model. Txd is id of tex dictionary. void AddRemap(int txd); // adds wheel upgrade. This one is called from LoadVehicleUpgrades() static void AddWheelUpgrade(int wheelSetNumber, int modelId); // gets num upgrades for this set static int GetNumWheelUpgrades(int wheelSetNumber); // gets whell upgrade static void GetWheelUpgrade(int wheelSetNumber, int wheelUpgradeNumber); // do nothing static void DeleteVehicleColourTextures(); // loads 'white' texture static void LoadEnvironmentMaps(); // unloads 'white' texture static void ShutdownEnvironmentMaps(); // gets mat effect of this material. Data is actually int * static RpMaterial *GetMatFXEffectMaterialCB(RpMaterial *material, void *data); // sets mat effect for this meterial. Data is actually int static RpMaterial *SetEnvironmentMapCB(RpMaterial *material, void *data); // sets environment map intensity. Data is acually unsigned int static RpMaterial *SetEnvMapCoeffCB(RpMaterial *material, void *data); // do nothing static RpAtomic *SetRenderPipelinesCB(RpAtomic *atomic, void *data); // setups rendering pipelines for atomics in model (CCustomCarEnvMapPipeline::CustomPipeAtomicSetup) void SetRenderPipelines(); // gets car plate text // return m_plateText[0] != '\0' ? m_plateText : NULL; char *GetCustomCarPlateText(); // sets plate text void SetCustomCarPlateText(char *text); // gets max number of passengers for model static int GetMaximumNumberOfPassengersFromNumberOfDoors(int modelId); // remove some unused materials in model? void ReduceMaterialsInVehicle(); // setup lights states for currenly rendered vehicle void SetupLightFlags(CVehicle *vehicle); // move all objects from data (it is actually RwFrame *) to frame static RwFrame *CollapseFramesCB(RwFrame *frame, void *data); // setup vehicle model components void PreprocessHierarchy(); // setup environment map for atomic's materials. Data is actually int and it represents effect id static RpAtomic *SetEnvironmentMapAtomicCB(RpAtomic *atomic, void *data); // setup environment map intensity for atomic with data (unsigned int) static RpAtomic *SetEnvMapCoeffAtomicCB(RpAtomic *atomic, void *data); // setup custom plate void SetCarCustomPlate(); // disable environment map effect on model void DisableEnvMap(); // setup environment map intensity for model void SetEnvMapCoeff(float coeff); }; #pragma pack(pop) VALIDATE_SIZE(CVehicleModelInfo, 0x308);
Edit: Верните подсветку С++)
Last edited by DK22Pac (02-01-2014 04:48)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Немного запоздалый ответ,
потом найденный компонент вставлял в ту процедуру, но вылет.
Как оказалось, это не _stdcall, а _thiscall, просто this там не используется. Т.е. надо вызывать через 0AA6.
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Товарищи, а у кого-нибудь получалось найти доступ к компонентам объекта, созданного скриптом?
В структурах объектов, созданных скриптом, по смещению:
CEntity +0x18 = [dword] Указатель на RwObject (RpClump)
почему-то всё время записан ноль.
Offline
Верните подсветку С++)
Вернул Если заметите на каких-нибудь страницах ошибки, связанные с новой подсветкой, пишите в ПМ.
Offline
Подскажите пожалуйста ответы на следующие вопросы:
1) Можно ли скриптом у компонента авто, например у компонента авто игрока, изменить положение локальных осей не меняя при этом положения самого компонента (тоже самое про вращение локальных осей без вращения самого компонента)?
2) Можно ли скриптом отключить у транспорта, например у авто игрока, тень по подобию, как можно отключить коллизию?
Если можно, то пожалуйста напишите пример в клео.
Offline
Den_spb, после создания обьекта поставь wait.
kenking, это надо двигать вершины модели. Или создать дополнительный дочерний дамми.
Для теней я делал такой плагин (там "деревянные" тени заменяются на динамические)
http://www.gtagarage.com/mods/show.php?id=26155
Может он сможет решить проблемы?
Last edited by DK22Pac (27-06-2014 00:55)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
это надо двигать вершины модели. Или создать дополнительный дочерний дамми.
Не, надо не редактируя саму модель в редакторе, а именно клео скриптом. Ну например, возьмём компонент дверь. Этот компонент вращается вокруг своих локальных осей, положение, которых выставляется изначально при создании модели в редакторе 3d. Вот интересует - возможно ли скриптом переместить эти оси для изменения места вращения этого компонента не перемещая при этом сам компонент?
Для теней я делал такой плагин (там "деревянные" тени заменяются на динамические)
Может он сможет решить проблемы?
Спасибо, про этот твой плагин я знаю. Хорошая вещь.
Но интересует возможность отключить скриптом у отдельно взятого транспорта тень совсем, а не заменить на качественную.
Offline
1) Можно ли прицепить произвольный объект к какому-либо компоненту транспорта.
Можно.
.....
1.При движении автомобиля на большой скорости объект немного отстаёт от него.
2.После удаления транспорта объект перемещается в мировые координаты, равные заданным оффсетам.
А отцепить без удаления транспорта как?
Offline