An Online Role-Playing Game Guild

Management System

Matthew Lindberg

CS 470

Project Overview

Goal

Develop a web application for managing members within an online game guild

Client will be the leaders of a guild, known in many games as the 'guildmaster'

The initial version of the game will be customized to work with World of Warcraft

Why

Many guilds track member data using pen and paper or spreadsheets. This becomes unwieldy and error-prone with large guilds.

Collaboration of many leaders would benefit from a central repository of member data.

Requirements

Deeds

Manage deeds that members can complete for guild points.

Responsibilities

Manage responsibilities that individual members or those with a specific rank have to complete on a timed basis

Ranks

Manage a rank ladder showing the hierarchical relationships of ranking members.

Define constraints for promotions to new ranks, automatically informing the guildmaster when a member is up for a promotion.

Members

Assign members responsibilities.

Add completed deeds to a member's deed log.

Manage member aliases, multiple in-game characters that a member can play as.

Finished Program

Example: Searching Deeds

Example: Editing members

Example: Rank Ladder

Architecture Overview: Layers of Responsibility

Html Smarty Templates

Model-View-Controller

Smarty Templates for Presentation Layer

Stages of user interface creation

Build HTML pages using CSS stylesheets

Find pieces of the page that vary and create Smarty Templates

Test templates with sample data set

Benefits

Enforcement of presentation and application logic seperation

When templates were fully tested, all page rendering bugs could be tracked by looking at code only

Reuse of presentation elements, such as the left hand menu

Template Example
Looping over a table row

{section name=membernotes loop=$sections.notes.notes}

<!-- Start member note entry -->

<tr class="rowTableList1">

<td class="cellData">{$sections.notes.notes[membernotes].datecreated}</td>

<td>

{$sections.notes.notes[membernotes].title}

</td>

<td>

<a class="anchorFunction" href="{$sections.notes.notes[membernotes].readlink}">read</a>

</td>

<td>

<a class="anchorFunction" href="{$sections.notes.notes[membernotes].deletelink}">delete</a>

</td>

</tr>

<!-- End member note entry -->

{/section}

Model-View-Controller for Application Layer

Seperation of Application Responsibilties

Controller: Handles a request by passing it to the correct Action object.

Actions: Uses a Model to perform logical operations. Also sets all Views for the Controller.

Model: All application logic and database access.

View: Sets all template variables using Model and Form objects.

Benefits

Constrained all database interaction to one section of code, the Models, making errors much easier to debug

Custom MVC Control Flow

Conclusion

The application is nearing completion and working as expected.

I learned:

How to integrate multiple technologies into one working project. Php, javascript, and Smarty templates were used in tandem to created many effects.

That re-factoring code when problems arise instead of 'hacking' solutions pays off in the future

How to visually design a consistent looking and usable web interface using CSS stylesheets.

The benefits of distribution of responsibilties using application layers ( MVC ).

Matthew Lindberg

2005-04-10T11:07:58