20.07.2019, 17:39:22
Kto jest zainteresowany kodem wtyczki.
Кому интересен код плагина.
Jestem taki zły w oratorium.
[i]Как же я плох в ораторстве.
https://yadi.sk/d/_3IHq_8eD4dbVA
https://yadi.sk/d/9b1mwY9zeVyx_g
Кому интересен код плагина.
#include "UnionAfx.h"
namespace Gothic_I_Classic {
//********************************************************************
// Чтение свойств НПС из архива (для Г1)
//********************************************************************
//0x006A31E0 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x006A31E0, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G1 ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
// Сначала вызываем оригинальную функцию
pNpc_Unarchive(_this, ar);
// Если _this - это мёртвый гоблин
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
// берём указатель на модель гоблина
zCModel* pModel = _this->GetModel();
// если указателя нет, то выходим
if (!pModel) return;
// получаем указатель на узел правой руки
zCModelNodeInst* pNodeInst = pModel->SearchNode(NPC_NODE_RIGHTHAND);
// если указателя нет, то выходим
if (!pNodeInst) return;
// иначе, стираем визуал узла
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
namespace Gothic_I_Addon {
// 0x006D5AD0 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x006D5AD0, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G1A ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
pNpc_Unarchive(_this, ar);
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
zCModel* pModel = _this->GetModel();
if (!pModel)
return;
zCModelNodeInst* pNodeInst = pModel->SearchNode(NPC_NODE_RIGHTHAND);
if (!pNodeInst)
return;
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
namespace Gothic_II_Classic {
// 0x006E8790 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x006E8790, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G2 ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
pNpc_Unarchive(_this, ar);
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_GOBBO_SKELETON || _this->guild == NPC_GIL_SUMMONED_GOBBO_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
zCModel* pModel = _this->GetModel();
if (!pModel)
return;
// объявляем пустой указатель на узел
zCModelNodeInst* pNodeInst = NULL;
// пробегаемся по всем узлам модели
for(int i = 0; i < pModel->nodeList.GetNum(); i++)
{
// проверяем указатель на прототип узла, если в порядке, то продолжаем
if (pModel->nodeList->protoNode)
{
// извлекаем название узла
string nodeName = pModel->nodeList[i]->protoNode->nodeName;
// если это узел правой руки (сравниваются названия)
if (nodeName.Compare(NPC_NODE_RIGHTHAND))
{
// запоминаем указатель на узел
pNodeInst = pModel->nodeList[i];
// выходим из цикла
break;
}
}
}
// если указатель на узел правой руки не найден
if (!pNodeInst)
// выходим из функции
return;
// иначе, стираем визуал узла
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
namespace Gothic_II_Addon {
// 0x00747230 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x00747230, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G2A ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
pNpc_Unarchive(_this, ar);
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_GOBBO_SKELETON || _this->guild == NPC_GIL_SUMMONED_GOBBO_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
zCModel* pModel = _this->GetModel();
if (!pModel)
return;
zCModelNodeInst* pNodeInst = pModel->SearchNode(NPC_NODE_RIGHTHAND);
if (!pNodeInst)
return;
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
namespace Gothic_I_Classic {
//********************************************************************
// Чтение свойств НПС из архива (для Г1)
//********************************************************************
//0x006A31E0 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x006A31E0, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G1 ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
// Сначала вызываем оригинальную функцию
pNpc_Unarchive(_this, ar);
// Если _this - это мёртвый гоблин
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
// берём указатель на модель гоблина
zCModel* pModel = _this->GetModel();
// если указателя нет, то выходим
if (!pModel) return;
// получаем указатель на узел правой руки
zCModelNodeInst* pNodeInst = pModel->SearchNode(NPC_NODE_RIGHTHAND);
// если указателя нет, то выходим
if (!pNodeInst) return;
// иначе, стираем визуал узла
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
namespace Gothic_I_Addon {
// 0x006D5AD0 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x006D5AD0, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G1A ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
pNpc_Unarchive(_this, ar);
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
zCModel* pModel = _this->GetModel();
if (!pModel)
return;
zCModelNodeInst* pNodeInst = pModel->SearchNode(NPC_NODE_RIGHTHAND);
if (!pNodeInst)
return;
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
namespace Gothic_II_Classic {
// 0x006E8790 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x006E8790, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G2 ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
pNpc_Unarchive(_this, ar);
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_GOBBO_SKELETON || _this->guild == NPC_GIL_SUMMONED_GOBBO_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
zCModel* pModel = _this->GetModel();
if (!pModel)
return;
// объявляем пустой указатель на узел
zCModelNodeInst* pNodeInst = NULL;
// пробегаемся по всем узлам модели
for(int i = 0; i < pModel->nodeList.GetNum(); i++)
{
// проверяем указатель на прототип узла, если в порядке, то продолжаем
if (pModel->nodeList->protoNode)
{
// извлекаем название узла
string nodeName = pModel->nodeList[i]->protoNode->nodeName;
// если это узел правой руки (сравниваются названия)
if (nodeName.Compare(NPC_NODE_RIGHTHAND))
{
// запоминаем указатель на узел
pNodeInst = pModel->nodeList[i];
// выходим из цикла
break;
}
}
}
// если указатель на узел правой руки не найден
if (!pNodeInst)
// выходим из функции
return;
// иначе, стираем визуал узла
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
namespace Gothic_II_Addon {
// 0x00747230 protected: virtual void __thiscall oCNpc::Unarchive(class zCArchiver &)
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar);
static CInvoke <void(__thiscall*)(oCNpc*, zCArchiver&)> pNpc_Unarchive(0x00747230, Npc_Unarchive, Union.GetEngineVersion() == TEngineVersion::Engine_G2A ? IVK_AUTO : IVK_DISABLED);
static void __fastcall Npc_Unarchive(oCNpc* _this, void* vt, zCArchiver& ar)
{
pNpc_Unarchive(_this, ar);
if (_this && (_this->guild == NPC_GIL_GOBBO || _this->guild == NPC_GIL_GOBBO_SKELETON || _this->guild == NPC_GIL_SUMMONED_GOBBO_SKELETON) && _this->attribute[NPC_ATR_HITPOINTS] == 0)
{
zCModel* pModel = _this->GetModel();
if (!pModel)
return;
zCModelNodeInst* pNodeInst = pModel->SearchNode(NPC_NODE_RIGHTHAND);
if (!pNodeInst)
return;
pModel->SetNodeVisual(pNodeInst, NULL, FALSE);
}
}
}
[i]Как же я плох в ораторстве.
https://yadi.sk/d/_3IHq_8eD4dbVA
https://yadi.sk/d/9b1mwY9zeVyx_g