#!/usr/bin/env ruby # $Revision: 1.26 $ # $Date: 2003/12/06 18:12:08 $ # $Author: jefus, mikeman2 $ class System attr_accessor :server, :rooms, :skills, :commands, :passwd, :pidHash, :mobiles, :items, :progs # important pregame initialization; required files, skills, world population def System.start(port = 4000) System.Deps #Load needed files $system = System.new(port) #Load the system $system.initSkills #Load skills system $system.initRooms $system.initMobiles $system.initBackend #Initialize DRb backend end def System.Deps require "lib/logger" #Logging mechanism require "lib/ansify" #Text string ansification method require "lib/connection" #Handles incoming connections require "lib/server" #Guess what this does require "lib/ability" #Alternity-style abilities require "lib/dice" #Duh require "lib/skill" #Alternity-style skills require "lib/cfile" #MySQL configuration storage (requires newmain/mysql.dat db login info) require "lib/marshalsql" #Marshal into SQL db module require "lib/base" #Base object class require "lib/room" #Room class require "lib/mobile" #Mobile class require "lib/player" #Player class require "lib/item" require "lib/prog" require "lib/commands" #Command systems require "lib/backend" #DRb backend system (set ACLs in lib/backend.rb to restrict access) require "lib/crypt" #256 bit crypto (requires newmain/crypt.dat keyfile for corresponding db) end def initSkills armorOperation = Skill.new("armor operation", 7, "C", "str") combatArmor = Skill.new("combat armor", 3, "C", "str", true, armorOperation) poweredArmor = Skill.new("powered armor", 4, "C", "str", false, armorOperation) athletics = Skill.new("athletics", 3, "C", "str") climb = Skill.new("climb", 2, "", "str", true, athletics) jump = Skill.new("jump", 1, "", "str", true, athletics) throw_ = Skill.new("throw", 2, "", "str", true, athletics) Logger.log("Skills loaded.") end def initRooms roomlist = ['0', '1'] #replace with an autoloader roomlist.each{|rid| @rooms.store(rid, Room.new(rid)) } Logger.log("Rooms loaded.") end def initialize(port = 4000) @skills = [] @commands = Commands.new #Prepare commands system @passwd = CFile.new("system:data:passwd") @pidHash = CFile.new("system:data:pid") #Load player ID hash @rooms = Hash.new @items = Array.new @mobiles = Array.new @progs = Progs.new #initRooms @server = Server.new(port) #Start listening for connections Logger.log("System loaded.") end def initMobiles @rooms.each{|rid, room| room.initMobiles } Logger.log("Mobiles loaded.") end def players #Array of connected players arr = [] @server.connections.each {|conn| arr << conn.player if conn.player } return arr end end