Multis

From Iris2

Jump to: navigation, search
 
cougar: huhu
ghoulsblade: nabend =)
cougar: sage mal... multis...
cougar: also ich meine customizable houses
cougar: werden die wirklich mit dem 0xD8 auf den client übertragen?
ghoulsblade: ma guggen was 0xd8 bei uns is
ghoulsblade: oki, also es gibt clientside multis (die standard-häuschen im baumenu, die man nicht customizen kann) und serverside multis (die man customizen kann)
cougar: genau letztere sind interessant ;)
ghoulsblade: 0xd8 ist soweit ich mich nicht täusche das packet mit dem der server dem client die daten schickt wie das haus genau ausschaut
ghoulsblade: gibts 2 formate, compressed und uncompressed
cougar: kurzum meine idee wäre folgende
cougar: der sa client hat irre probleme mit großen ansammlungen von dynamics
cougar: also unsere mit xmlspawner gespawnten addons
cougar: ich frage mich ob man die in ein "Haus" pressen kann
ghoulsblade: ah, multi draus machen ?
ghoulsblade: is nur trickreich mit der grösse vom multi
ghoulsblade: also breite x höhe
ghoulsblade: das ist in dem netzwerk protokoll total verkorkst, die wird nicht direkt geschcikt
cougar: die frage ist da wie tollerant ist der client da *g*
ghoulsblade: naja, müsste eigentlich wunderbar gehen
cougar: das fundament interessiert mich dabei weniger, das würde ich sogar im boden versenken
cougar: die frage ist wenn ich ein 8x8 fundament mache
cougar: kann/darf ich dann einen größeren aufbau da drüber setzen
ghoulsblade: warum nich ? machen spielerhäuser doch auch oder ?
cougar: nicht wirklich, das design passt immer auf die grundfläche
ghoulsblade: aahso meinst du das
ghoulsblade: über das 8x8 hinaus
cougar: jop
ghoulsblade: das wird vom packet her nicht gehen
ghoulsblade: das ist wie gesagt etwas seltsam aufgebaut
cougar: soweit ich geshene hab
cougar: sind das alles relative koordinaten
ghoulsblade: ich kenne das format nicht so genau, nur ich weiss das wir einige probleme damit hatten die höhe/breite richtig zu interpretieren, und das da auch noch nen bug drinhaben
cougar: also als tip
cougar: die größe bekommst du vom multi selber
cougar: der aufbau selber gibt die serial des fundamentes mit an
ghoulsblade: "multi selber" = dynamic ?
cougar: das item genau
ghoulsblade: ah oki
cougar: also das virtuelle item das eigentlich die mutli id ist
cougar: da drüber müsste man die dimmensionen locker rausbekommen
ghoulsblade: moment, das dynamic hat ne multi-serial, die referenziert die multi-daten die vom server in 0xD8  geschickt wurden
ghoulsblade: nur wo kriege ich da die serial vom fundament raus ?
cougar: mom ich schau kurz
ghoulsblade: hmm, ich seh da in unserem code was von wegen "mehrere planes", und jede plane hat nen planetype , vll isses das ja
cougar: ich kämpfe auch noch um das alles da zu verstehen
cougar: also im runuo heisst es
ghoulsblade: brauchst dich nicht mit abquälen wegen mir, ich zerpflück mir iwann mal den runuo code genau und schreib den multiloader um
cougar: public SendQueueEntry( NetState ns, HouseFoundation foundation, DesignState state )
cougar: m_Serial = foundation.Serial;
cougar: das ist jetzt alles in der sendqueue drinn
cougar: dann im compression thread
cougar: SendQueueEntry sqe = (SendQueueEntry)m_SendQueue.Dequeue();
ghoulsblade: hrm, d.h. 2 verschiedene, gleichgrosse häuser haben dieselbe serial ?
cougar: p = new DesignStateDetailed( sqe.m_Serial, sqe.m_Revision, sqe.m_xMin, sqe.m_yMin, sqe.m_xMax, sqe.m_yMax, sqe.m_Tiles );
ghoulsblade: kann eigentlich auch ned sein
cougar: nene alle items in dem packet
cougar: haben die serial der foundation
ghoulsblade: hmm ? also für jedes item hab ich "artid,x,y,z"
cougar: public DesignStateDetailed( int serial, int revision, int xMin, int yMin, int xMax, int yMax, MultiTileEntry[] tiles ) : base( 0xD8 )

sureCapacity( 17 + (tiles.Length * 5) );

