□ 有关本 mudlib 的一些历程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
前言	: 有人老问说是否有以国家基础的 mudlib 释放，且合法的。
	  因此拿了一个公开的 es2 1.1e 的 mudlib 来修正，并且开
	  始陆续的释放出来，供大家玩耍用。暂以 DA mudlib 为命名
	  方式。

2002 年：
4/15	:
	  1. 正式修改 es2 1.1e mudlib。
	  2. 移除部份以精、气、神为主的函数、程式码。
	  3. 废除部份权限。
	  4. 新增国家结构。
	  5. 开放自由建国。
	  6. 移除部份函数，与增、修部份函数，在此不一一列出。
	  7. 新增部份指令：home, makeroom, set_short, set_long,
	  	accept, arrest, set_room, summon, appoint, fire
	  8. 新增部份指令：kingdom_stat, teleport
	  9. 修改部份指令：score,
4/16	:
	  1. 修改战斗，使之适用于现况架构。
	  2. 新增指令：delete_kingdom
	  3. 修改部份指令、函数写法，以及修改频道。
	  4. 释出 rg_base_0.0.2
	  由于一些贵族指令之前都在 es2 1.2b 内撰写移植过来的，造
	  成部份指令，有时候不能适用，造成 bug 出现，因此必须要补
	  足这些错误 ... :
	  5. 忘了修 arrest 的一个缺失... makeroom 也修正 ok
	  6. 修正 callouts, accept
	  7. 释出 rg_base_0.0.2a (亦即 DA_0.0.1 版)
4/17	:
	  1. 修正 /adm/daemons/natured.c, 将 spock 之 efuns 取代 es2 的 efuns
	  2. 修正 /adm/daemons/updated.c
	  3. 整理 /cmds/std 内指令完毕。修改 /cmds/usr/time, to, 
	  4. attribute.c 新增 query_attr 函数
	  5. 随便整理一下 /obj/
	  6. 释出 DA_0.0.1a
4/18	:
	  1. /std/room/ 内新增、修改多项特殊建筑物
	  2. 修改 /adm/daemons/securityd, /adm/daemons/kingdomd
	     /adm/simul_efun/kingdom 内之 do_saveroom(), create_kingdom(),
	     /adm/simul_efun/system 内之 kill_all_bug(),
	     /cmds/min/kingdom_stat.c, makeroom, 
	  3. /cmds/min/build 可盖 bank, board, shop, post_office 测试ok
	  4. 新增 delete_room
	  5. /adm/daemons/logind.c 修正房间被摧毁，而 login 造成的问题
	  6. 释出 DA_0.0.1b
4/19	:
	  1. globals.h 补进 #define ACTIONROOM
	  2. 继承新增 /std/room/actionroom.c
	  3. 指令新增 add_action, set_action
4/20	:
	  1. 新增指令 linkroom,
	  2. /adm/simul_efun/system.c 新增 refresh_room()
	  3. 修改 /cmds/wiz/update.c
	  4. 释出 DA_0.0.2
4/21    :
          1. 修改 /cmds/wiz/home.c, /adm/daemons/rankd.c
          2. 新增指令 /cmds/adm/rank.c
          3. 招收巫师。(资讯：help wiz_1.rule)
          4. 修正 /include/command.h 的 WIZ_PATH
          5. 修改指令 help.c 使之 wiz 可以 help 看到 /doc/wiz 目录内的东西
          6. 修改 /cmds/adm/purge, /doc/help.h
          7. 新增 /cmds/wiz/kickout
          8. 修改 /feature/edit.c 判定部份问题, /cmds/wiz/edit.c 补 help 档说明
          9. 修改系统档 /adm/daemons/securityd.c, /adm/obj/master.c,
             /adm/simul_efun/object.c 的 creator_file()
