InstanceDungeonbase by App

11/03/2018 21:06 MrDemian#1
Hallo EPvp,
Da mir so langsam die Lösungsansätze ausgehen möchte ich heute dann auch mal eine Frage stellen:

Idee und Grundkonzept:
Die Grundidee war es, durch eine CWnd auszuwählen welches Dungeon man betreten möchte. (Sonst funktioniert das ganze über den pPortkey)

Mein Code:
CDPSRVR: (exakt wie bei Teleport by App normal)
PHP Code:
pUser->REPLACE(g_uIdofMultidwWorldIdvPosREPLACE_NORMALnDefaultLayer); 
CMover::Replace:
PHP Code:
        if (CInstanceDungeonHelper::GetInstance()->IsInstanceDungeon(dwWorldID))
    {
        
//if (!CInstanceDungeonHelper::GetInstance()->IsInstanceDungeon(static_cast<CUser*>(this)->GetWorld()->GetID()))
        
CInstanceDungeonHelper::GetInstance()->EnteranceDungeon(static_cast<CUser*>(this), dwWorldID);
    } 
Problematik A: Er übergibt mir keinen Layer was definitiv am nDefaultLayer liegt da dieser const int 0 ist; pUser->GetLayer() maybe?


CInstanceDungeonBase::CreateDungeonLayer (Error)
PHP Code:
    if( !pWorld->CreateLayerstatic_cast<int>( dwLayer ) ) )
    {
        
Error"CInstanceDungeonBase::CreateDungeonLayer() - CreateLayer Failed! Type:%d, DungeonID:%d, WorldID:%d"GetType(), dwLayerID_Info.dwWorldId );
        return 
FALSE;
    } 

Problematik B: Um Problematik A zu "überspringen" ließ ich das ganze einen Randomlayer erstellen dies funktioniert im Großen und Ganzen auch, aber er erstellt mir zwar ein separaten Dungeonlayer, aber ruft Funktionen wie CreateMonster nicht ab; Heißt Nix Lycanos kannste knicken.

Bitte gar nicht darum mir jetzt eine Komplettlösung da zu bringen, ein kleiner Schlag auf den Hinterkopf würde mir schon reichen.

Lieben Gruß,
Demian
11/03/2018 22:00 MrDemian#2
Quote:
Originally Posted by Yeat View Post
Wo wohnst gebe dir ein schlag aufm hinterkopf
https://de.wikipedia.org/wiki/Symbolik

#Closerequest

Man hätte selbst drauf kommen können, wenn man sich den pPortkey genauer anschaut.
Musste ebenfalls ein paar Änderungen noch vornehmen und wird nicht wie vorher aus dem CMover::Replace gelesen, aber:
PHP Code:
        if( vPos == D3DXVECTOR300) )
        {
            
REGIONELEMpPortkey pUser->UpdateRegionAttr();
            if( 
pPortkey && pPortkey->m_dwIdTeleWorld == dwWorldId )
                
vPos pPortkey->m_vTeleWorld;
            else
                return 
FALSE;
        } 
Da ich nicht über den Portkey replace sondern über ein Packet ist klar das immer False ist.

Danke für eure Aufmerksamkeit.