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

moved editor functions to separate file, added mod-editor commands, moved base...

moved editor functions to separate file, added mod-editor commands, moved base player settings to settings object, fixed zone listing/creation
parent 12b36c51
No related branches found
No related tags found
No related merge requests found
......@@ -52,7 +52,7 @@ Bot_Commands["ZONES"] = new Bot_Command(0,false,false);
Bot_Commands["ZONES"].command = function (target,onick,ouh,srv,lvl,cmd) {
var list=[];
for(var z in zones) {
list.push(zones[z].@name);
list.push(zones[z].map.@name);
}
srv.o(target,"Zones: " + list.join(", "));
}
......@@ -124,8 +124,21 @@ Bot_Commands["EDIT"].command = function (target,onick,ouh,srv,lvl,cmd) {
}
if(!value) {
srv.o(target,"see 'help edit' for command usage.","NOTICE");
return;
switch(edit_cmd) {
case "room":
value=player.@room;
break;
case "item":
if(zone.editor[player.@name]) value=zone.editor[player.@name].item;
break;
case "mob":
if(zone.editor[player.@name]) value=zone.editor[player.@name].mob;
break;
}
if(!value) {
srv.o(target,"see 'help edit' for command usage.","NOTICE");
return;
}
}
edit_cmd=("" + edit_cmd).toLowerCase();
......@@ -559,7 +572,7 @@ 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);
show_room_details(srv,player,map);
list_mobs_verbose(srv,player.@channel,map,room);
list_items_verbose(srv,player.@channel,map,room);
list_exits_verbose(srv,player,map);
......
/* editor display functions */
function list_exits_verbose(srv,player,map) {
var target=player.@channel;
var room=map.room.(@id == player.@room);
var exits=["north","south","east","west","up","down"];
for each(var e in exits) {
var exit=room.exit.(@name == e);
if(exit.@target != undefined) {
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) {
var door=map.door.(@id == exit.door);
exit_str+= black + " door:" + blue + " " + door.@id;
exit_str+= black + " lock:" + blue + " " + door.locked;
exit_str+= black + " open:" + blue + " " + door.open;
}
srv.o(target,exit_str);
} else {
var start=new Coords(0,0,0);
var finish=get_exit_coords(start,e);
result=find_link(map,room,start,finish,undefined);
if(result >= 0) {
var target_room=map.room.(@id == result);
var exit=target_room.exit.(@name == reverse_dir(e));
var exit_str=blue + "[" + e +"]";
exit_str+= black + " r:" + blue + " " + target_room.@id;
if(exit.door != undefined) {
var door=map.door.(@id == exit.door);
exit_str+= black + " door:" + blue + " " + door.@id;
exit_str+= black + " lock:" + blue + " " + door.locked;
exit_str+= black + " open:" + blue + " " + door.open;
}
exit_str+= red + " (unlinked)";
srv.o(target,exit_str);
}
}
}
}
function list_mobs_verbose(srv,target,list) {
var count=0;
for each(var m in list.mob) {
srv.o(target,
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,
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.");
}
}
function show_room_details(srv,player,map) {
var room=map.room.(@id == player.@room);
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 show_item_details(srv,target,zone,id) {
}
function show_mob_details(srv,target,zone,id) {
}
function show_zone_details(srv,target,zone,id) {
}
function show_exit_details(srv,target,map,room,id) {
var exit=room.exit.(@name == id);
if(exit.@target != undefined) {
srv.o(target,"editing exit '" + blue + exit.@name + black + "'");
if(zones[exit.@zone])
srv.o(target,"zone:" + blue + " " + exit.@zone);
srv.o(target,"room:" + blue + " " + exit.@target);
if(exit.door != undefined) {
var door=map.door.(@id == exit.door);
srv.o(target,black + " door:" + blue + " " + door.@id
+ black + " lock:" + blue + " " + door.locked
+ black + " open:" + blue + " " + door.open);
}
} else {
srv.o(target,"editing exit '" + blue + exit.@name + black + "'" + red + " (unlinked)");
var start=new Coords(0,0,0);
var finish=get_exit_coords(start,e);
var result=find_link(map,room,start,finish,undefined);
if(result >= 0) {
var target_room=map.room.(@id == result);
var exit=target_room.exit.(@name == reverse_dir(e));
srv.o(target,"room:" + blue + " " + target_room.@id);
if(exit.door != undefined) {
var door=map.door.(@id == exit.door);
srv.o(target,black + " door:" + blue + " " + door.@id
+ black + " lock:" + blue + " " + door.locked
+ black + " open:" + blue + " " + door.open);
}
srv.o(target,exit_str);
}
}
}
/* editor initialization functions */
function init_room_edit(srv,target,zone,player,id) {
var editor=zone.editor[player.@name];
if(editor.mob != undefined) {
srv.o(target,"releasing mob:" + blue + " " + editor.mob);
editor.mob=undefined;
}
if(editor.item != undefined) {
srv.o(target,"releasing item:" + blue + " " + editor.item);
editor.item=undefined;
}
if(editor.room != undefined) {
srv.o(target,"releasing room:" + blue + " " + editor.room);
editor.room=undefined;
}
editor.room=id;
player.@editing="room";
player.@room=id;
show_room_details(srv,player,zone.map);
list_exits_verbose(srv,player,zone.map);
}
function init_item_edit(srv,target,zone,player,id) {
var editor=zone.editor[player.@name];
if(editor.mob != undefined) {
srv.o(target,"releasing mob:" + blue + " " + editor.mob);
editor.mob=undefined;
}
if(editor.item != undefined) {
srv.o(target,"releasing item:" + blue + " " + editor.item);
}
editor.item=id;
player.@editing="item";
var item=zone.items.item.(@id == id);
srv.o(target,"editing item '" + item.title + black + "' id:" + blue + " " + id);
}
function init_zone_edit(srv,target,zone,player,id) {
if(player.@zone != id) {
srv.o(target,"releasing zone:" + blue + " " + player.@zone);
delete zone.editor[player.@name];
}
player.@editing="zone";
player.@zone=id;
player.@room=0;
zone=zones[id];
show_zone_details(srv,player,zone);
show_room_details(srv,player,zone.map);
}
function init_mob_edit(srv,target,zone,player,id) {
var editor=zone.editor[player.@name];
if(editor.item != undefined) {
srv.o(target,"releasing item:" + blue + " " + editor.item);
editor.item=undefined;
}
if(editor.mob != undefined) {
srv.o(target,"releasing mob:" + blue + " " + editor.mob);
}
editor.mob=id;
player.@editing="mob";
var mob=zone.mobs.mob.(@id == id);
srv.o(target,"editing mob '" + mob.@name + black + "' id:" + blue + " " + id);
}
function init_exit_edit(srv,target,zone,player,id) {
var editor=zone.editor[player.@name];
if(editor.mob != undefined) {
srv.o(target,"releasing mob:" + blue + " " + editor.mob);
editor.mob=undefined;
}
if(editor.item != undefined) {
srv.o(target,"releasing item:" + blue + " " + editor.item);
editor.item=undefined;
}
editor.exit=id;
player.@editing="exit";
show_exit_details(srv,target,zone.map,zone.map.room.(@id == player.@room),id);
}
/* data editor functions */
function edit_room_data(srv,target,zone,player,set,cmd) {
var room=zone.map.room.(@id == player.@room);
switch(set.toLowerCase()) {
case "default":
case "def":
switch(cmd.shift().toLowerCase()) {
case "title":
settings.default_room_title=cmd.join(" ");
srv.o(target,green + "default room title set to: " + settings.default_room_title);
break;
case "description":
case "desc":
settings.default_room_description=cmd.join(" ");
srv.o(target,green + "default room description set to: " + settings.default_room_description);
break;
default:
srv.o(target,"usage: set default <property> <value>");
break;
}
break;
case "title":
room.title=cmd.join(" ");
srv.o(target,green + "current room title set to: " + room.title);
break;
case "description":
case "desc":
room.description=cmd.join(" ");
srv.o(target,green + "current room description set to: " + room.description);
break;
default:
srv.o(target,"usage: set <property> <value>, set default <property> <value>");
break;
}
}
function edit_item_data(srv,target,zone,player,set,cmd) {
var item_id=zone.editor[player.@name].item;
var item=zone.items.item.(@id == item_id);
switch(set.toLowerCase()) {
case "title":
item.title=cmd.join(" ");
srv.o(target,green + "current item title set to: " + item.title);
break;
case "appearance":
case "app":
item.appearance=cmd.join(" ");
srv.o(target,green + "current item appearance set to: " + item.appearance);
break;
case "description":
case "desc":
item.description=cmd.join(" ");
srv.o(target,green + "current item description set to: " + item.description);
break;
case "keywords":
item.keywords=cmd.join(" ");
srv.o(target,green + "current item keywords set to: " + item.keywords);
break;
case "type":
item.type=cmd.join(" ");
srv.o(target,green + "current item type set to: " + item.type);
break;
case "weight":
case "wt":
item.weight=cmd.join(" ");
srv.o(target,green + "current item weight set to: " + item.weight);
break;
}
}
function edit_mob_data(srv,target,zone,player,set,cmd) {
var mob_id=zone.editor[player.@name].item;
var mob=zone.mobs.mob.(@id == mob_id);
switch(set.toLowerCase()) {
case "name":
mob.@name=cmd.join(" ");
srv.o(target,green + "current mob name set to: " + mob.@name);
break;
case "appearance":
case "app":
mob.appearance=cmd.join(" ");
srv.o(target,green + "current mob appearance set to: " + mob.appearance);
break;
case "keywords":
mob.keywords=cmd.join(" ");
srv.o(target,green + "current mob keywords set to: " + mob.keywords);
break;
case "hitpoints":
case "hp":
mob.hitpoints=cmd.join(" ");
srv.o(target,green + "current mob hitpoints set to: " + mob.hitpoints);
break;
}
}
/* object creation functions */
function create_new_object(zone,map,player,object) {
switch(object.toUpperCase()) {
case "ITEM":
var item_id=get_new_object_id(zone.items.item);
var item=
<item id={item_id}>
<type>{settings.default_item_type}</type>
<title>{settings.default_item_title}</title>
<keywords>{settings.default_item_keywords}</keywords>
<description>{settings.default_item_description}</description>
<appearance>{settings.default_item_appearance}</appearance>
<weight>{settings.default_item_weight}</weight>
</item>;
if(zone.items.item.length() > 0) zone.items.item += item;
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();
var zone={
map:
<zone name={settings.default_zone_title} id={zone_id} level={settings.default_zone_level}>
<room id="0">
<title>{settings.default_room_title}</title>
<description>{settings.default_room_description}</description>
</room>
</zone>,
items:
<></>,
mobs:
<></>,
editor:[]
}
zones[zone_id]=zone;
return zone_id;
}
return -1;
}
function create_new_room(srv,target,map,room,player,dir) {
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}/>;
/* add new room data to zone */
map.room +=
<room id={new_id}>
<title>{settings.default_room_title}</title>
<description>{settings.default_room_description}</description>
</room>;
/* get direction we came from and add that exit to new room */
dir=reverse_dir(dir);
var new_room=map.room.(@id == new_id);
new_room.exit += <exit name={dir} target={old_id}/>;
if(settings.autolink) {
var dirs=get_dir_coords(dir);
for(var d in dirs) {
if(!dirs[d]) continue;
var result=find_link(map,new_room,undefined,dirs[d],undefined);
if(result >= 0) {
/* add link to found exit */
new_room.exit += <exit name={d} target={result}/>;
/* add corresponding exit for target room */
var target_room=map.room.(@id == result);
target_room.exit += <exit name={reverse_dir(d)} target = {new_id}/>;
}
}
}
/* move player to new room */
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) {
var dirs={
north:new Coords(0,1,0),
south:new Coords(0,-1,0),
east:new Coords(1,0,0),
west:new Coords(-1,0,0),
up:new Coords(0,0,1),
down:new Coords(0,0,-1),
}
if(exclude) delete dirs[exclude];
return dirs;
}
/* editor data functions */
function find_link(map,room,start_coords,finish_coords,checked) {
/* cumulative array for tracking scanned rooms (by room.@id) */
checked=checked || [];
if(checked[room.@id]) return -1;
checked[room.@id] = true;
if(!start_coords) start_coords=new Coords(0,0,0);
else {
/* if the passed starting coordinates match our query, return the current room id */
if(start_coords.x == finish_coords.x &&
start_coords.y == finish_coords.y &&
start_coords.z == finish_coords.z) {
return room.@id;
}
}
/* store all room exits in an array */
var dirs=[];
for(var e=0;e<room.exit.length();e++) {
if(room.exit[e].@target == "" || zones[room.exit[e].@zone]) continue;
var dir=room.exit[e].@name;
var target_id=room.exit[e].@target;
var new_coords=get_exit_coords(start_coords,dir);
var target=map.room.(@id == target_id);
/* do recursive scan on all rooms */
var result=find_link(map,target,new_coords,finish_coords,checked);
if(result >= 0) return result;
}
return -1;
}
function get_exit_coords(coords,dir) {
var new_coords=new Coords(coords.x,coords.y,coords.z);
switch(dir.toString()) {
case "north":
new_coords.y++;
break;
case "south":
new_coords.y--;
break;
case "east":
new_coords.x++;
break;
case "west":
new_coords.x--;
break;
case "up":
new_coords.z++;
break;
case "down":
new_coords.z--;
break;
default:
log("unknown dir: " + dir);
break;
}
return new_coords;
}
function reverse_dir(dir) {
if(dir=="north") dir="south";
else if(dir=="south") dir="north";
else if(dir=="east") dir="west";
else if(dir=="west") dir="east";
else if(dir=="up") dir="down";
else if(dir=="down") dir="up";
return dir;
}
function get_new_object_id(list) {
var id = 0;
var i = list.(@id == id);
while(i != undefined) {
id++;
i=list.(@id == id);
}
return id;
}
function get_new_zone_id() {
var id = 0;
var z = zones[id];
while(z != undefined) {
id++;
z=zones[id];
}
return id;
}
\ No newline at end of file
......@@ -430,277 +430,20 @@ function load_races() {
r_file.close();
}
/* editor display functions */
function list_room_verbose(srv,player,map) {
var room=map.room.(@id == player.@room);
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) {
var target=player.@channel;
var room=map.room.(@id == player.@room);
var exits=["north","south","east","west","up","down"];
for each(var e in exits) {
var exit=room.exit.(@name == e);
if(exit.@target != undefined) {
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) {
var door=map.door.(@id == exit.door);
exit_str+= black + " door:" + blue + " " + door.@id;
exit_str+= black + " lock:" + blue + " " + door.locked;
exit_str+= black + " open:" + blue + " " + door.open;
}
srv.o(target,exit_str);
} else {
var start=new Coords(0,0,0);
var finish=get_exit_coords(start,e);
result=find_link(map,room,start,finish,undefined);
if(result >= 0) {
var target_room=map.room.(@id == result);
var exit=target_room.exit.(@name == reverse_dir(e));
var exit_str=blue + "[" + e +"]";
exit_str+= black + " r:" + blue + " " + target_room.@id;
if(exit.door != undefined) {
var door=map.door.(@id == exit.door);
exit_str+= black + " door:" + blue + " " + door.@id;
exit_str+= black + " lock:" + blue + " " + door.locked;
exit_str+= black + " open:" + blue + " " + door.open;
}
exit_str+= red + " (unlinked)";
srv.o(target,exit_str);
}
}
}
}
function list_mobs_verbose(srv,target,list) {
var count=0;
for each(var m in list.mob) {
srv.o(target,
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,
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.");
}
}
/* object display functions */
function show_item_details(srv,target,zone,id) {
var item=zone.items.item.(@id == id);
srv.o(target,"editing item '" + item.title + black + "' id:" + blue + " " + id);
}
function show_mob_details(srv,target,zone,id) {
var mob=zone.mobs.mob.(@id == id);
srv.o(target,"editing mob '" + mob.@name + black + "' id:" + blue + " " + id);
}
function show_exit_details(srv,target,map,room,id) {
var exit=room.exit.(@name == id);
if(exit.@target != undefined) {
srv.o(target,"editing exit '" + blue + exit.@name + black + "'");
if(zones[exit.@zone])
srv.o(target,"zone:" + blue + " " + exit.@zone);
srv.o(target,"room:" + blue + " " + exit.@target);
if(exit.door != undefined) {
var door=map.door.(@id == exit.door);
srv.o(target,black + " door:" + blue + " " + door.@id
+ black + " lock:" + blue + " " + door.locked
+ black + " open:" + blue + " " + door.open);
}
} else {
srv.o(target,"editing exit '" + blue + exit.@name + black + "'" + red + " (unlinked)");
var start=new Coords(0,0,0);
var finish=get_exit_coords(start,e);
var result=find_link(map,room,start,finish,undefined);
if(result >= 0) {
var target_room=map.room.(@id == result);
var exit=target_room.exit.(@name == reverse_dir(e));
srv.o(target,"room:" + blue + " " + target_room.@id);
if(exit.door != undefined) {
var door=map.door.(@id == exit.door);
srv.o(target,black + " door:" + blue + " " + door.@id
+ black + " lock:" + blue + " " + door.locked
+ black + " open:" + blue + " " + door.open);
}
srv.o(target,exit_str);
}
}
}
/* editor initialization functions */
function init_room_edit(srv,target,zone,player,id) {
var editor=zone.editor[player.@name];
if(editor.mob != undefined) {
srv.o(target,"unlocking mob:" + blue + " " + editor.mob);
editor.mob=undefined;
}
if(editor.item != undefined) {
srv.o(target,"unlocking item:" + blue + " " + editor.item);
editor.item=undefined;
}
if(editor.room != undefined) {
srv.o(target,"unlocking room:" + blue + " " + editor.room);
editor.room=undefined;
}
editor.room=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) {
var editor=zone.editor[player.@name];
if(editor.mob != undefined) {
srv.o(target,"unlocking mob:" + blue + " " + editor.mob);
editor.mob=undefined;
}
if(editor.item != undefined) {
srv.o(target,"unlocking item:" + blue + " " + editor.item);
}
editor.item=id;
player.@editing="item";
show_item_details(srv,target,zone,id);
}
function init_zone_edit(srv,target,zone,player,id) {
if(player.@zone != id) {
srv.o(target,"unlocking zone:" + blue + " " + player.@zone);
delete zone.editor[player.@name];
}
player.@editing="zone";
player.@zone=id;
player.@room=0;
list_zone_verbose(srv,player,zone);
}
function init_mob_edit(srv,target,zone,player,id) {
var editor=zone.editor[player.@name];
if(editor.item != undefined) {
srv.o(target,"releasing item:" + blue + " " + editor.item);
editor.item=undefined;
}
if(editor.mob != undefined) {
srv.o(target,"releasing mob:" + blue + " " + editor.mob);
}
editor.mob=id;
player.@editing="mob";
show_mob_details(srv,target,zone,id);
}
function init_exit_edit(srv,target,zone,player,id) {
var editor=zone.editor[player.@name];
if(editor.mob != undefined) {
srv.o(target,"unlocking mob:" + blue + " " + editor.mob);
editor.mob=undefined;
}
if(editor.item != undefined) {
srv.o(target,"unlocking item:" + blue + " " + editor.item);
editor.item=undefined;
}
editor.exit=id;
player.@editing="exit";
show_exit_details(srv,target,zone.map,zone.map.room.(@id == player.@room),id);
}
/* data editor functions */
function edit_room_data(srv,target,zone,player,set,cmd) {
var room=zone.map.room.(@id == player.@room);
switch(set.toLowerCase()) {
case "default":
case "def":
switch(cmd.shift().toLowerCase()) {
case "title":
settings.default_room_title=cmd.join(" ");
srv.o(target,green + "default room title set to: " + settings.default_room_title);
break;
case "description":
case "desc":
settings.default_room_description=cmd.join(" ");
srv.o(target,green + "default room description set to: " + settings.default_room_description);
break;
default:
srv.o(target,"usage: set default <property> <value>");
break;
}
break;
case "title":
room.title=cmd.join(" ");
srv.o(target,green + "current room title set to: " + room.title);
break;
case "description":
case "desc":
room.description=cmd.join(" ");
srv.o(target,green + "current room description set to: " + room.description);
break;
default:
srv.o(target,"usage: set <property> <value>, set default <property> <value>");
break;
}
}
function edit_item_data(srv,target,zone,player,set,cmd) {
var item_id=zone.editor[player.@name].item;
var item=zone.items.item.(@id == item_id);
switch(set.toLowerCase()) {
}
}
/* object creation functions */
/* player creation functions */
function create_player(name,player_race,player_class) {
var player=
<player name={name} active="0" zone="0" room="0">
<experience>0</experience>
<hitpoints>{base_hitpoints}</hitpoints>
<movement>{base_movement}</movement>
<mana>{base_mana}</mana>
<hitpoints>{settings.base_hitpoints}</hitpoints>
<movement>{settings.base_movement}</movement>
<mana>{settings.base_mana}</mana>
<gold>0</gold>
<strength>{base_stats}</strength>
<dexterity>{base_stats}</dexterity>
<wisdom>{base_stats}</wisdom>
<intelligence>{base_stats}</intelligence>
<constitution>{base_stats}</constitution>
<strength>{settings.base_stats}</strength>
<dexterity>{settings.base_stats}</dexterity>
<wisdom>{settings.base_stats}</wisdom>
<intelligence>{settings.base_stats}</intelligence>
<constitution>{settings.base_stats}</constitution>
<level>1</level>
<travel>walk</travel>
<player_class>{player_class}</player_class>
......@@ -727,200 +470,3 @@ function create_player(name,player_race,player_class) {
</player>;
return player;
}
function create_new_object(zone,map,player,object) {
switch(object.toUpperCase()) {
case "ITEM":
var item_id=get_new_object_id(zone.items.item);
var item=
<item id={item_id}>
<type>{settings.default_item_type}</type>
<title>{settings.default_item_title}</title>
<keywords>{settings.default_item_keywords}</keywords>
<description>{settings.default_item_description}</description>
<appearance>{settings.default_item_appearance}</appearance>
<weight>{settings.default_item_weight}</weight>
</item>;
if(zone.items.item.length() > 0) zone.items.item += item;
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();
var zone={
map:
<zone name={settings.default_zone_title} id={zone_id} level={settings.default_zone_level}>
<room id="0">
<title>{settings.default_room_title}</title>
<description>{settings.default_room_description}</description>
</room>
</zone>,
items:
<></>,
mobs:
<></>
}
zones[zone_id]=zone;
srv.o(target,green + "zone '" + zone_title + "' created.");
return zone_id;
}
return -1;
}
function create_new_room(srv,target,map,room,player,dir) {
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}/>;
/* add new room data to zone */
map.room +=
<room id={new_id}>
<title>{settings.default_room_title}</title>
<description>{settings.default_room_description}</description>
</room>;
/* get direction we came from and add that exit to new room */
dir=reverse_dir(dir);
var new_room=map.room.(@id == new_id);
new_room.exit += <exit name={dir} target={old_id}/>;
if(settings.autolink) {
var dirs=get_dir_coords(dir);
for(var d in dirs) {
if(!dirs[d]) continue;
var result=find_link(map,new_room,undefined,dirs[d],undefined);
if(result >= 0) {
/* add link to found exit */
new_room.exit += <exit name={d} target={result}/>;
/* add corresponding exit for target room */
var target_room=map.room.(@id == result);
target_room.exit += <exit name={reverse_dir(d)} target = {new_id}/>;
}
}
}
/* move player to new room */
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) {
var dirs={
north:new Coords(0,1,0),
south:new Coords(0,-1,0),
east:new Coords(1,0,0),
west:new Coords(-1,0,0),
up:new Coords(0,0,1),
down:new Coords(0,0,-1),
}
if(exclude) delete dirs[exclude];
return dirs;
}
/* editor data functions */
function find_link(map,room,start_coords,finish_coords,checked) {
/* cumulative array for tracking scanned rooms (by room.@id) */
checked=checked || [];
if(checked[room.@id]) return -1;
checked[room.@id] = true;
if(!start_coords) start_coords=new Coords(0,0,0);
else {
/* if the passed starting coordinates match our query, return the current room id */
if(start_coords.x == finish_coords.x &&
start_coords.y == finish_coords.y &&
start_coords.z == finish_coords.z) {
return room.@id;
}
}
/* store all room exits in an array */
var dirs=[];
for(var e=0;e<room.exit.length();e++) {
if(room.exit[e].@target == "" || zones[room.exit[e].@zone]) continue;
var dir=room.exit[e].@name;
var target_id=room.exit[e].@target;
var new_coords=get_exit_coords(start_coords,dir);
var target=map.room.(@id == target_id);
/* do recursive scan on all rooms */
var result=find_link(map,target,new_coords,finish_coords,checked);
if(result >= 0) return result;
}
return -1;
}
function get_exit_coords(coords,dir) {
var new_coords=new Coords(coords.x,coords.y,coords.z);
switch(dir.toString()) {
case "north":
new_coords.y++;
break;
case "south":
new_coords.y--;
break;
case "east":
new_coords.x++;
break;
case "west":
new_coords.x--;
break;
case "up":
new_coords.z++;
break;
case "down":
new_coords.z--;
break;
default:
log("unknown dir: " + dir);
break;
}
return new_coords;
}
function reverse_dir(dir) {
if(dir=="north") dir="south";
else if(dir=="south") dir="north";
else if(dir=="east") dir="west";
else if(dir=="west") dir="east";
else if(dir=="up") dir="down";
else if(dir=="down") dir="up";
return dir;
}
function get_new_object_id(list) {
var id = 0;
var i = list.(@id == id);
while(i != undefined) {
id++;
i=list.(@id == id);
}
return id;
}
function get_new_zone_id() {
var id = 0;
var z = zones[id];
while(z != undefined) {
id++;
z=zones[id];
}
return id;
}
\ No newline at end of file
......@@ -25,7 +25,6 @@ var players=[];
var zones=[];
var classes=[];
var races=[];
var global_items=[];
var player_attacks=[];
var mob_attacks=[];
var global_items=load_items(gi_file);
......@@ -35,13 +34,6 @@ var blue=String.fromCharCode(3)+"2";
var green=String.fromCharCode(3)+"3";
var red=String.fromCharCode(3)+"5";
var activity_timeout=300; // seconds
var tick_time=4; // seconds
var max_armor=200;
var base_hitpoints=20;
var base_movement=60;
var base_stats=10;
var base_mana=20;
var last_activity=0; // time_t activity tracker
var mob_count=0;
var item_count=0;
......@@ -108,17 +100,18 @@ function main(srv,target) {
function update_game_status(srv) {
var active=false;
if(time()-last_activity<tick_time) {
if(time()-last_activity<settings.tick_time) {
return false;
} else {
for(var u in srv.users) {
var player=players.player.(@name.toUpperCase() == u);
if(player.@active == 1) {
if(time()-srv.users[u].last_spoke<activity_timeout){
if(time()-srv.users[u].last_spoke<settings.activity_timeout){
active=true;
} else {
player.@active=0;
srv.o(player.@channel,"You have been idle too long. Type 'RPG LOGIN' to resume playing RPG.");
srv.o(player.@channel,
"You have been idle too long. Type 'login' to resume playing.");
}
}
}
......@@ -143,6 +136,16 @@ function Coords(x,y,z)
}
function Settings()
{
/* game settings */
this.activity_timeout=300; // seconds
this.tick_time=4; // seconds
this.max_armor=200;
this.base_hitpoints=20;
this.base_movement=60;
this.base_stats=10;
this.base_mana=20;
/* editor settings */
this.autolink=true;
this.default_room_title="New Room";
......
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