ite( (byte) 0x03 ); // Compression Type
ite( (byte) 0x00 ); // Unknown
ite( (int) serial );
ite( (int) revision );
ite( (short) tiles.Length );
ite( (short) 0 ); // Buffer length : reserved
ite( (byte) 0 ); // Plane count : reserved
cougar: das ist das packet
cougar: serial ist der erste eintrag in den parametern
cougar: und die serial landet im packet da
cougar: d.h. die serial der foundation steht im header von 0xD8
ghoulsblade: hmm, ich glaub die bezeichnung "foundation" ist irreführend
cougar: das ist die klasse in runuo
cougar: also das fundament des hauses
ghoulsblade: wenn 2 unterschiedliche, gleichgrosse häuser da sind
cougar: die grundplatte in dem fall
ghoulsblade: haben die an der stelle        Write( (int) serial );     wo die "foundation" serial steht ,    nicht den gleichen wert stehen
cougar: ne pass auf
cougar: ich hab ein haus auf dem server
cougar: ist die klasse foundation (ist für euch egal) ihr bekommt ein item mit der Itemid 0x53EC
cougar: und einer Serial von was weiss ich 0x001
cougar: ist (war) nach altem standard ein Multi da itemid > 0x4000
cougar: so jetzt kommt das 0xD8 packet
cougar: das hat dann in seinem header die serial 0x001
ghoulsblade: hmm...
ghoulsblade: als Write( (int) serial ); ?
ghoulsblade: also die serial vom objekt statt der artid ? 
cougar: jo den schnipsel den ich da oben gepostet hab
ghoulsblade: oki, tricky
cougar: wenn du jetzt weisst das 0x001 ein multi mit der ID 0x13EC  (Also 53EC- 0x4000) ist
cougar: bekommst du raus das es sich dabei um eine grundplatte mit der größe 8x8 handelt
cougar: (aus der Multi.mul) oder meinetwegen hardcoded
cougar: ka wie osi da nun genau gearbeitet hat ;)
ghoulsblade: hmm also   item ( serial=0x001  artid=0x53ec)
ghoulsblade: und 0xd8 kommt mit     "foundation" serial (die write(..serial) zeile)   0x001  (wie item.serial)
cougar: genau
ghoulsblade: oki, annahme ich hab 2 gleichgrosse häuser mit gleicher foundation
cougar: macht nix
cougar: ein anderes multi hat ne andere serial
ghoulsblade: wäre das dann
0x001  artid=0x53ec)
0x002  artid=0x53ec)
ghoulsblade: mit artid gleich ?
cougar: jep
ghoulsblade: aaaah ok
cougar: die artid gibt nur den typ des multis an
cougar: also 8x8, 18x18
cougar: also die größe der grundplatte
ghoulsblade: ich dachte immer das jedes individuelle haus da was eigenes hat
cougar: und natürlich was der client an der stelle zeichnen soll
cougar: also das ding mit treppe, der umrandung
ghoulsblade: hmm moment
cougar: wobei ne die treppe ist auch schon server seitig generiert
cougar: so meine vermutung dazu ist jetzt
ghoulsblade: wo in dem 0xd8 steht denn zu das es zu 0x001 bzw 0x002 gehört ?
cougar: früher gab es ja nur die häuser mit der grauen umrandung
cougar: Write( (int) serial );

cougar: ganz oben im header
ghoulsblade: aaaaah ok, d.h. die artid steht nur im item, nicht im 0xd8
cougar: genau
cougar: 0xd8 braucht die itemid nicht mehr
cougar: die kennt er schon
cougar: durch die referenz auf das multi
cougar: so jetzt kommt das neue
cougar: also meine fixe idee dahinter ;)
cougar: ich vermute mal früher gab es ja nur die graue borte
cougar: die du ja auch im uofiddler/insideUO siehst
cougar: das ist ja heute anders
ghoulsblade: "heute" = 7er client ? =)
ghoulsblade: kurz afklo
cougar: heute = Post 4.0.0.0i
cougar: ;)
cougar: ok
ghoulsblade: re
cougar: wb
ghoulsblade: 4.0.0.0i : hmm, neben der grauen borte gibts noch paar andere ränder zur auswahl, oder wie meinst du das ?
cougar: jep genau
cougar: elven, das dunkle, holz weiss der geier was noch ;D
ghoulsblade: jo, ist das teil der foundation = item.artid ?
ghoulsblade: oder is das extra daten im 0xd8 ? weiss ich grad nich 
cougar: das ist jetzt ja die frage
cougar: genau das versuche ich gerade zu klären ;)
cougar: wenn das in der Multi.mul in standard grau hinterlegt ist, wie kommt das haus zu seinem anderen aussehen
ghoulsblade: setz doch mal 2 gleiche  häuser nebeneinander, und gugg dir dx8 an (razor packetlog) , artid müsste gleich sein
ghoulsblade: dann bei einem die foundation ändern und nochmal dx8 anguggen
cougar: jep genau, die können wir ja auch mit insideuo sehen
cougar: meine vermutung ist
ghoulsblade: wenn foundation anders is, isses da drinne, ansonsten muss es in den daten sein
cougar: das sie die multi id nur noch benutzen um die größe heraus zu finden
cougar: und die kante selber in 0xd8 steckt
ghoulsblade: da gibts son komischen stair krams
cougar: ja die treppen sind selber multis
cougar: also die großen internen
cougar: die sache ist ja auch du kannst ja fussboden legen in ebene 0
ghoulsblade: ich glaub das hängt an dem was wir als planetype .haben ... *im runuo code gugg*
cougar: wenn hier wiederrum nur der standard boden (dirt) vorhanden wäre
cougar: wie kann ich den dann mit marmor überlagern
cougar: ausserdem habe ich das hier gefunden
cougar: // If needed, replace removed component with a dirt tile
if ( ax >= 1 && ax < mcl.Width && ay >= 1 && ay < mcl.Height - 1 )
{
	Tile[] tiles = mcl.Tiles[ax][ay];

	bool hasBaseFloor = false;

	for ( int i = 0; !hasBaseFloor && i < tiles.Length; ++i )
		hasBaseFloor = ( tiles[i].Z == 7 && (tiles[i].ID & 0x3FFF) != 1 );

	if ( !hasBaseFloor )
	{
		// Replace with a dirt tile
		mcl.Add( 0x31F4, x, y, 7 );
	}
}

