Code Monkey home page Code Monkey logo

archaicquest-ii's Introduction

ArchaicQuest II - MUD codebase written in C#

alt ArchaicQuest II

A MUD codebase to create a multiplayer text based RPG, also known a Multi User Dungeon (MUD)

Goal of ArchaicQuest II is to make a MUD that feels nostalgic and compelling to play as well as providing a MUD codebase that makes building and managing your own game simple and fun especially for non coders with the help of the admin tool.

play.archaicquest.com is the flagship MUD built with ArchaicQuest II.

Current Features

  • Currently 54 commands, commands can also be abbreviated ๐Ÿ” 
  • Cardinal and Ordinal Movement directions including up and down ๐Ÿฆถ
  • Auto Attack combat rounds โš”
  • Skills & spells ๐Ÿ’ซ
  • 350+ socials ๐Ÿ˜ƒ
  • Look, examine, smell, taste, and touch objects ๐Ÿ‘๐Ÿ”Ž๐Ÿ‘ƒ๐Ÿ‘…๐Ÿค
  • Day and Night cycles ๐ŸŒž๐ŸŒ›
  • Communication among players publicly and privately ๐Ÿ’ฌ
  • NPCs can follow waypoints and execute commands ๐ŸŽญ
  • Ability to add simple or complex quests with Lua Scripting โ‰
  • Event scripts for NPCs/Rooms for your scripting needs ๐Ÿ“œ
  • Room and NPC emotes ๐Ÿ’ƒ

About the Projects

ArchaicQuest II comprises of 3 projects that are required together.

Project Description
ArchaicQuest II C# game engine, contains the web API for the admin tool and the SignalR hub for the web socket connects to the client.
ArchaicQuest II - Admin tool Angular 8+ web admin, allows creation and management of your MUD world.
ArchaicQuest II - Game Client Angular 8+ web client for connecting to the game and playing with others.

ArchaicQuest II

The C# project is .NET Core 3.1 and uses LiteDb which is an embedded NoSQL database. Within Startup.cs it will seed the database on first run with the necessary defaults that are required.

  • Alignments
  • AttackTypes
  • Skills
  • Races
  • Status
  • Classes
  • Config

Some of the above can be edited in the admin tool, the rest if required to be changed needs to be done in code.

The last important step that isn't seeded yet is the very first room! For now before connecting to the game you will need to fire up the web admin tool and create an area and then create a room in said area. Then the web client will be able to connect correctly.

Running the project

Use dotnet run --project ArchaicQuestII.API/ArchaicQuestII.API.csproj.

If on unix you can use the make file in the project to run using make run.

For Windows using visual studio just hit the run button.

There's no output to say it's running but once you make a request it wakes up and responds.

Basic Structure overview

  • ArchaicQuestII.API
    • Handles all the API endpoints and initialises everything in Startup.cs
  • ArchaicQuestII.DataAccess
    • Wrapper around LiteDB. To add new collections you need to modify Collections enum and the GetCollectionName switch
  • ArchaicQuestII.GameLogic
    • All game logic here plus the SignalR and Telnet logic. Best place to start is Commands.cs to see what commands exists and how to add more.

Adding Commands / Features

View the existing structure in Commands.cs there may be an interface where you can add your new command. If not follow the existing structure to add a new interface and class and make sure to update the tests once you add the new interface to Commands.cs

To add new skills and spells use the web admin tool, skills and spells can be scripted with Lua for custom formulas and effects.

Majority of features added have been built with the admin tool in mind so most content can be added or modified without coding or making a deployment

Telnet Support

Traditionally MUDs use telnet as the way to communicate but with ArchaicQuest II it's web only, the browser can offer a richer, consistent, and streamlined interface for all players without having them to download a client.

Want to get involved?

If you're a coder, writer, MUD player, or someone who wants to help up then get in touch and say 'Hello' on the discord server: https://discordapp.com/invite/nuf7FVq


Admin Tool

View the ArchaicQuest II - Admin tool to find out more.

alt ArchaicQuestII Web Admin

Game Client

View the ArchaicQuest II - Game Client to find out more.

