Vállpánt hiba.

Indította TTMaster112, 2017-03-11, 15:45:34

Sziasztok be szerettem volna rakni ezt a vállpánt rendszert.
http://metin2hungary.net/index.php/topic,197811.msg1046282.html#msg1046282
Szerver rész szépen le is fordult viszont a inditó már bajos
Állandóan kidobja az error-t 100x átnéztem és nem látok hibát benne.
Erre panaszkodik elméletileg
void CActorInstance::AttachSash(CItemData * pItemData, float fSpecular)
{
if (!pItemData)
{
RegisterModelThing(CRaceData::PART_SASH, NULL);
SetModelInstance(CRaceData::PART_SASH, CRaceData::PART_SASH, 0);
RefreshActorInstance();
return;
}

RegisterModelThing(CRaceData::PART_SASH, pItemData->GetModelThing());
SetModelInstance(CRaceData::PART_SASH, CRaceData::PART_SASH, 0);
AttachModelInstance(CRaceData::PART_MAIN, "Bip01 Spine2", CRaceData::PART_SASH);

if (fSpecular > 0.0f)
{
SMaterialData kMaterialData;
kMaterialData.pImage = NULL;
kMaterialData.isSpecularEnable = TRUE;
kMaterialData.fSpecularPower = fSpecular;
kMaterialData.bSphereMapIndex = 1;
SetMaterialData(CRaceData::PART_SASH, NULL, kMaterialData);
}
}
#endif

Elvileg Racedata.h-ban nincs ott. [spoiler]class CRaceData
{
   public:
      enum EParts
      {

         PART_MAIN,
         PART_WEAPON,
         PART_HEAD,
         PART_WEAPON_LEFT,
         PART_HAIR,
#ifdef ENABLE_SASH_SYSTEM
         PART_SASH,
#endif[/spoiler]


Na akkor nézzük elsőnek is:


Gamelib/RAcedata.h nyisd meg

Valahová a tetejére írd ezt be:

#include "../UserInterface/Locale_inc.h"


Aztán

GameLib/ActorInstanceAttach.cpp nyisd meg:


ez alá:
#include "../EffectLib/EffectManager.h"

Tedd be ezt:

#include "../UserInterface/Locale_inc.h"

Majd ha ezekkel meg vagy:

GameLib/ItemData.cpp nyisd meg

Keres rá erre:

void CItemData::SetItemScale

és az egészet cseréld le erre:


#ifdef ENABLE_SASH_SYSTEM
void CItemData::SetItemScale(const std::string strJob, const std::string strSex, const std::string strScaleX, const std::string strScaleY, const std::string strScaleZ, const std::string strPositionX, const std::string strPositionY, const std::string strPositionZ)
{
DWORD dwPos;
if (strJob == "JOB_WARRIOR")
dwPos = NRaceData::JOB_WARRIOR;
else if (strJob == "JOB_ASSASSIN")
dwPos = NRaceData::JOB_ASSASSIN;
else if (strJob == "JOB_SURA")
dwPos = NRaceData::JOB_SURA;
else
dwPos = NRaceData::JOB_SHAMAN;

dwPos += 1;
if (strSex == "F")
dwPos += 5;

m_ScaleTable.tInfo[dwPos].fScaleX = float(atof(strScaleX.c_str()) / 100.0f);
m_ScaleTable.tInfo[dwPos].fScaleY = float(atof(strScaleY.c_str()) / 100.0f);
m_ScaleTable.tInfo[dwPos].fScaleZ = float(atof(strScaleZ.c_str()) / 100.0f);
m_ScaleTable.tInfo[dwPos].fPositionX = float(atof(strPositionX.c_str()) * 100.0f);
m_ScaleTable.tInfo[dwPos].fPositionY = float(atof(strPositionY.c_str()) * 100.0f);
m_ScaleTable.tInfo[dwPos].fPositionZ = float(atof(strPositionZ.c_str()) * 100.0f);
}

bool CItemData::GetItemScale(DWORD dwPos, float & fScaleX, float & fScaleY, float & fScaleZ, float & fPositionX, float & fPositionY, float & fPositionZ)
{
fScaleX = m_ScaleTable.tInfo[dwPos].fScaleX;
fScaleY = m_ScaleTable.tInfo[dwPos].fScaleY;
fScaleZ = m_ScaleTable.tInfo[dwPos].fScaleZ;
fPositionX = m_ScaleTable.tInfo[dwPos].fPositionX;
fPositionY = m_ScaleTable.tInfo[dwPos].fPositionY;
fPositionZ = m_ScaleTable.tInfo[dwPos].fPositionZ;
return true;
}
#endif

Actor isntance ba több dolgot kell ???

leírtam mit kell próbáld meg hidd el jó lesz :D

Azt elfelejtettem írni hogy az utolsót csak akkor kell megcsinálnod ha van kutyusod is :D

2017-03-11, 17:34:18 #6 Utolsó szerkesztés: 2017-03-11, 17:46:29 Szerző: TTMaster112
Jólvan letesztelem :DD

Üzenet összefésülés: 2017-03-11, 17:40:54

Na most meg ez nem tetszik neki.
:D
#ifdef ENABLE_SASH_SYSTEM
char szItemScale[256];
snprintf(szItemScale, sizeof(szItemScale), "%s/item_scale.txt", localePath);
if (!rkItemMgr.LoadItemScale(szItemScale))
Tracenf("LoadLocaleData: error while loading %s.", szItemScale);
#endif


Üzenet összefésülés: 2017-03-11, 17:46:29


Na az már berakási hiba az biztos de amint gép előtt leszek ahol van forrásom is meglessem neked


ő a userinterface esetében hozzá adtad a python_sash.h és cpp filet?

beraktam User interface mappába :)

a.a miondjárt mondom mit csinálj:

PApplication ba is beraktam :)
#ifdef ENABLE_SASH_SYSTEM
#include "PythonSash.h"
#endif