cougar: // If needed, replace removed component with a dirt tile <----
cougar: soso wenn das schon im Multi stecken würde
cougar: bräuchte ich es ja wohl nach dem löschen nicht mit dirt überschreiben oder?
ghoulsblade: hmm, vll fungiert das im multi als override
ghoulsblade: ala, wenn in den multi daten was drinsteht wird es genutzt, ansonsten macht er standard grau mit dirt-tiles boden ausm foundation
cougar: .. ah ok und der macht das evtl server seitig nur damit der walk code was zu greifen hat
cougar: wär auch ne möglichkeit....
cougar: allerdings sendet er die gesammte multicomponentlist (mcl) an den client
cougar: wär das nur ne server krücke würde man die doch auslassen oder?
cougar: und wenn es ein override wäre könne man es wahrscheinlich mit artid 0x1 oder 0x0 (No Draw/Unused) überschreiben 
ghoulsblade: hmmm, muss man doch iwie ausporbieren können bevor man da gross rumrätselt
ghoulsblade: iris hatn proxy mode
ghoulsblade: kannst es zwischen server und orginalclient hängen
cougar: ich denke immer gerne ein bisschen drauf rum bevor ich los lege ;)
ghoulsblade: und fröhlich packete vermurksen
cougar: dann kann ich vorab abschätzen ob sich die mühe lohnt ^^
ghoulsblade: aber brauchste vermutlich garned, kannst ja direkt das schicken was du willst
cougar: jep, also bisher bin ich mit den theoretischen grundlagen zufrieden denke ich ^^
ghoulsblade: hehe =)
cougar: als versuch könnte ich ein haus schicken mit leerer mcl
cougar: dann müsste im idealfall nichts an der stelle erscheinen wo ich das haus baue
ghoulsblade: oder die standardfoundation %)
cougar: oder das genau
cougar: aber beides würde mich in dem fall weiter bringen
ghoulsblade: falls die standardfoundation kommt, müsste es als override funktionieren
cougar: weil entweder die eine oder die andere theorie bestätigt wär
cougar: genau ;)
ghoulsblade: was natürlich auch noch sein kann
ghoulsblade: is das im falle einer custom-foundation
cougar: das er dann crasht? ;)
ghoulsblade: die standardfoundation noch drunter is
ghoulsblade: und man nur die custom-foundation sieht, weil sie später gezeichnet wird
cougar: hehe stimmt das natürlich auch
cougar: aber!
cougar: dann dürfte es kein haus ohne zumindest die dirt platten geben
cougar: die hatte ich aber schonmal durch einen bug
ghoulsblade: hmmm, ok
cougar: ich geh auch mal aufs klo und teste das dann gleich mal aus, danke dir das war aufschlussreich
cougar: evtl hilfts dir ja iris zu verbessern 
ghoulsblade: jau, das stimmt =)
cougar: dachte halt das könnte dich auch interessieren da du das mit den multis schonmal erwähnt hattest
ghoulsblade: jo, das tuts auch
ghoulsblade: nur ich glaub ich warte bis die 7er multi-ids bei euch aktiv sind
ghoulsblade: dann mach ich gleich beides in einem aufwasch
cougar: hehe ok, schreibs dir auf, das könnte wichtig sein *g*
Personal tools