Skip to content
Snippets Groups Projects
Commit 0b403ba4 authored by mcmlxxix's avatar mcmlxxix
Browse files

cleaned up editor commands & display, added new mob creation, misc updates

parent d24ce8bf
No related branches found
No related tags found
No related merge requests found
......@@ -209,7 +209,7 @@ Bot_Commands["SAVE"].command = function (target,onick,ouh,srv,lvl,cmd) {
srv.o(target,"You are not logged in.");
return;
}
if(player.@editing != 1) {
if(player.@editing == undefined) {
srv.o(target,"You must be editing to save.");
return;
}
......@@ -226,6 +226,8 @@ Bot_Commands["SAVE"].command = function (target,onick,ouh,srv,lvl,cmd) {
Bot_Commands["HELP"] = new Bot_Command(0,false,false);
Bot_Commands["HELP"].command = function (target,onick,ouh,srv,lvl,cmd) {
log(cmd);
cmd.shift();
var topic=cmd.shift();
if(!topic) {
var cmd_str="";
......@@ -271,7 +273,7 @@ Bot_Commands["RESTORE"].command = function (target,onick,ouh,srv,lvl,cmd) {
srv.o(target,"You are not logged in.");
return;
}
if(player.@editing != 1) {
if(player.@editing == undefined) {
srv.o(target,"You must be editing to restore.");
return;
}
......@@ -357,7 +359,8 @@ Editor_Commands["SET"] = function (srv,target,map,room,cmd,player) {
return;
}
switch(player.@editing) {
var zone=zones[player.@zone];
switch(player.@editing.toString()) {
case "room":
edit_room_data(srv,target,zone,player,set,cmd);
break;
......@@ -373,6 +376,9 @@ Editor_Commands["SET"] = function (srv,target,map,room,cmd,player) {
case "zone":
edit_zone_data(srv,target,zone,player,set,cmd);
break;
default:
log("unknown edit mode: '" + player.@editing + "'");
break;
}
}
......@@ -380,11 +386,11 @@ Editor_Commands["LINK"] = function (srv,target,map,room,cmd,player) {
cmd.shift();
var link=cmd.shift();
if(!link) {
srv.o(target,"Type 'rpg help unlink' for help.");
srv.o(target,"Type 'help link' for help");
return;
}
switch(link.tolowerCase()) {
switch(link.toLowerCase()) {
case "north":
case "south":
case "east":
......@@ -393,14 +399,35 @@ Editor_Commands["LINK"] = function (srv,target,map,room,cmd,player) {
case "down":
var room_id=cmd.shift();
if(!room_id) {
srv.o(target,"TODO: auto-link adjacent room if no id is specified");
var start=new Coords(0,0,0);
var finish=get_exit_coords(start,link.toLowerCase());
room_id=find_link(map,room,start,finish,undefined);
if(room_id == -1) {
srv.o(target,red + "There is no unlinked exit there");
return;
}
var target_room=map.room.(@id == room_id);
var exit=room.exit.(@name == link.toLowerCase());
/* set exit target for current room */
if(exit.@target.toString()=="") {
room.exit += <exit name={link.toLowerCase()} target={room_id}/>;
srv.o(target,green + "Room exit added");
/* change corresponding exit for target room */
if(settings.autolink)
target_room.exit.(@name == reverse_dir(link.toLowerCase())).(@target = room.@id);
} else {
srv.o(target,red + "That exit is already linked");
}
} else {
var target_room=map.room.(@id == room_id);
var exit=room.exit.(@name == dir);
var exit=room.exit.(@name == link.toLowerCase());
/* set exit target for current room */
if(exit.@target.toString()=="") {
room.exit += <exit name={dir} target={room_id}/>;
room.exit += <exit name={link.toLowerCase()} target={room_id}/>;
srv.o(target,green + "Room exit added");
/* change exit target for current room */
......@@ -410,7 +437,8 @@ Editor_Commands["LINK"] = function (srv,target,map,room,cmd,player) {
}
/* change corresponding exit for target room */
if(settings.autolink) target_room.exit.(@name == reverse_dir(dir)).(@target = room.@id);
if(settings.autolink)
target_room.exit.(@name == reverse_dir(link.toLowerCase())).(@target = room.@id);
}
break;
default:
......@@ -423,26 +451,27 @@ Editor_Commands["UNLINK"] = function (srv,target,map,room,cmd,player) {
cmd.shift();
var link=cmd.shift();
if(!link) {
srv.o(target,"Type 'rpg help unlink' for help.");
srv.o(target,"Type 'help unlink' for help");
return;
}
switch(link.tolowerCase()) {
switch(link.toLowerCase()) {
case "north":
case "south":
case "east":
case "west":
case "up":
case "down":
target_id=room.exit.(@name == dir).@target;
target_id=room.exit.(@name == link.toLowerCase()).@target;
target_room=map.room.(@id == target_id);
/* clear link if no target specified */
room.exit.(@name == dir).(@target=undefined);
room.exit.(@name == link.toLowerCase()).@target=undefined;
srv.o(target,red + "Room exit deleted");
/* clear corresponding link in original target room */
if(settings.autolink) target_room.exit.(@name == reverse_dir(dir)).(@target=undefined);
if(settings.autolink)
target_room.exit.(@name == reverse_dir(link.toLowerCase())).@target=undefined;
break;
default:
srv.o(target,"usage: unlink <direction>");
......@@ -464,16 +493,18 @@ Editor_Commands["MOVE"] = function (srv,target,map,room,cmd,player) {
room=map.room.(@id == player.@room);
list_room_verbose(srv,player,map,room);
list_exits_verbose(srv,player,zone.map);
}
Editor_Commands["MOBS"] = function (srv,target,map,room,cmd,player) {
cmd.shift();
var param=cmd.shift();
if(param && param.toUpperCase() == "ZONE") {
var zone=zones[player.@zone];
list_mobs_verbose(srv,target,zone.mobs);
return;
}
list_mobs_verbose(srv,target,room);
list_mobs_verbose(srv,target,room);
return;
}
......@@ -481,6 +512,7 @@ Editor_Commands["ITEMS"] = function (srv,target,map,room,cmd,player) {
cmd.shift();
var param=cmd.shift();
if(param && param.toUpperCase() == "ZONE") {
var zone=zones[player.@zone];
list_items_verbose(srv,target,zone.items);
return;
}
......@@ -518,7 +550,7 @@ Editor_Commands["GOTO"] = function (srv,target,map,room,cmd,player) {
var room=map.room.(@id == player.@room);
srv.o(target,"You teleport to " + room.title);
list_room_verbose(srv,player,map,room);
return;
list_exits_verbose(srv,player,zone.map);
}
Editor_Commands["LOOK"] = function (srv,target,map,room,cmd,player) {
......@@ -528,9 +560,6 @@ Editor_Commands["LOOK"] = function (srv,target,map,room,cmd,player) {
/* if no target specified, look at room */
if(!obj) {
list_room_verbose(srv,player,map);
srv.o(player.@channel,red + "[title]" + black + " " + room.title);
srv.o(player.@channel,red + "[desc]" + black + " " + strip_ctrl(room.description));
list_mobs_verbose(srv,player.@channel,map,room);
list_items_verbose(srv,player.@channel,map,room);
list_exits_verbose(srv,player,map);
......@@ -1105,8 +1134,9 @@ Server_Commands["PRIVMSG"] = function (srv,cmd,onick,ouh) {
var player=players.player.(@name == onick);
if (cmd[0][0] == "#" || cmd[0][0] == "&") {
var chan=get_privmsg_channel(srv,cmd);
var chan=srv.channel[cmd[0].toUpperCase()];
if(!chan) return;
/* if the user has no RPG player or is not logged in, don't process RPG commands */
if(player.@active != 1) return;
......@@ -1141,21 +1171,19 @@ Server_Commands["JOIN"]= function (srv,cmd,onick,ouh) {
}
// Me joining.
if ((onick == srv.curnick) && !chan.is_joined) {
chan.is_joined = true;
srv.writeout("WHO " + cmd[0]);
if (onick == srv.curnick) {
if(!chan.is_joined) {
chan.is_joined = true;
srv.writeout("WHO " + cmd[0]);
}
return;
}
var player=players.player.(@name == onick);
/* if the user has no RPG player, greet them */
if(!player.length() > 0) {
if (cmd[1][0] == ":")
cmd[1] = cmd[1].slice(1);
var target=cmd[1];
srv.o(target,"Welcome to RPG test, " + onick + "!","NOTICE");
srv.o(target,"Type 'rpg help' to get started.","NOTICE");
srv.o(chan.name,"Welcome to RPG test, " + onick + "!","NOTICE");
srv.o(chan.name,"Type 'rpg help' to get started.","NOTICE");
}
}
......
......@@ -46,7 +46,7 @@ function handle_command(srv,cmd,player,target) {
break;
}
if(player.@editing == 1) {
if(player.@editing != undefined) {
if(Editor_Commands[cmd[0]]) {
Editor_Commands[cmd[0]](srv,target,map,room,cmd,player);
} else if(RPG_Commands[cmd[0]] ||
......@@ -69,7 +69,7 @@ function handle_command(srv,cmd,player,target) {
return;
}
if(Editor_Commands[cmd[0]]) {
srv.o(target,"Type 'rpg edit' to enable editing.");
srv.o(target,"Type '" + get_cmd_prefix() + "edit' to enable editing.");
return;
}
......@@ -398,7 +398,7 @@ function load_players() {
var player=new XML(p_file.read());
p_file.close();
player.@active=0;
player.@editing=0;
player.@editing=undefined;
if(!zones[player.@zone]) {
player.@zone=0;
player.@room=1;
......@@ -436,6 +436,8 @@ function list_room_verbose(srv,player,map) {
srv.o(player.@channel,"editing '" + blue + map.@name + black +
"' [z:" + blue + " " + map.@id + black +
" r:" + blue + " " + room.@id + black + "]");
srv.o(player.@channel,blue + "[title]" + black + " " + room.title);
srv.o(player.@channel,blue + "[desc]" + black + " " + strip_ctrl(room.description));
}
function list_exits_verbose(srv,player,map) {
......@@ -445,7 +447,7 @@ function list_exits_verbose(srv,player,map) {
for each(var e in exits) {
var exit=room.exit.(@name == e);
if(exit.@target != undefined) {
var exit_str=red + "[" + e +"]";
var exit_str=blue + "[" + e +"]";
if(zones[exit.@zone]) exit_str+= black + " z:" + blue + " " + exit.@zone;
exit_str+= black + " r:" + blue + " " + exit.@target;
if(exit.door != undefined) {
......@@ -465,7 +467,7 @@ function list_exits_verbose(srv,player,map) {
var target_room=map.room.(@id == result);
var exit=target_room.exit.(@name == reverse_dir(e));
var exit_str=red + "[" + e +"]";
var exit_str=blue + "[" + e +"]";
exit_str+= black + " r:" + blue + " " + target_room.@id;
if(exit.door != undefined) {
......@@ -482,20 +484,30 @@ function list_exits_verbose(srv,player,map) {
}
function list_mobs_verbose(srv,target,list) {
var count=0;
for each(var m in list.mob) {
srv.o(target,
red + "[mob]" +
blue + "[mob]" +
black + " id:" + blue + " " + m.@id +
black + " name:" + blue + " " + m.@name);
count++;
}
if(count == 0) {
srv.o(target,red + "there are no mobs to list.");
}
}
function list_items_verbose(srv,target,list) {
var count=0;
for each(var i in list.item) {
srv.o(target,
red + "[item]" +
blue + "[item]" +
black + " id:" + blue + " " + i.@id +
black + " name:" + blue + " " + i.title);
count++;
}
if(count == 0) {
srv.o(target,red + "there are no items to list.");
}
}
......@@ -568,6 +580,7 @@ function init_room_edit(srv,target,zone,player,id) {
player.@editing="room";
player.@room=id;
list_room_verbose(srv,player,zone.map);
list_exits_verbose(srv,player,zone.map);
}
function init_item_edit(srv,target,zone,player,id) {
......@@ -718,7 +731,7 @@ function create_player(name,player_race,player_class) {
function create_new_object(zone,map,player,object) {
switch(object.toUpperCase()) {
case "ITEM":
var item_id=get_new_item_id(zone.items);
var item_id=get_new_object_id(zone.items.item);
var item=
<item id={item_id}>
<type>{settings.default_item_type}</type>
......@@ -732,6 +745,16 @@ function create_new_object(zone,map,player,object) {
else zone.items=<items>{item}</items>;
return item_id;
case "MOB":
var mob_id=get_new_object_id(zone.mobs.mob);
var mob=
<mob id={mob_id} name={settings.default_mob_name}>
<keywords>{settings.default_mob_keywords}</keywords>
<appearance>{settings.default_mob_appearance}</appearance>
<hitpoints>{settings.default_mob_hitpoints}</hitpoints>
</mob>;
if(zone.mobs.mob.length() > 0) zone.mobs.mob += mob;
else zone.mobs=<mobs>{mob}</mobs>;
return mob_id;
break;
case "ZONE":
var zone_id=get_new_zone_id();
......@@ -756,7 +779,7 @@ function create_new_object(zone,map,player,object) {
}
function create_new_room(srv,target,map,room,player,dir) {
var new_id=get_new_room_id(map);
var new_id=get_new_object_id(map.room);
var old_id=room.@id;
/* add this room to previous room's exit list */
room.exit +=<exit name={dir} target={new_id}/>;
......@@ -792,6 +815,7 @@ function create_new_room(srv,target,map,room,player,dir) {
player.@room=new_id;
srv.o(target,"Room " + new_id + " created");
list_room_verbose(srv,player,map,new_room);
list_exits_verbose(srv,player,zone.map);
}
function get_dir_coords(exclude) {
......@@ -881,12 +905,12 @@ function reverse_dir(dir) {
return dir;
}
function get_new_room_id(map) {
function get_new_object_id(list) {
var id = 0;
var r = map.room.(@id == id);
while(r != undefined) {
var i = list.(@id == id);
while(i != undefined) {
id++;
r=map.room.(@id == id);
i=list.(@id == id);
}
return id;
}
......@@ -899,14 +923,4 @@ function get_new_zone_id() {
z=zones[id];
}
return id;
}
function get_new_item_id(items) {
var id = 0;
var i = items.item.(@id == id);
while(i.length() > 0) {
id++;
i=items.item.(@id == id);
}
return id;
}
}
\ No newline at end of file
......@@ -72,28 +72,27 @@ Help_Topics["LINK"]=[
Help_Topics["SET"]=[
"change a setting:",
"set [new/current] [title/description] <text>",
"set autolink on/off",
"set autolink (on/off toggle)",
"note: autolink will automatically add adjacent",
" room exit links for you, if any. they can still",
" be set/unset manually"
];
Help_Topics["NEW"]=[
"create a new zone or object:",
"new zone <level> <title>",
"new item <not yet implemented>",
"new mob <not yet implemented>",
"new door <not yet implemented>"
];
Help_Topics["CREATE"]=[
"To start playing, you must first create a character.",
"To see a list of character races and classes, type 'rpg classes' and 'rpg races'.",
"When you have settled on a combination, type 'rpg create <race> <class>.",
"Once your character is created type 'rpg login' to start playing!"
"To see a list of character races and classes, type '"
+ get_cmd_prefix() + "classes' and '"
+ get_cmd_prefix() + "races'.",
"When you have settled on a combination, type '"
+ get_cmd_prefix() + "create <race> <class>.",
"Once your character is created type '"
+ get_cmd_prefix() + "login' to start playing!"
]
Help_Topics["EDIT"]=[
"The default world is very small. To get comfortable you may want to start by creating a new zone, and seeing how everything works.",
"You must first create a character and login before you can edit. Once you have logged in, type 'rpg edit' to toggle the editor on/off.",
"To create a new zone, turn the editor on and type 'new zone <level> <my new zone name>'.",
"You must first create a character and login before you can edit. Once you have logged in, type '"
+ get_cmd_prefix() + "edit' to toggle the editor on/off.",
"To create a new zone, turn the editor on and type '"
+ get_cmd_prefix() + "edit new zone'.",
"By default, all exits will link automatically if the editor finds a room that is adjacent to you upon creating a new room. You can either turn this feature off, or modify those links later if you choose.",
"To create new rooms, simply walk in any direction while in edit mode.",
"see topics: 'set','unset','new','goto'"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment