Du bist nicht eingeloggt.

B2B-Realm Status

Social Networks

B2B auf Twitter
B2B auf Facebook

Bugtracker

Account erstellen   |   Login   |   Download / How To Play   |  FAQ   |   Support

Beiträge: 35

Registrierungsdatum: 17.04.2011

Hauptcharakter: Moore

  • Private Nachricht

21

Samstag, 28. April 2012, 21:55

Okay, nach 1,5 Stunden Mangos-C++-Quelltext-Durchforsten bin ich auf folgende gestoßen:

In der Player.cpp wird zum Zeitpunkt, wenn der Spieler lootet, der Loot erzeugt. Zunächst wird in vielen, vielen Zeilen Code entschieden, welche Art von Loot es ist, also Kiste, Leichnahm oder sonstwas.
Dann wird bei Leichen von Mobs der Loot zunächst auf "nix" gesetzt. Wenn der Mob lootbar ist, dann wird eine Funktion namens "FillLoot" aufgerufen, die durch die Loot-Tabelle des Mobs läuft und für jedes Item nach seiner Chance für den Drop auswürfelt, ob es in die aktuelle Lootliste aufgenommen wird oder nicht.
Ist die Liste fertig, kommt das ganze dann beim Spieler an dem Bildschirm. Im Hintergrund wird der Loot an die Methoden für das Auswürfeln durch die Spieler weitergegeben, also für Gier, Bedarf, etc.

Ich kann nicht wirklich sagen, dass ich den Quellcode 100% verstanden habe, dazu fehlt die Zeit und ein bissl Testen mit dem Code, oder zumindestens eine anständige Dokumentation, die ich nicht habe, aber zumindest glaube ich herausgefunden zu haben, dass der Loot beim Tod des Mobs erst erzeugt wird.

Natürlich stellt das hier keinerlei Bezug zu realen Blizzard-Servern her, sondern bezieht sich nur auf Mangos.
The Lord is my shepherd; I shall not want. He maketh me to lie down in green pasture; he leadeth me beside the still waters. He restoreth my soul; he leadeth me in the paths of righteousness for his name's sake. Yea, though I walk through the valley of the shadow of death, I will fear no evil; for thou art with me; thy rod and thy staff they comfort me. Thou preparest a table before me in the presence of mine enemies; thou anointest my head with oil; my cup runneth over. Surely goodness and mercy shall follow me all the days of my life; and I will dwell in the house of the Lord for ever. - A Psalm of David. (King James Bible) -

22

Samstag, 28. April 2012, 23:34

Naja wenn du sagst es wird mit Methoden gearbeitet die expliziet beim eigentlichen Loot erst aufgerufen werden, dann entsteht der Loot den wir kennen wirklich erst wenn man das erste mal auf den Mob klickt.

Aber vielen Dank für deine Mühen das ganze rauszusuchen! :)
Wenn du vielleicht etwas mehr Zeit hast und es nicht gerade 500 Zeilen Code sind kannst dus auch hier posten? :)

Beiträge: 35

Registrierungsdatum: 17.04.2011

Hauptcharakter: Moore

  • Private Nachricht

23

Sonntag, 29. April 2012, 00:48

Das ist in der Tat sehr viel Quelltext von dem wie hier sprechen. Ich habe nur den Kern herausgepickt. Das ganze verschachtelt sich in mehrer Dateien. Das ganze System ist "eventbasiert". Es werden verschiedene Methoden in unterschiedlichen Klassen/Modulen aufgerufen bzw. Nachrichten versandt. Das sind schon ein paar tausend Zeilen von denen wir hier sprechen, wenn man wirklich den genauen Ablauf nachvollziehen will. Einfach nur ein Stück Methode herauszitieren hilft da nicht wirklich für das Verständnis.
Da der Code aber frei zugänglich ist, kann sich jeder der etwas von C++ versteht selbst auf die Reise in die tiefen Eingeweide des Servers machen. :P
The Lord is my shepherd; I shall not want. He maketh me to lie down in green pasture; he leadeth me beside the still waters. He restoreth my soul; he leadeth me in the paths of righteousness for his name's sake. Yea, though I walk through the valley of the shadow of death, I will fear no evil; for thou art with me; thy rod and thy staff they comfort me. Thou preparest a table before me in the presence of mine enemies; thou anointest my head with oil; my cup runneth over. Surely goodness and mercy shall follow me all the days of my life; and I will dwell in the house of the Lord for ever. - A Psalm of David. (King James Bible) -