4/22    :
	  1. /adm/daemons/securityd.c 新增 check_dir_limit() 函数,
             /adm/simul_efun/system.c 新增 check_dir_limit() 函数,
             /adm/simul_efun/file.c 新增 ed(), tail() 函数，藉此判定一些非法使用者
             /feature/edit.c 补上判定，追踪违法者,
             /adm/simul_efun/path.c 的 resolve_path() 增加判定。
          2. 新增指令 /cmds/adm/set_dir_limit.c
          3. /adm/simul_efun/object.c 修改 destruct() 函数,
             /feature/move.c 修改 remove() 函数，皆取自于 es2 1.3b
          4. /adm/simul_efun/file.c 修改 log_file() 函数，使之 log 档超过 1MB
             移到 /log/bak 内做备份。
          5. ed 函数的问题，如果没有改进，或可以侦测到底输入啥，我不知道是否
             会有其他延伸问题产生。待思考......
          6. 压缩 DA_0.0.3
          7. /std/room.c 之 object make_inventory(string file),
             /std/bboard.c 之 int do_post(string arg) 和 int do_discard(string arg)
              分别于前面多补了private
          8. /feature/alias.c process_input() 判定 trace_flag
          9./adm/obj/master.c 内 valid_override() 新增判定 "exec", "shutdown","snoop"
          10./adm/simul_efun/object.c 新增函数 int exec( object to, object from )
          11.压缩 DA_0.0.3a
4/23    :
          1. /obj/user.c, login.c 分别新增 set_link(), set_body()
          2. /adm/daemons/logind.c 将 set_temp("link_ob") 改成以 set_link 的方式
	  3. 指令：quit, suicide, info, kickout, update, shutdown, save, passwd
             以及 /adm/daemons/fingerd.c 内改以 me->link() 形式出现
          4. logind.c 补进 auto reboot 系统与相关档案(/obj/npc/demogorgon.c)
          5. 压缩 DA_0.0.4
          6. 修改 /std/item.c, /std/room.c, /adm/simul_efun/system.c 的refresh_room()
             /std/jboard.c
          7. 修正 /adm/daemons/securityd.c 的 set_status() 函数判定，使之非 admin
             无法使用。不然只要 wiz 到 /cmds 内写一个 set_status 就可以直接取得 admin 勒。
          8. /adm/simul_efun/file.c 新增 write_file() 函数，藉此提高安全性。如下实作：
             当初我在想说要是我在 /cmds 内写一个指令，直接 write_file wizlist，是否可行？
             因此我在 security 内的 exclude_read 增加 adm 的目录，可是发现到，可以靠指令，
             作写入的动作，后来发现到 valid_read 内有一行叫做 if( euid==ROOT_UID ) return 1;
             由于 /cmds 具有 ROOT 权限，所以 return 1 了，当然可以轻易的读取。然后又查到
             valid_write 内也有 if( euid==ROOT_UID ) return 1; 直接被他打败了，因此只要是写
             成指令，就完全 return 1 让你为所欲为的 write_file 任何档案。除非，我们在判定
             valid_read 之前，再拿其他方式来判定...档掉一些可能，这样可以遏阻部份 hack 的
             可能性，因此我才在/adm/simul_efun/file.c 新增 write_file() 函数并补上判定，
             藉此档掉写入像 /adm/etc/wizlist 的可能性。至于房间写入 write_file 想写入 wizlist
             测试出来，也是这样档掉。
         9. 修改/adm/simul_efun/object.c 的 creator_file() 内的return "Domain";
         10. 压缩 DA_0.0.5
2003/2/22:
	 0. 最近在忙自动控制以及写程式的事情，所以迟迟都没有动作，真是罪过 ~~
	 1. 修改 look.c 使 look npc 不会有奇怪的 0 以及岁数出现, 并修改 COMBAT_D 的
	    eff_status_msg　函数
	 2. /d/gourd/gourd_recall.c 新增 QK 休息室, 新增相关档案 /d/special/relax.c
	 3. adm/simul_efun/path.c 新增 kingdom_data_path()
	 4. /adm/daemons/kingdomd.c 新增 develop_data(), /adm/simul_efun/kingdom 新增
	    develop_data()
	 5. 增加 /cmds/king/set_time_gate.c
	 6. 修改 /adm/daemons/kingdomd.c 的 kingdom_data() 的 "other"
	 7. 撰写继承 /std/room/pray.c
	 8. 修改 /adm/daemons/securityd.c 部分程式
	 9. 修改相关文件档 /include/globals.h