na szóval visual studioba jobb klik a userinterface-re jobb oldalt.

ott keresd az Add menüpontot és azon belül pedig a Existing item-et.

Meg fog nyílni egy ablak és ott ad keresd meg  a python_sash.h fájt és add hozzá

Nem írom le mégegyszer a pyston_sash.cpp esetében is ugyan ezt kell megcsinálni és hozzá lesz adva.

Attól hogy bemásolod még a vs nem tudja hogy neki azt is olvasni kell :D

2017-03-11, 18:25:21 #14 Utolsó szerkesztés: 2017-03-11, 18:37:14 Szerző: TTMaster112
Amint hazaérek letesztelem :D

Üzenet összefésülés: 2017-03-11, 18:37:14

Sikerült köszi :D
Témát nyitva hagyom háte még merül fel hiba

nincs mit szívesen

Valamiért nem szeretne együtt müködni a kosztüm fegyverrel...
db sysser:
SYSERR: Mar 11 21:22:18.348545 :: Set_Proto_Item_Table: ItemProto Reading Failed : Invalid value. (index: 3, col: 3, value: COSTUME_WEAPON)

Nem ezzel nem az a baj hogy nem akar együtt működni, hanem, hogy nem ismeri fel ezt a typust hogy: costume_weapon.

Amit tudok tanácsolni nézd meg szerver oldali forrásban db mappa azon belül src és   Proto_reader.cpp-ben benne van e rendesen. Tehát a sub_type 28-asnál véletlenül nem  e töröltél ki egy ifdef end if-et, mert az a baja hogy ott hibádzik valami. Van mikor jobb elhagyni a definiálást és csak simán berakni példa gyanánt nekem sincsen dwefiniálva lásd itt:

static string arSub28[] = {"COSTUME_BODY", "COSTUME_HAIR", "COSTUME_ACCE", "COSTUME_WEAPON", "COSTUME_MOUNT"};


Most így néz ki
static string arSub28[] = {"COSTUME_BODY", "COSTUME_HAIR", "COSTUME_WEAPON", "COSTUME_SASH"};

Egész véletlen akkor nem töröltél ki valamit mikor raktad be a sash systemet mert így jónak kell lennie elviekben pár a protodat nem látom. Szerintem a forrást nézd át a kosztüm fegyverek esetében minden a helyén van mert elviekben a proto_reader.cpp ha abból másoltad ki akkor ismernie kellene. De indításkor a syser mégis valamiért nem akarja. Esetlegesen common item_lenght.h ellenőrizd még hogy ott bent van e
De így számomra most kicsit nehéz hogy se forrást nem ,látok se protot. Vizuális típus vagyok ha látom általában megoldom a hibát