alt ArchaicQuestII Web Admin

archaicquest-ii's People

Contributors

danrigby avatar liamkenneth avatar naughtymolegames avatar robinsond76 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

archaicquest-ii's Issues

Item Screen

Need a page that displays a Mat-Table of all the items in the database with filtering
The page will have a button to create a new item
The table will have the ability to edit an item and soft delete an item

Traps

Traps - on player enter roll D 100. If player Dex is greater than dice roll then player does NOT trigger trap. If player Dex is lower than dice roll then trap triggers and deals damage or triggers event, the trap is destroyed when it triggers.
(events may be relocating a player down a Z level, summoning a Mob, giving player a debuff)
When a player is in the room if they are a thief they can dismantle the trap and retrieve some components, and use the trap skill themselves (Example Trap marbles, will build a marble trap in the room)
Marble Trap - make player prone ,requires Marbles to build
Pungi Trap - 2 D 10 requires 4 Branches to build
Arrow Trap - 3 D 10 requires Wire, Arrow

WIMPY

Usage: wimpy [hp]

Use the WIMPY command to automatically flee once your health drops below
a certain level.

Examples:

wimpy 35 will make your character automatically flee a fight
if you have less than 35 hit points.
wimpy 0 will turn off wimpy mode.
wimpy will show you your current wimp status.

BANK WITHDRAW DEPOSIT BALANCE commands

Commands to take money out of the bank, put money in the bank, or see how
much money you have in the bank. Can be used at any mob that is type bank

Examples:

deposit 400
withdraw 1000
balance

ASSIST

Usage: ASSIST

If Quifael is being beaten senseless by a warg and you feel brave enough
to help him, type ASSIST QUIFAEL to hit the warg. Note that the warg will
keep hitting Quifael; assist only makes you start to fight whomever the
person you're assisting is fighting.

assist quifael

UNGROUP

Usage: ungroup [group member]

UNGROUP can be used by group leaders to disband the entire group, or
to kick a specific group member out of the group (and stop him/her from
following the leader).

Examples:

ungroup
ungroup homer

Add Where Command

The where command shows the player other players in the area and the room they're in. This is to help collaboration and RP but also used to find PK targets

if there are players:

where
<area name>
Players near you:
<Player name>  <Room Name>
<Player name>  <Room Name>

if no players:

Where
<area name>
Players near you:
None

The player can only see visible players, if someone is invisible they are only seen in 'where' if the player has detect invis on. (detect invis should be an affect flag that already exists)

Syntax: where

'where' will list details about the current area and the locations of all visible players within it.

Add 'where', 'whe' to the switch case in commands.cs to call the class that deals with the 'where' command

Kingdom - non PvP clan

The following commands are available to all Kingdom Leaders.

Krank - Sets recruiter status for a member of the Kingdom.
Syntax: Krank (character) kingdomname_rec

Krenegade - Removes a person from the kingdom displaying a global echo.
Syntax: Krenegade (character)

Banish - Removes a person from the kingdom without a global echo.
Syntax: krank (character) (Kingdom)_banish

Guild - Allows entry into the kingdom by a recruiter for a member outside of
the kingdom.
Syntax: Guild (character)
Note: The character wishing to be guilded must first INVITE the recruiter.

Setextrastatus - Honors the extradition of WANTED characters in the target
kingdom. Characters wanted by the selected kingdom will also be wanted
within the kingdom adopting this command.
Syntax: setextrastatus (targetkingdom)

Note: Type extrastatus (kingdom) to see the full list of a kingdoms
current extradition status.

Toggleooc - Toggles on and off the OOC Kingdom channel.
Syntax: Toggleooc

Kmotd - Shows the currently posted Kingdom Message Of The Day.
Syntax: KMOTD

Kmotd edit- Allows for changes made to the Kingdom Message Of The Day.
Editing may be done as one would with a note.
Syntax: KMOTD edit

Settax - Sets the tax rate of a kingdom which collects a percentage of
monetary gains made within, including sales, vendor and merchant district
purchases and quest rewards.
Syntax: Settax (number)