2/23:
	 1. 新增 /d/gourd/mail.c 的邮局房间
	 2. 增加 /cmds/wiz/set_title.c
	 3. 修改 /feature/alias.c 可以记录
	 4. user.c 补上满 18 岁就会去掉新手字样。
	 5. 修改 /std/room.c
	 6. 新增 /adm/daemons/auto.c 自动提升发展(暂时只有 develop)
	 7. 修改 /adm/daemons/logind.c
	 8. 新增 /cmds/min/develop.c 指令
2/24:
	 1. 新增继承: /std/ship/ship.c, ship_corpse.c , 修改 globals.h
	 2. 新增 ship 范例档: /d/ship/ship.c
	 3. 修改 /adm/daemons/auto.c 增加自动开船的相关函数
	 4. /feature/move.c 新增 direct_move()
2/25:
	 1. 新增 /include/ship.h
	 2. 新增指令 /cmds/adm/put_ship.c 可以替国家连路, 实际范例, 请直接参考
	    /d/gourd/ship_port.c 和 /open/test/1.c
2/26:
	 1. 收录 amgbell@DA 修改的 abdicate.c, score.c, declare.c, ally.c, add_help.c, people.c, 
	 2. 取用 amgbell@DA 修改 /std/weapon/xx.c 的 set("actions", (: call_other, WEAPON_D, "query_action" :) );
	    void do_savenpc(object ob), string auto_set_long(string str), string correct_string(string str,int space),
	    int diff_ansistr(string str), set_all_the_same_objects(object ob,string type,mixed value),
	    补进 /adm/daemons/kingdomd.c 内 kingdom_data 的 "ally"
	 3. 收录 smallpen 的 set_tax.c, pool_gold.c, add_mob.c, set_mob.c, delete_mob.c, add_desc.c, 
	    /std/room/swer.c, wedding.c, 
	 4. logind.c 去掉 new(cloth) 那部分
	 5. autoload.c 补进 自动装备的地方, /std/equip.c 的地方补进 query_autoload() 给 autoload.c 用
	 6. 新增武器范例 /d/gourd/npc/obj/thin_sword.c
3/3:
	 1. 修改 /feature/edit.c
3/4:
	 1. 修改 /adm/daemons/kingdomd.c 的 kingdom_data 内的 "data"
	 2. 修改 /cmds/adm/put_ship.c, /cmds/min/delete_room.c, /cmds/min/kingdom_stat.c 指令
3/5:
	 1. 补进 /adm/daemons/kingdomd.c 内 kingdom_data 的 "declare"
	 2. 修改 /adm/daemons/fingerd.c 的 finger_user()
	 3. 修改 /cmds/usr/save.c
	 4. DA_0.0.6 正式命名为 Open_DA_0.0.6 并释放
	 5. 新增 /std/room/gift_shop.c 继承, 并修改 globals.h
	 6. 新增 /d/obj/gift/firework.c, /d/obj/gift/fairy_firework.c, /d/obj/gift/red_bag.c
	 7. 移除 put, buy 指令
	 8. 新增 礼品店范例程式: /d/gourd/gourd-gift_shop.c
	 9. 打包成 Open_DA_0.0.6a
	 10.修改 /feature/damage.c
	 11.修改船的一个小 bug ... /include/ship.h
	 12.改了点其他小程式: fingerd.c, object.c
	 13.补进 /adm/daemons/kingdomd.c 内 kingdom_data 的 "war", "tmp"
	 13.declare 新增 war, peace 功能, 等 war_score 完成后再来改成比较完整的...
3/6:
	 1. 修改 kill.c 。go.c 去掉 me->remove_all_enemy()
	 2. 修改系统档: /feature/attack.c, team.c, skill.c [重写skill_death_penalty()]
	 3. 由于 securityd 问题，暂时先将指令 call.c 去掉部分判定, 方便未来查询一些资讯
	 4. 重写 /adm/daemons/combatd.c 的 killer_reward() [ 补进 war, arrest 判定 ]
	 5. 新增指令 war_score.c
	 6. declare 修改 war, peace 功能, 已经正常了, 宣战时, 会一小时后自动停战...
	 7. /adm/daemons/ 内数档放入 #pragma optimize  #pragma save_binary
3/7:
	 1. /adm/simul_efun/object.c 的　destruct() 更换成 es2 1.2b 的版本
	 2. 新增指令 /cmds/npc/destroy.c
	 3. 修改 look.c
	 4. 由于 war 所需, 取消 /cmds/min/declare.c 的 inherit F_CLEAN_UP
