View source
From Iris2
for
Multis
Jump to:
navigation
,
search
<pre> 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* </pre>
Return to
Multis
.
Views
Page
Discussion
View source
History
Personal tools
Log in
main
Main Page
Screenshots
download
Install Guide
Forum
FAQ
Macros
Credits
dev
Developer Blog
A Guide for Artists
Development
Item Model List
Iris-Testshard
Bugreports
SvnLog
API C++
API Lua
wiki
Recent changes
Random page
Help
Search
Toolbox
What links here
Related changes
Special pages