Pardon - Removes the wanted flag from a character in the kingdom.
Syntax: Pardon (character)

Kinfo - For kleaders, shows the kingdom bank account info in eggs, gold
and silver.
Syntax: kinfo (kingdomname)

Sirname - Creates a newly granted title for the members of a kingdom. Two
titles must be created, one for the male and female slot.
Syntax: sirname (male title) (female title)

Note: Sirname (male title) (female title) on an existing sirname will
erase it from the list.

Grant - Applies one of the the preset sirnames to a kingdomer, regardless of
gender.
Syntax: grant (sirname title)

NOTELL

Usage: notell

Use NOTELL if you wish to prevent other players from using "tell" to
communicate with you. (notell) will appear after your name in the WHO
list if you have notell on.

ALIAS Command

$9 may be used to represent arguments given with
an alias.

Examples:

alias killem cast 'fireball' $1; cast 'harm' $2
killem fido mage

Would cast fireball on fido, followed by casting harm on mage. Variables
may be used repeatedly and in any order:

alias helpem cast 'heal' $1; cast 'bless' $1; cast 'armor' $1

The special variable $* represents the entire input line after an alias:

alias tr tell rasmussen $*
tr hi there, how are you today?
You tell Rasmussen, 'hi there, how are you today?'

Fishing

while fishing it sends emote skill not found

label:question can I install AQ on Linux?

Hi visualstudio I have been installed.

So all what I see on your docu is for windows.

Can you a me a give me a little bit support zu make this?

Love greetings from Germany

When selecting item type of Container

The user should see these fields:

  • Container Items (Section displaying items in container)
  • A button to add items that opens a Modal with an autocomplete drop down that searches items in the DB and puts the found item into the container.
  • update server call to handle container items

When selecting item type of Potion

The user should see these fields:

  • Drop down for Spell - Hard code strings till we have a spell class
  • input for Level - determines strength of potion
  • update post method for new fields

SPLIT

Usage: split

Split is used to split money among people in your group who are in the same
room as you. If you are in a group with 4 other people, all of whom are in
the same room with you, and you type SPLIT 100, you will give each of the
other 4 group members 20 coins each. (100 coins is split 5 ways; you keep
your share and give everyone else their share).

Death bug

when a player dies it converts them to a ghost but does not teleport them to the start room and revive them.

DONATE command

Usage: donate
donate coins

This command takes an object that you no longer want and deposits in to a donation pit to assist newbies in getting started. The donation pit is picked at random a donation pit is any object with type = donation

donate shield
donate all.bread
donate 500 coins

Level up

Level up is not firing when enough XP is earned

Clans

CLAN LEADER COMMANDS

The following commands are for all Clan Leaders.

War - Allows the clan leader to declare war on another clan.
Syntax war

Toggleooc - Allows a clan leader to toggle oclan on and off.
Syntax toggleooc

Treaty - Allows a clan leader to declare peace with another clan.
Both clans must declare peace for this to work.
One leader must invite the other. Then the invited leader types the following
Syntax treaty

Rank - Allows a clan leader to set the rank on a clan member. Also works to
set leader ranks, but cannot demote leaders.
Syntax: rank

Exile - Allows a clan leader to exile a member of their clan.
Syntax exile
Note that to un-exile them, the leader just uses the same Syntax again,
to toggle it.

Renegade - Allows a clan leader to renegade another clan member.
Syntax: renegade

Cmotd - Shows the clan's current Cmotd.
Syntax - Cmotd edit (to edit the cmotd) opens modal to edit

Reclass - Allows a clan leader to reclass specified person to a specified
clan specific reclass.
Syntax - reclass

Guild - Allows entry into the clan by a recruiter for a member outside of
the clan.
Syntax: Guild (character)
Note: The character wishing to be guilded must first INVITE the recruiter.

Add Money to the game.

In the Item class (found in the Item folder of the GameLogic project)

  1. Add a new enum value to ItemTypes called Money
  2. Add a property of type int called Value to Item.cs this is to store the value of the money.