3/8:
	 1. war 大致上测试 ok ~~~
	 2. 修改相关 ghost 档案: /feature/damage.c, /std/char.c, /adm/daemons/rankd.c
	    /adm/daemons/chard.c
	 3. 修改 /cmds/usr/who.c, /adm/daemons/rankd.c
	 4. 修改指令 home.c, go.c, 
	 5. 修改 /adm/obj/master.c 使之玩家看不到错误讯息
	 6. 新增 /cmds/wiz/nuke.c
	 7. 修改 /feature/move.c 的 remove()
	 8. /adm/daemons/combatd.c 补进战神打死玩家
	 9. 打包成 Open_DA_0.0.6b
	 10./adm/simul_efun/system.c 补进 amgbell 写的简化 mob id 的函数: text_id()
	 11./adm/simul_efun/system.c 补进 text_item_id()
	 12.修改 do_saveitem(), do_savenpc()
	 13.修改 ship.h 内 do_save_ship(), /d/ship/ship.c
	 14.帮 smallpen 的 add_mob() 改一下
	 15.补进 amgbell 写的让NPC 记仇的相关程式改法: /adm/daemons/combatd.c 的 fight(),
	    /feature/attack.c 修改 clean_up_enemy()
3/9:
	 1. 补进 amgbell 写的 /std/room/gate.c
	 2. 新增 /obj/loaduser.c, 修改 /adm/simul_efun/object.c 的 load_player(),
	    /adm/daemons/fingerd.c, /include/globals.h,
	 3. 补进 guest 写的 /cmds/usr/finger.c
	 3. 打包成 Open_DA_0.0.7
3/10:	about virtual (参考 Tmi2 mudlib	)
	 1. 补进 /adm/daemons/virtuald.c
	 2. 新增 /adm/daemons/virtual/ 的相关目录与档案
	 3. 修改 /adm/obj/master.c 的 compile_object()
	 4. 修改 /cmds/npc/go.c
	 5. 新增区域 /d/grid/ 内的资料, 修改 /d/gourd/gourd_recall.c
	 6. 新增 /include/virtual.h
	 7. 新增 /std/virtual/ 内相关档案
	 8. 请参考 virtual_readme 的说明与用法
