Giter Club home page Giter Club logo

hybradb's Introduction

Hybrasyl Example Database

This is a collection of XML files and Lua scripts for Hybrasyl Server. Hybrasyl uses XML to store maps, items, NPCs and other world data, and Lua scripts for NPC/reactor/game event scripting.

You can help expand this database by creating issues or pull requests, and we welcome it. The files here are intended to get Hybrasyl running locally for further Hybrasyl development, but also to aid content developers & designers to craft new content.

How to use this repository

This repository is intended to be checked out alongside a new server setup. You can create the Hybrasyl directory (My Documents/Hybrasyl on Windows 10 - or, on GNU/Linux, ~/Hybrasyl for the user running the server), and check out this repository to world, e.g. Hybrasyl/World. Then the server should start normally and load all of these data files.

What is included?

A few test maps, lots of different items, and a “resurrector” NPC who will take care of you if and when you die. There is also at least one example XML file for every "type" of XML used by Hybrasyl. You’ll be able to test combat, too, by going to the Crypt, as a spawngroup is included.

Working with XML

The nice thing about XML is that it is trivially easy to verify the correctness of a file (that is to say, a file Hybrasyl will parse and use). There are a variety of tools you can use to validate XML against schema; we use xmllint for these examples, but there are a lot of other tools out there.

To make validating XML easier for burgeoning authors, Hybrasyl's schema are included and kept up to date in this repository (in the Schema directory).

Let's consider monk_kalkuri.xml. We can use xmllint to verify this against the main Hybrasyl schema, and pretty print it to boot:

$ xmllint xml/items/monk_kalkuri.xml --schema Schema/Hybrasyl.xsd

<?xml version="1.0"?>
<Item xmlns="http://www.hybrasyl.com/XML/Hybrasyl/2020-02">
  <Name>Kalkuri</Name>
  <Properties>
    <Appearance Sprite="916" DisplaySprite="1" BodyStyle="Transparent"/>
    <Stackable Max="1"/>
    <Physical Value="30000" Weight="11" Durability="3000000" Perishable="false" Vendorable="false" Bound="false"/>
    <Equipment Slot="Weapon" Unique="false" WeaponType="OneHand"/>
    <StatModifiers>
      <Base Str="0" Con="0" Int="0" Wis="0" Dex="0" Hp="500" Mp="500"/>
      <Combat Hit="5" Dmg="10" Ac="-5" Regen="0" Mr="10"/>
    </StatModifiers>
    <Flags>Depositable Tailorable Exchangeable Master</Flags>
    <Variants/>
    <Damage>
      <Small Min="324" Max="364"/>
      <Large Min="454" Max="484"/>
    </Damage>
    <Restrictions>
      <Level Min="99"/>
  	  <Class>Monk</Class>
    </Restrictions>
  </Properties>
</Item>
xml/items/monk_kalkuri.xml validates

Now we know Hybrasyl will load and use this file! Hooray. There is also a script included to do this for you. validator.sh can be used to validate all schema and only print out errors. For example:

[baughj@caputina HybraDB]$ ./validator.sh
./maps/mileth_village.xml:73: parser error : AttValue: " or ' expected
    <Sign Type="Sign" X="13" Y=42">
                               ^
./maps/mileth_village.xml:73: parser error : attributes construct error
    <Sign Type="Sign" X="13" Y=42">
                               ^
./maps/mileth_village.xml:73: parser error : Couldn't find end of Start Tag Sign line 73
    <Sign Type="Sign" X="13" Y=42">
                               ^
./maps/mileth_village.xml:75: parser error : Opening and ending tag mismatch: Signs line 72 and Sign
    </Sign>

All Hybrasyl XML must specify an XML namespace - you'll note that all the files in this repository do. Currently, the main namespace for Hybrasyl is http://www.hybrasyl.com/XML/Hybrasyl/2020-02. This is specified using the xmlns attribute for the root element in an XML file (e.g. <Item>, <Map>, etc). For instance: <Item xmlns="http://www.hybrasyl.com/XML/Hybrasyl/2020-02">.

You can learn more about Hybrasyl XML and Hybrasyl’s datatypes by looking at Hybrasyl’s schema or by looking at the resulting C# datatypes.

The project uses a proprietary tool called xsd2code to process schema into C# objects. If you plan on making a PR against Hybrasyl to make data changes, @baughj, the holder of the project’s xsd2code license, can help you with this.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.