With a money item in the room, assuming it's called Gold coin

  1. The user will see "(500) gold coins stacked here."
    • 500 comes from the value property of the item.
  2. If there is more than one the user will see
    • "(500) gold coins stacked here."
    • "(250) gold coins stacked here."
    • "(1) gold coin here."
  3. If there is only 1 coin it should display
    • "(1) gold coin here." and not "(1) gold coins stacked here."

When a user picks up the item, it should not be visible in it's inventory

  1. In the inventory class (found in the commands folder of the GameLogic project) On the foreach of player.Inventory and a query to get all items where type != money

When a user picks up the item, the value needs to be added to the player

  1. In the Object class (found in the commands folder of the GameLogic project)
    in these methods:

    • Get
    • GetAll
    • GetAllContainer
    • GetFromContainer
  2. when the item is type money, add the value to player.Money.Value but don't save the item to the inventory.

When a user drops money, the value needs to be deducted from the player

  1. In the Object class (found in the commands folder of the GameLogic project)
    in these methods:
    • Drop
    • DropAll
    • DropAllContainer
    • DropInContainer

This will need to generate a new Money item for the room, probably in the Object class create a GenerateCoin method that takes a int value as a prameter and generates the correct room descriptions based on the value.

Character Creation Traits

Father Traits (pick your father occupation)

Soldier - +5 Str, +5 Con
Farmer - +10 Con
Scholar - + 5 Int, +5 Wis
Thief - + 10 Dex
Hunter - +5 Dex, +5 Wis
Mage - +10 Int
Merchant - +10 Cha

Mother Traits (pick your mother occupation)

Shield Maiden - +5 Str, +5 Con
Herbalist - +5 Int, +5 Wis
Priestess - +10 Wis
Seductress - +10 Cha
Witch - +10 Int
Dancer - +10 Dex

Childhood (pick your childhood occupation)

Street Urchin - +5 Dex, +5 Str
(Life of struggling to survive on the streets)

Apprenticeship - +5 Str, +5 Con
(hardwork working for your parents growing up)

Squire +10 Str
(you learned from following a knight)

Shop Clerk +10 Cha
(you worked in a shop as a child)

Scribe +5 Int, +5 Wis
(scribing for a lord or mage)

Young Adult years

Joined the Army +5 Str, 5 Con
Joined a Street Gang +10 Dex
Served in a Temple +5 Int, +5 Wis
Worked in a Library +10 Int
Shopkeeper +10 Cha
Lived in the Woods +5 Dex, +5 Wis
Escaped Slavery +10 Str
Farmer +10 Con
Worked at an Apothecary +10 Wis

Flaws (pick as many as you want)

Weak -5 Str
two left feet -5 Dex
Sickly -5 Con
Dullard -5 Int
Ignorant -5 Wis
Stutter -5 Cha
Club foot -5 Dex
Diminutive -5 Str
Fragile -5 Con
Foolish -5 Int
Absent Minded -5 Wis
Repugnant -5 Cha
Unlucky - -1 all stats
Scar -5 HP
Limp -5 Movement
Unattuned to magic -5 MP

Merits

Strong +5 Str
Nimble +5 Dex
Healthy +5 Con
Smart +5 Int
Sage +5 Wis
Charming +5 Cha
Catlike +5 Dex
Stalwart +5 Con
Giant +5 Str
Quick Witted +5 Int
Wise +5 Wis
Beautiful +5 Cha
Lucky +1 all stats

When selecting Item type of Book

The user should see these fields:

  • Number of pages
  • Page 1 - A textarea, with a button to add another textarea up to the max set in number of pages
  • If Page 1 is null, the book is blank and the Player can write in it.
    -You do need a class to handle books in the item class

ClientUpdateUI refactoring

Change the way client updates are sent. Instead of calling the update manually, make it so when a property that is being watched is changed the update would happen automatically.

BE Potions

add potion to Item type enum

create a command quaff

quaff x - x being name of the potion

this will consume the potion removing it from the inventory - use findNth and findObjectInventory from helpers

the potion item will have two properties
spell name and spell level

look up the skill with the name of the spell name and cast it at the same spell level as set.

may need a new method for casting on quaff to do this

Change flags implementation for Item

