classless_mud 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +24 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +32 -0
- data/Rakefile +5 -0
- data/bin/classless_mud +11 -0
- data/classless_mud.gemspec +29 -0
- data/conf/settings.yml +4 -0
- data/lib/classless_mud.rb +72 -0
- data/lib/classless_mud/account_builder.rb +81 -0
- data/lib/classless_mud/character.rb +39 -0
- data/lib/classless_mud/character_sheet.rb +26 -0
- data/lib/classless_mud/character_sheet_builder.rb +72 -0
- data/lib/classless_mud/client.rb +47 -0
- data/lib/classless_mud/colorizer.rb +33 -0
- data/lib/classless_mud/commands.rb +32 -0
- data/lib/classless_mud/commands/admin/kick.rb +15 -0
- data/lib/classless_mud/commands/bad_command.rb +81 -0
- data/lib/classless_mud/commands/character.rb +9 -0
- data/lib/classless_mud/commands/chat.rb +14 -0
- data/lib/classless_mud/commands/commands.rb +31 -0
- data/lib/classless_mud/commands/dance.rb +20 -0
- data/lib/classless_mud/commands/eat.rb +26 -0
- data/lib/classless_mud/commands/get.rb +20 -0
- data/lib/classless_mud/commands/inventory.rb +12 -0
- data/lib/classless_mud/commands/look.rb +43 -0
- data/lib/classless_mud/commands/move.rb +16 -0
- data/lib/classless_mud/commands/quit.rb +16 -0
- data/lib/classless_mud/commands/say.rb +10 -0
- data/lib/classless_mud/commands/score.rb +12 -0
- data/lib/classless_mud/commands/whisper.rb +17 -0
- data/lib/classless_mud/commands/who.rb +9 -0
- data/lib/classless_mud/effect.rb +14 -0
- data/lib/classless_mud/exit.rb +15 -0
- data/lib/classless_mud/game.rb +40 -0
- data/lib/classless_mud/game_master.rb +12 -0
- data/lib/classless_mud/input_parser.rb +7 -0
- data/lib/classless_mud/item.rb +21 -0
- data/lib/classless_mud/npc.rb +12 -0
- data/lib/classless_mud/player.rb +57 -0
- data/lib/classless_mud/room.rb +60 -0
- data/lib/classless_mud/server.rb +18 -0
- data/lib/classless_mud/version.rb +3 -0
- data/lib/classless_mud/world.rb +26 -0
- data/tasks/db.rake +10 -0
- metadata +202 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
module Commands
|
3
|
+
class Score
|
4
|
+
extend ::ClasslessMud::Colorizer
|
5
|
+
|
6
|
+
def self.perform game, player, message
|
7
|
+
player.puts "You are level #{bright_yellow(player.level)}"
|
8
|
+
player.puts "You have #{bright_green(player.health)} (#{green(player.max_health)}) hit points"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
module Commands
|
3
|
+
CONNECTORS = ['to']
|
4
|
+
class Whisper
|
5
|
+
def self.perform game, player, message
|
6
|
+
_, target, *target_message = message.split(' ').reject { |word| CONNECTORS.include?(word.downcase) }
|
7
|
+
target_char = player.room.find_character target
|
8
|
+
if target_char.nil?
|
9
|
+
player.puts "You can't seem to find them here."
|
10
|
+
else
|
11
|
+
target_char.puts %[#{player.name} whispers, "#{target_message.join(' ')}"]
|
12
|
+
player.puts %[You whisper to #{target_char.name}, "#{target_message.join(' ')}"]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class Effect
|
3
|
+
include DataMapper::Resource
|
4
|
+
property :id, Serial
|
5
|
+
property :description, String
|
6
|
+
property :health_modification, Integer, default: 0
|
7
|
+
|
8
|
+
def affect player
|
9
|
+
player.puts description
|
10
|
+
player.affect_health health_modification
|
11
|
+
player.save!
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class Exit
|
3
|
+
DIRECTIONS = ['north', 'south', 'east', 'west', 'up', 'down']
|
4
|
+
include DataMapper::Resource
|
5
|
+
property :id, Serial
|
6
|
+
property :direction, String
|
7
|
+
belongs_to :source, 'Room', :key => true
|
8
|
+
belongs_to :target, 'Room', :key => true
|
9
|
+
validates_with_method :direction, :method => :case_insensitive_direction_check
|
10
|
+
|
11
|
+
def case_insensitive_direction_check
|
12
|
+
DIRECTIONS.include? self.direction.downcase
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class Game
|
3
|
+
attr_reader :players
|
4
|
+
attr_reader :settings
|
5
|
+
|
6
|
+
def initialize world, settings
|
7
|
+
@players = []
|
8
|
+
@world = world
|
9
|
+
@settings = settings
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_player player
|
13
|
+
@players << player
|
14
|
+
@world.add_player player
|
15
|
+
starting_room.enter player
|
16
|
+
broadcast "#{player.name} has joined the game."
|
17
|
+
end
|
18
|
+
|
19
|
+
def starting_room
|
20
|
+
@world.starting_room
|
21
|
+
end
|
22
|
+
|
23
|
+
def remove_player player
|
24
|
+
@players.delete player
|
25
|
+
broadcast "#{player.name} has left the game."
|
26
|
+
end
|
27
|
+
|
28
|
+
def broadcast message
|
29
|
+
@world.handle_message message
|
30
|
+
end
|
31
|
+
|
32
|
+
def display_players player
|
33
|
+
player.puts <<EOS
|
34
|
+
Currently active players
|
35
|
+
------------------------
|
36
|
+
#{@players.map(&:name).join("\n")}
|
37
|
+
EOS
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class Item
|
3
|
+
include DataMapper::Resource
|
4
|
+
property :id, Serial
|
5
|
+
property :type, Discriminator
|
6
|
+
property :name, String
|
7
|
+
property :short_description, String
|
8
|
+
property :keywords, String
|
9
|
+
property :edible, Boolean, default: false
|
10
|
+
|
11
|
+
has n, :effects
|
12
|
+
|
13
|
+
def edible?
|
14
|
+
edible
|
15
|
+
end
|
16
|
+
|
17
|
+
def affect player
|
18
|
+
effects.each { |effect| effect.affect(player) }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class Player
|
3
|
+
include DataMapper::Resource
|
4
|
+
include ClasslessMud::Character
|
5
|
+
property :password, DataMapper::Property::BCryptHash
|
6
|
+
|
7
|
+
def client= client
|
8
|
+
@client = client
|
9
|
+
end
|
10
|
+
|
11
|
+
def close_client
|
12
|
+
@game.remove_player self
|
13
|
+
@client.close_connection
|
14
|
+
end
|
15
|
+
|
16
|
+
def on &callback
|
17
|
+
@client.on &callback
|
18
|
+
end
|
19
|
+
|
20
|
+
def puts message
|
21
|
+
@client.puts message
|
22
|
+
end
|
23
|
+
|
24
|
+
def puts_inline message
|
25
|
+
@client.send_data message
|
26
|
+
end
|
27
|
+
|
28
|
+
def handle_message message
|
29
|
+
if message.empty?
|
30
|
+
# do nothing
|
31
|
+
else
|
32
|
+
Commands.parse(message).perform @game, self, message
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def display_prompt
|
37
|
+
puts_inline "#{name} > "
|
38
|
+
end
|
39
|
+
|
40
|
+
def max_health
|
41
|
+
10 * character_sheet.strength
|
42
|
+
end
|
43
|
+
|
44
|
+
def look
|
45
|
+
handle_message "look"
|
46
|
+
end
|
47
|
+
|
48
|
+
def die
|
49
|
+
self.puts "You dead. Respawning..."
|
50
|
+
GameMaster.respawn_player self
|
51
|
+
end
|
52
|
+
|
53
|
+
def respawn_room
|
54
|
+
@game.starting_room
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class Room
|
3
|
+
include DataMapper::Resource
|
4
|
+
property :id, Serial
|
5
|
+
property :description, String
|
6
|
+
has n, :players
|
7
|
+
has n, :npcs
|
8
|
+
has n, :exits, :child_key => [ :source_id ]
|
9
|
+
has n, :connected_rooms, self, :through => :exits, :via => :target
|
10
|
+
has n, :items
|
11
|
+
|
12
|
+
def enter player
|
13
|
+
broadcast "#{player.name} entered the room"
|
14
|
+
self.players << player
|
15
|
+
player.look
|
16
|
+
end
|
17
|
+
|
18
|
+
def characters
|
19
|
+
npcs.to_a + players.to_a
|
20
|
+
end
|
21
|
+
|
22
|
+
def exit player
|
23
|
+
self.players.delete player
|
24
|
+
broadcast "#{player.name} left the room"
|
25
|
+
end
|
26
|
+
|
27
|
+
def broadcast message
|
28
|
+
self.players.each do |occupant|
|
29
|
+
occupant.puts message
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def broadcast_say from, message
|
34
|
+
self.players.each do |player|
|
35
|
+
if player == from
|
36
|
+
player.puts "You say '#{message}'"
|
37
|
+
else
|
38
|
+
player.puts "#{from.name} says '#{message}'"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def handle_message message
|
44
|
+
broadcast message
|
45
|
+
end
|
46
|
+
|
47
|
+
def find keywords
|
48
|
+
keywords_array = keywords.split
|
49
|
+
items.detect do |item|
|
50
|
+
(item.keywords.split & keywords_array).any?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def find_character keyword
|
55
|
+
characters.detect do |character|
|
56
|
+
character.name.include? keyword
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class Server
|
3
|
+
def initialize port, game
|
4
|
+
@port = port
|
5
|
+
@game = game
|
6
|
+
end
|
7
|
+
|
8
|
+
def start
|
9
|
+
@signature = EventMachine.start_server('0.0.0.0', @port, ::ClasslessMud::Client) do |client|
|
10
|
+
client.start @game
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def stop
|
15
|
+
EventMachine.stop_server(@signature)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ClasslessMud
|
2
|
+
class World
|
3
|
+
def initialize rooms
|
4
|
+
@players = []
|
5
|
+
@rooms = rooms
|
6
|
+
end
|
7
|
+
|
8
|
+
def add_player player
|
9
|
+
@players << player
|
10
|
+
end
|
11
|
+
|
12
|
+
def starting_room
|
13
|
+
@rooms[0]
|
14
|
+
end
|
15
|
+
|
16
|
+
def handle_message message
|
17
|
+
broadcast message
|
18
|
+
end
|
19
|
+
|
20
|
+
def broadcast message
|
21
|
+
@rooms.each do |room|
|
22
|
+
room.handle_message message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/tasks/db.rake
ADDED
metadata
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: classless_mud
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Patrick McFadden
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activesupport
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: eventmachine
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: datamapper
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: dm-sqlite-adapter
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: dm-postgres-adapter
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: Run your own server
|
126
|
+
email:
|
127
|
+
- pemcfadden@gmail.com
|
128
|
+
executables:
|
129
|
+
- classless_mud
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .gitignore
|
134
|
+
- Gemfile
|
135
|
+
- LICENSE.txt
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- bin/classless_mud
|
139
|
+
- classless_mud.gemspec
|
140
|
+
- conf/settings.yml
|
141
|
+
- lib/classless_mud.rb
|
142
|
+
- lib/classless_mud/account_builder.rb
|
143
|
+
- lib/classless_mud/character.rb
|
144
|
+
- lib/classless_mud/character_sheet.rb
|
145
|
+
- lib/classless_mud/character_sheet_builder.rb
|
146
|
+
- lib/classless_mud/client.rb
|
147
|
+
- lib/classless_mud/colorizer.rb
|
148
|
+
- lib/classless_mud/commands.rb
|
149
|
+
- lib/classless_mud/commands/admin/kick.rb
|
150
|
+
- lib/classless_mud/commands/bad_command.rb
|
151
|
+
- lib/classless_mud/commands/character.rb
|
152
|
+
- lib/classless_mud/commands/chat.rb
|
153
|
+
- lib/classless_mud/commands/commands.rb
|
154
|
+
- lib/classless_mud/commands/dance.rb
|
155
|
+
- lib/classless_mud/commands/eat.rb
|
156
|
+
- lib/classless_mud/commands/get.rb
|
157
|
+
- lib/classless_mud/commands/inventory.rb
|
158
|
+
- lib/classless_mud/commands/look.rb
|
159
|
+
- lib/classless_mud/commands/move.rb
|
160
|
+
- lib/classless_mud/commands/quit.rb
|
161
|
+
- lib/classless_mud/commands/say.rb
|
162
|
+
- lib/classless_mud/commands/score.rb
|
163
|
+
- lib/classless_mud/commands/whisper.rb
|
164
|
+
- lib/classless_mud/commands/who.rb
|
165
|
+
- lib/classless_mud/effect.rb
|
166
|
+
- lib/classless_mud/exit.rb
|
167
|
+
- lib/classless_mud/game.rb
|
168
|
+
- lib/classless_mud/game_master.rb
|
169
|
+
- lib/classless_mud/input_parser.rb
|
170
|
+
- lib/classless_mud/item.rb
|
171
|
+
- lib/classless_mud/npc.rb
|
172
|
+
- lib/classless_mud/player.rb
|
173
|
+
- lib/classless_mud/room.rb
|
174
|
+
- lib/classless_mud/server.rb
|
175
|
+
- lib/classless_mud/version.rb
|
176
|
+
- lib/classless_mud/world.rb
|
177
|
+
- tasks/db.rake
|
178
|
+
homepage: ''
|
179
|
+
licenses:
|
180
|
+
- MIT
|
181
|
+
metadata: {}
|
182
|
+
post_install_message:
|
183
|
+
rdoc_options: []
|
184
|
+
require_paths:
|
185
|
+
- lib
|
186
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - '>='
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '0'
|
191
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
requirements: []
|
197
|
+
rubyforge_project:
|
198
|
+
rubygems_version: 2.0.14
|
199
|
+
signing_key:
|
200
|
+
specification_version: 4
|
201
|
+
summary: Simple Mud Server
|
202
|
+
test_files: []
|