[brauche Hilfe]Auto Updater

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [brauche Hilfe]Auto Updater

    Hey Leute :)
    Ich habe euch beim Surfen im Inertnet entdeckt :thumbsup: und dachte mir, hey hier muss ich gleichmal einziehen :whistling: .

    Ich bin GameAdmin für ein MMORPG, das Game heißt AION, es ist auf JAVA und XML gebaut.
    Nun habe ich eine Frage, vielleicht könnt ihr mir dabei helfen:

    Es gibts in dem Spiel sogenannte Festungen, hier ein Bild:
    [Blockierte Grafik: http://termitenprinz.files.wordpress.com/2009/10/festung1.jpg?w=450&h=265]

    Wie man sieht ist um die Festung ein Schild, dieses Schild sorgt dafür, dass niemand einfach von oben hinein fliegen kann, dem die Festung nicht gehört.
    Es gibts 3 Spezies: Asmo,Elyos,Balaur(NPC).
    Nun geht es dadrum, die Festungen für sich zu gewinnen, aber nun kommen wir zum Problem.
    Wie schaffe ich es per XML/JAVA einzustellen, dass diese Festungen immer sich je nach Spezies anpassen? Ich kann ja nicht nach jeder Schlacht den Server ausmachen, die XML ändern und wieder hochfahren.
    Die Asmos und Elyos haben jeweils eine Heimatfestung, die hat für immer ein Schild und in die dürfen natürlich nur Asmos/Elyos, dass ist also einfach, da es nie wechseln muss.

    Bisher sind folgende Datein vorhanden:

    dies ist die shields.xsd, in der werden die Parameter angegeben.

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
    3. <xs:include schemaLocation="../import.xsd" />
    4. <xs:include schemaLocation="../global_types.xsd" />
    5. <xs:element name="shields">
    6. <xs:complexType>
    7. <xs:sequence>
    8. <xs:element name="shield" type="Shield" minOccurs="0" maxOccurs="unbounded"/>
    9. </xs:sequence>
    10. </xs:complexType>
    11. </xs:element>
    12. <xs:complexType name="Shield">
    13. <xs:attribute name="name" type="ShieldName" />
    14. <xs:attribute name="race" type="Race" />
    15. <xs:attribute name="x" type="xs:float" />
    16. <xs:attribute name="y" type="xs:float" />
    17. <xs:attribute name="z" type="xs:float" />
    18. <xs:attribute name="radius" type="xs:float" />
    19. <xs:attribute name="skill" type="xs:int" />
    20. <xs:attribute name="map" type="xs:int" />
    21. </xs:complexType>
    22. <xs:simpleType name="ShieldName">
    23. <xs:restriction base="xs:string">
    24. <xs:enumeration value="PRIMUM_SHIELD" />
    25. <xs:enumeration value="TEMINON_SHIELD" />
    26. </xs:restriction>
    27. </xs:simpleType>
    28. </xs:schema>
    Alles anzeigen


    Und hier sind die bisherigen (asmo/elyos) Schilde eingetragen, mit koordinaten etc.

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <shields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="shields.xsd">
    3. <shield name="TEMINON_SHIELD" race="ELYOS" x="3002.9207" y="903.2752" z="1520.0913" radius="313.5392" skill="9881" map="400010000"/>
    4. <shield name="PRIMUM_SHIELD" race="ASMODIANS" x="893.7403" y="2953.727" z="1586.35" radius="357.0371" skill="9891" map="400010000" />
    5. </shields>


    Hier ist eine der Java Datein

    Quellcode

    1. package gameserver.dataholders;
    2. import gameserver.model.templates.shield.ShieldTemplate;
    3. import javax.xml.bind.annotation.XmlAccessType;
    4. import javax.xml.bind.annotation.XmlAccessorType;
    5. import javax.xml.bind.annotation.XmlElement;
    6. import javax.xml.bind.annotation.XmlRootElement;
    7. import java.util.List;
    8. /**
    9. * @author xavier
    10. */
    11. @XmlRootElement(name = "shields")
    12. @XmlAccessorType(XmlAccessType.FIELD)
    13. public class ShieldData {
    14. @XmlElement(name = "shield")
    15. private List<ShieldTemplate> shieldTemplates;
    16. public int size() {
    17. return shieldTemplates.size();
    18. }
    19. public List<ShieldTemplate> getSchieldTemplates() {
    20. return shieldTemplates;
    21. }
    22. }
    Alles anzeigen



    Und hier die 2.

    Quellcode

    1. package gameserver.model.shield;
    2. import gameserver.ai.npcai.DummyAi;
    3. import gameserver.controllers.ShieldController;
    4. import gameserver.model.gameobjects.Creature;
    5. import gameserver.model.templates.shield.ShieldTemplate;
    6. import gameserver.utils.idfactory.IDFactory;
    7. import gameserver.world.ShieldKnownList;
    8. import gameserver.world.World;
    9. /**
    10. * @author xavier
    11. */
    12. public class Shield extends Creature {
    13. private ShieldTemplate template = null;
    14. private String name = null;
    15. public Shield(ShieldTemplate template) {
    16. super(IDFactory.getInstance().nextId(), new ShieldController(), null, null, World.getInstance().createPosition(template.getMap(), template.getX(), template.getY(), template.getZ(), (byte) 0));
    17. ((ShieldController) getController()).setOwner(this);
    18. this.template = template;
    19. this.name = template.getName();
    20. setKnownlist(new ShieldKnownList(this));
    21. }
    22. public ShieldTemplate getTemplate() {
    23. return template;
    24. }
    25. @Override
    26. public String getName() {
    27. return name;
    28. }
    29. @Override
    30. public byte getLevel() {
    31. return 0;
    32. }
    33. @Override
    34. public void initializeAi() {
    35. ai = new DummyAi();
    36. ai.setOwner(this);
    37. }
    38. public void spawn() {
    39. World w = World.getInstance();
    40. w.storeObject(this);
    41. w.spawn(this);
    42. }
    43. }
    Alles anzeigen



    Ich dachte erst an PHP, aber kp wie man da PHP einbinden soll oder ist php in XML möglich?

    grade mal in die Spawnengine geschaut:
    also die "türen" werden ja auch ausgetauscht, nach dem die Festung gewechselt wurde:

    Quellcode

    1. public FortressGate spawnFortressGate(int fortressId, SiegeRace race, FortressGateTemplate template) {
    2. int mapId = DataManager.SIEGE_LOCATION_DATA.getSiegeLocations().get(fortressId).getLocationTemplate().getWorldId();
    3. int fgNpcId = template.getBaseInfo().getNpcId(race);
    4. SpawnTemplate sTemplate = addNewSpawn(mapId, 1, fgNpcId, template.getBaseInfo().getX(), template.getBaseInfo().getY(), template.getBaseInfo().getZ(), (byte) template.getBaseInfo().getH(), 0, 0, true, true);
    5. sTemplate.setStaticid(template.getBaseInfo().getStaticId());
    6. FortressGate gate = new FortressGate(IDFactory.getInstance().nextId(), new FortressGateController(), sTemplate, DataManager.NPC_DATA.getNpcTemplate(fgNpcId), fortressId, template);
    7. gate.setKnownlist(new NpcKnownList(gate));
    8. gate.setEffectController(new EffectController(gate));
    9. gate.setLifeStats(new NpcLifeStats(gate));
    10. gate.getController().onRespawn();
    11. bringIntoWorld(gate, sTemplate, 1);
    12. return gate;
    13. }
    Alles anzeigen


    Vielleicht ist dies auch möglich, mit Schilden?

    So genug Kram^^.

    Nebenbei: Hoffe dies ist in JAVA richtig, XML ist ja nur die "konfiguration" :)

    Lg Dracken

    P.s.: falls ihr alle Datein mal sehen wollt: aionxemu.googlecode.com/svn/trunk/GameServer/
    Dies ist ein OpenSource Projekt, für einen AionEmulator.


    EDIT:
    hier issn Video wo man denEffekt; bzw das Schild in Aktion; auf dem Original Server sehen kann:
    youtube.com/watch?v=xdQkrChez9s

    ***die sollten mal Spoiler Funktion hier einbauen >_<***

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Dracken ()

  • Das Projekt wird von mehreren Entwicklern betreut und bisher hatte noch keiner deren Entwickler eine Lösung dafür.
    Schon alleine die Schilde für die beiden festen Festungen haben ca. 6Monate gebraucht bis sie Funktionieren, also vor 6 Monaten konnte man noch einfach beim Feind reingehen ohne gegen ein Schild zu prallen.
  • Naja da Stellen sich mehrere Fragen, wie werden die Schilde erstellt, werden die Daten vom Konstruktor aus den XMLs geladen und anschliesend mit spawn platziert?
    Wie findet der wechsel der Schilder statt? Werden eifnach neue Daten vom Script in die XML geschrieben?
    Gibt es eine Update/Render Schleife die alle Objekte abklappert? Die könnte eventuekkl genutzt werden um die Daten neu zuladen.

    Mfg Rushh0ur
  • DIe Schilde werden, soweit ich weiß mit der sogenannten Spawnengine gespawnt, sie sind ja auch "npcs" die einfach nur super aggro sind und alles sofort töten :D
    Ja, ich benötige lediglich eine Funktion, die in die MySQL Datenbank schaut, sieht "ah ASMO hat festung eingenommen" und dann den Text von balaur auf Asmo ändert und das ganze sollte gehen ohne Server neustart.
    Schließlich sollen die Spieler einwandfrei spielen.
  • Das Ändern der Files sollte nicht das Problem sein.
    Mir stellt sich die Frage, wie die Engine damit umgeht, wenn du live was änderst?

    Kannst du das mal testen?
    Sprich per SSH / Remote Desktop auf den Server und per Editor das XML File anpassen. Wenns danach wie gewünscht läuft, könntest du per DB-Trigger (o.ä) ein Script zum aktualisieren anstoßen!

    Ciao
  • Unser Server läuft auf Linux/debian ich Connecte immer über putty und nutze nebenbei Filezilla für FTP und phpmyadmin für SQL.
    Die Datein kann ich per Filezilla hoch/runterladen, nur glaube ich, bringt dies nichts.
    Es muss also wahrscheinlich was mit Java zu tun haben, weil die XML werte werden immer erst übernommen, nach restart.
    Man kann sich den ganzen Server ja hier anschauen:
    aionxemu.googlecode.com/svn/trunk/GameServer/

    die XML Files, liegen hauptsächlich hier:
    aionxemu.googlecode.com/svn/tr…eServer/data/static_data/
    dort ist auch der ordner "shields" in dem die Schilde drinne sind.
    die Java datein sind in src und werden für Linux compiliert.
    Hier die Java Datein:
    aionxemu.googlecode.com/svn/trunk/GameServer/src/gameserver/

    Leider steht in der xml nicht, wie die beiden anderen Schilde gespawnt werden, die beiden Rassen ASMo/elyos hatten schon immer Schilde, seit es den emulator gibt, nur haben sie nie was bewirkt.
    Die Festungen, die man einnehmen kann haben in dem Video ja auch kein "sichtbares" Schild, also frage ich mich auch grade, wie man das machen soll, Luft die tötet?
  • Klar wird das was mit Java zu tun haben :D
    Aber es hätte ja auch sein können, dass die XML Files "live" gelesen werden, wenn sie gebraucht werden.

    Nach deinem Post gehe ich aber davon aus, dass die XML File direkt nach dem Start (des Servers) verarbeitet werden und dann nurnoch mit deren Objekten gearbeitet wird.
    Du brauchst also "im Prinzip" nur die Stelle im Code finden, wo die XML Inhalte verarbeitet werden, und diese Klasse / Methode nochmal per Srcipt ausführen.

    Ciao
  • Ich bin nur GameAdmin und nicht Developer xD Ich habe leider nochnicht soviel Ahnung. Ich überarbeite lediglich Datein.
    Magste mir im Detail, erklären, was ich machen könnte?
    Weil, XMl benötigt immer Server neustart, wenn ich zum Beispiel einstelle, dass man nun mehr EP bekommt benötigt man ein Serverneustart.
    MySQL geht ohne; nur ganz selten sollte man den Gameserver stoppen um einige Dinge zu ändern in MySQL; könnte man es nicht als Schild einfach "spawnen" und dann wirds per MySQL geändert?
    Die Festungen laufen ja schon über MySQL:



    Diese Einträge bewirken dann, dass es Sofort neu bespawnt wird, wenn man den Boss in der Festung tötet, wird die Festung von der Legion; das sind die Clans; und deren Rasse eingetragen und je nach Rasse dann neue NPC´s gespawnt, die NPC´s verteidigen dann die Festung bei neuen Angriffen, bis irgendwann z.b.: der ASMO Boss stirbt.
    Nun brauch ich keine Männchen die da rumstehen, sondern ein Schild, was sofort alles tot macht^^ und welches sich ändert, wenn die MySQL Datenbank eine neue Rasse einträgt.

    Also kommt nun auchnoch SQL/MySQL hinzu :love: Sorry :whistling:

    Lg Dracken
  • Sry für dich und alle die Projektmember, die daran Spaß hatten.

    Jedoch hat man doch schon von Anfang an was Grundlegend falsch gemacht, wenn nicht mal die eigenen Entwickler durch das Projekt durchblicken, wie es mir den anscheinend macht.
    Für die Zukunft kann man sich merken, dass man seine Projekt gut durchdenken sollte und vorallem Dokumentieren.

    Desweiteren finde ich liegt und lag es nicht in deinem Aufgabeberecich als Game Admin, dich für die Codierung und Programmierung zu kümmern, also da kann man nur noch mal sagen irgendwas ist bei euch Schief gelaufen.

    Mfg Rushh0ur
  • Hallo,
    Ja, ich fands auch bissl viel, aber es hatte sich niemand drum gekümmert.
    War auch nicht glücklich mit dem Projekt.
    Ja, dass mit den Schilden war meine Idee, dachte das sollte nun auchmal endlich gefixxt werden.

    Nunja, habe hier acc löschung beantragt.
    Danke für die nette Disskusion :)

    Lg Dracken
    Tschüssi