ItemFlags and DamageType in Item.cs should be a [Flags] enum to more easily allow multiple types. ItemFlag Property should subsequently be changed from List.

FILL

Usage: fill

If you want to fill a container you're holding with liquid from a fountain
in the same room as you.

Example:

fill canteen fountain

Push

An exit of a room is locked, but instead of requiring a key or lockpick the exit is barricaded or blocked.
The push command does a skill check against strength to open the exit.
Easy 30 Str
Moderate 50 Str
Difficult 70 Str
Hard 90 Str

Decay Items dropped in room

Items to be removed if they've been dropped and left for 7 days.

Crafted items should only last a set amount of ticks defined in the admin tool

potentially limit the amount of crafted items allowed in one room?

ORDER

Usage: order
order followers

Used for ordering pets and charmed people to do your evil bidding. You
can order everyone under your command with "order followers".

Examples:

order puppy eat bread
order cityguard sleep

Potential Memory Leak

I was attempting to run Archaic on 3 Repl.it projects, but the memory useage for building the client went up way too high and didn't work. Is there already a fix for this?

GSAY GTELL

Usage: gsay
gtell

Tell something to all the members of your group, even if they're not in the
room.

Add Who Command

Syntax: who

'who' without any arguments shows all visible players connected to the MUD.
It shows their current level, race, class, name, title, clan, and AFK

[level, race name, class name] [clan name] player name, player title.
for example:

[51 Hum Mag] [ Black Robes ] *AFK* Liam, Magus of the Black Tower 
Players found: 1 

Add 'who', 'wh' to the switch case in commands.cs to call the class that deals with the 'who' command

New Command - Area

Area
Displays where you are and a description of the area.


In Core.cs add new command called area.

when area is entered by the player they see the following output:

You are currently in: {area name}
{description}
This area is for level x - x
You have explored x of x rooms in this area. (x%)
You have completed x of x quests (x%)

example

You are currently in: Arundel
Arundel is the main town....
This area is for level 1 - 51
You have explored 10 of 65 rooms in this area. (15%)
You have completed 0 of 15 quests (0%)

a future requirement to include secrets too, currently no way to determine a secret. it could be a secret room found or an item hidden that's been found.

You have found 0 of 5 secrets (0%)

NOSUMMON

Usage: nosummon

all characters have SUMMON PROTECTION turned on by
default. This prevents people from summoning you and gives you a warning
message if someone tries. If you want to let someone summon you (i.e. if
someone wants to summon you for a legitimate reason), type NOSUMMON to turn
off summon protection. You can then type NOSUMMON again to turn protection
back on.

Climb

the UP and Down exits of a room are hidden and not allowed to be moved through normally.
instead the player types Climb Up or Climb Down and they are then moved in the correct Z axis.
The use of the skill checks against Dex depending on the difficulty assigned to the Climb.
Easy - 30 Dex
Moderate - 50 Dex
Difficult - 70 Dex
Hard - 90 Dex

TITLE

Usage: title

Sets the title people see on the WHO list You can't use parentheses (the "(" and ")" characters) because those
are reserved for flags.

New Command - Areas

Areas
Displays all areas in the game

In Core.cs add a new command called areas.

when areas is entered by the player, they see the following output:

Areas:
There are xxx Areas and xxxx Rooms
[1 - 10] Newbie Area [ Malleus ]
[5 - 12] The Farm [ Builder ]

[1 - 10] = level range for the area
Newbie Area = room name
[ Malleus ] = Builder name

Combat bugged

passive skills are being attempted to use although character doesn't know the skill yet

it returns a message you can't use that while your dead

UI Notice: HP and other bars are distractingly large and kind of annoying.

I'm not sure how to make it look better right now. I just noticed this being a problem.

image

I think at the very least:

  • The bars could be placed horizontally and made smaller somewhere.

image

Also:

  • darker colors would be better for those bars,
    • maybe adding some darker texture to them would help out as well.

Personally the bars are too complex.

  • I'd remove this one from the whole game, whatever that is:
    image

And remember to label what each bar does:
image

I'm completely lazy today.

Larger interface
image
Smaller interface
image

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.