3/11:	about pet 数码宝贝
	 1. 新增药水相关程式: /std/potion/heal.c, /std/potion/bean_eat.c(马豆)
	    /obj/potion/potion.c, /obj/potion/bean.c(马豆)
	 2. 礼品店开始贩售 potion, bean
	 3. 发现 /adm/daemons/race/*.c 有点问题，修正
	 4. /feature/command.c 修改 force_me()
	 5. 新增 /obj/pet/pet.c, /include/pet.h  (宠物)
	 6. 新增指令 /cmds/usr/dismount.c
	 7. 修正 /include/command.h, 打包成 Open_DA_03112003
3/12:
	 1. /adm/daemons/combatd.c 内的 god_money() 修正为 got_money(), 写错竟然没发现
	 2. 修改 /adm/daemons/combatd.c 的 killer_reward() 之 killer->add("exp", xxx) 修改为
	    got_exp(), 请参考 /feature/finance.c 的部分, 内有 pet exp 的计算
	 3. 新增 /std/room/pet_shop.c 继承, 宠物店置于 /d/gourd/pet.c, 修改 /include/globals.h
3/17:
	 1. /feature/attack.c 新增相关 保护的函数 [from es2 1.2b]
	 2. 新增 : /cmds/npc/charge.c [因为 pet 的写法，所以此指令没啥用...]
	 3. 新增指令 /cmds/min/order.c, /cmds/npc/defend.c, /cmds/usr/chfn.c
	 4. /obj/user.c, /std/char/npc. 分别加入 accept_order() 函数
	 5. 修改 /adm/daemons/fingerd.c
	 6. 数码宝贝基本的滥滥的功能( mount, dismount, 自动升级)已经可以使用了,
	    详细的, 或 多功能的 请自行发展 ...
	 7. 打包成 Open_DA_0.0.8
4/23:
	 1. 修改部分程式....
4/24:
	 1. 修改 /feature/damage.c 的 heal_up()
	 2. 修改 /adm/daemons/combatd.c 的 do_attack()
	action = me->query("actions");
	if( !mapp(action) ) {
		me->reset_action();
		action = me->query("actions");
		if( !mapp(action) ) {
			CHANNEL_D->do_channel( this_object(), "sys",
				sprintf("%s(%s): bad action = %O",
					me->name(1), me->query("id"), me->query("actions", 1)));
			return 0;
		}
	}
	 3. 新增 irc 功能
	 4. 修改 /adm/daemons/race/*.c 相关档案
	 5. 修改 /std/room.c 的 reset()
	 6. /cmds/ 内的指令, 如果有问题, 请自行补上 seteuid(geteuid());  (重要!!!)
	 7. 修改 /std/room/gift_shop.c 一个 bug
	 8. 撰写/std/char/misc_shop.c, /std/char/mage.c, /std/char/tavern.c, /std/char/barracks.c 等 NPC继承,
	    globals.h 补上相关设定, /d/gourd/npc/mob1.c 为商人范例
	 9. /adm/simul_efun/kingdom 撰写 save_npc()
	 10.新增基本的 add_mob 指令
	 11.指令build 新增数个特殊建筑物, 修改部分 /std/room/*.c 写法
	 12.修改 /adm/daemons/combatd.c 被战神杀死的判定
	 13.我在 /adm/etc/preload 内补上 /adm/daemons/weapond, /adm/daemons/rankd 解决掉以下错误讯息的 bug:
执行时段错误：*Can't load objects when no effective user.

程式：cmds/npc/kill.c 第 27 行\n物件: /cmds/npc/kill
呼叫来自：feature/command.c 的 command_hook() 第 43 行，物件： obj/user#5 ("体验")
呼叫来自：cmds/npc/kill.c 的 main() 第 27 行，物件： cmds/npc/kill
	 14.如果发现到指令不能使用,或者找不到问题所在, 烦请补上 seteuid(getuid()); 因为有的程式牵涉到写入
	    或读取目录或档案权限问题, 补上该程式码, 照理可以解决大部分的需要
4/25:
	 1. /feature/move.c 的 remove() 改回原先 es2 的函数, 就可以去除掉 bug 了
	 2. /adm/etc/preload 去除掉 /adm/daemons/weapond, /adm/daemons/rankd
	 3. 新增 set_mob 指令
	 4. 正式打包 Open_DA_0.0.9.tgz
5/14:
	 1. 帮玩家改密码: /cmds/adm/cpasswd.c
	 2. 新增 amgbell 撰写的 /std/room/armory.c, smith.c,
	    修改 /cmds/min/build.c, develop.c, /include/globals.h, /std/weapon/*.c, /std/armory/*.c
	 3. 修改 /obj/npc/demogorgon.c, /cmds/wiz/set_title.c, /cmds/adm/purge.c, reboot.c
	 4. 移除 /cmds/wiz/test.c
5/15:
	 1. 新增指令 /cmds/min/saveroom.c
	 2. 修改指令: /cmds/min/add_action.c, set_action.c [补进refresh_room(env);]
	 3. 修改部分 /std/room/armory.c, smith.c,
	 4. 修改 /adm/daemons/race/human.c, beast.c, onster.c, /adm/daemons/chard.c
	 5. 未来几天撰写 /std/room/furnace.c [魔力炉]
5/16:
	 1. 魔力炉 /std/room/furnace.c 大概 ok, 尚缺数值计算
	 2. 修改 /std/min/build.c 的小 bug[在特殊建筑盖房间出去, 都不能存档],/adm/simul_efun/kingdom 的do_saveroom()
	 3. 修改 /std/armor/*.c, 以及新增 /include/armor_price.h 解决 eq 不能装备的问题
~5/18:
	 1. 测试与修改魔力炉/std/room/furnace.c, 并补上附加值, 与 invoke [计算方式尚不足]
5/19:
	 1. 测试与修改魔力炉/std/room/furnace.c. /feature/equip.c 补上 附加值的判定
	 2. 修改 /feature/spell.c 准备写职业的法术
5/20:
	 1. 新增继承: /std/room/tavern.c, herb_shop.c, misc_shop.c; gate.c[by amgbell]
	 2. 修改 /cmds/min/build.c, develop.c, /include/globals.h
	 3. 修改 /cmds/npc/get.c, drop.c
	 4. 新增指令: /cmds/usr/spells.c
	 5. 修改: /feature/spell.c
	 6. 修改先前撰写的 /std/room/magic_tower.c
5/21:
	 1. 修改 /std/weapon/*.c
	 2. 修改 /feature/attribute.c, /cmds/usr/score.c
5/22:
	 1. 修改 /obj/user.c 让巫师不会断线
	 2. 修改 /std/char/*.c
	 3. 将 max_hp, max_mp 这种格式舍弃: (修改以下相关档案)
	    /cmds/usr/score.c, hp.c,
	    /adm/daemons/race/human.c, /std/char.c, /feature/damage.c, attribute.c
	 4. 修改 /cmds/npc/kill.c
	 5. 新增/std/char/cleric.c, 修改 /cmds/min/add_mob.c
	 6. 修改死掉后, 跑去 death_room... 写成与 kk 一样: /feature/damage.c
	 7. 修增继承: /std/room/hero_guild.c (简易版), 修改 /cmds/min/build.c
	 8. 修改 /adm/daemons/logind.c 的 init_new_player() [max_lv]
5/23:
	 1. 新增继承 /std/room/barracks.c, stable.c[目前抄袭barracks.c 的写法]
	 2. 修改 /cmds/min/*.c 部分指令
	 3. 修改 add_mob 指令, 使其需要有该特殊建筑物以及发展才能创造 NPC
5/24:
	 1. 新增几个法术 /daemon/spell/*.c
	 2. 修改 /feature/team.c
	 3. 新增指令 /cmds/npc/invoke.c
5/25:
	 1. 继承 /std/room/trainyard.c 新增功能 cost, train, list
	 2. 新增指令 /cmds/npc/recharge.c
	 3. /feature/equip.c 修改有关 invoke_times, broken 相关判定
5/26:
	 1. 修改 /adm/daemons/kingdomd.c 一个 bug [special_room 的 check]
	 2. 修改 /std/room/magic_tower.c
	 3. 修改 /std/char/*.c, /cmds/min/delete_mob.c, add_mob.c
	 4. /cmds/min/kingdom_stat.c 补进 国家状态, /adm/daemons/auto.c 补进连路的判定
5/27:
	 1. 新增指令 /cmds/npc/undefend.c, 修改 /feature/attack.c 相关 defend 函数 or 判定
	 2. 移除 /cmds/npc/team.c 改成 party.c
5/28:
	 1. 修改 /obj/user.c 的 accept_order()
5/29~5/30:
	 1. 撰写法术 /daemon/spell/coating.c 并修改相关档案 /feature/equip.c, name.c
	 2. 新增几个小法术 /daemon/spell/arc_fire.c, magic_shield.c, heal.c, cure.c
6/1:
	 1. /adm/daemons/combatd.c 修改 eff_status_msg()
	 2. 新增法术 /daemon/spell/first_aid.c, 不过写的和 kk 有点不同, 我记得kk 这个法术可以用到
	    尸体延迟腐烂, 让复活比较容易发生 ... so ... 在看看吧
	 3. 新增法术: stone, magic_missle, ogre_power, storm
6/2:
	 1. 修改 /adm/daemons/race/*.c 有关于最大负重问题, 可以即时更新; /std/room/trainyard.c 补
	    进 setup()
	 2. /std/room/furnace.c 补进 charge 的相关条件
	 3. 新增法术 mind_blast, fireball
	 4. 修改 /cmds/usr/alias.c
6/3, 6/5:
	 1. 修改 /std/char/npc.c 补进 do_chat(), eval_chat(),
	 2. 修改 /std/room/shop.c
6/6:
	 1. /std/room.c 新增 clean_up()
6/9:
	 1. 修改 /adm/simul_efun/kingdom 的 do_saveroom()
	 2. 修改 /cmds/min/add_action.c
	 3. /d/gourd/recall_shop.c 新增 repair 功能
	 4. 正式打包成 Open_DA_0.0.10.tgz





附注：若有更新历程，以 /doc/help/history 为主。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
by bor @DA, damud6666＠yahoo.com.tw
官方网站: http://twrexkings.members.easyspace.com/index.htm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
