作者laechan (挥泪斩马云)
看板mud_sanc
标题[wizs] 小型战争脚本
时间Thu Feb 14 09:07:02 2019
#include <war.h>
inherit WAR_D;
int war_start()
{
/* 以下的东西写在 WAR_D 里头内建的 war_starting 函数内
object times_check;
string files=base_name(this_object());
if(catch(times_check=find_object_or_load("/open/cmds/times_check")))
{
write(HIR"/open/cmds/times_check.c 载入失败.\n"NOR");
return 1;
}
// 如果有战争在执行中
if(times_check->check_files(files)>0)
{
write(HIR"目前该战争(或某某战争)正在执行中.\n"NOR);
return 1;
}
times_check->set_times_check(files,files,唔..秒数怎麽判断);
return 0;
*/
// 以下这个是固定的, 战争不能重覆启动
if(war_starting()>0) return 1;
// 第 1 阶段, 30秒
war_step(1,30);
// 第 1 阶段置中广播, 阵列代表每隔1~2秒 shout 一次
// 也可以 c_shout(HIR"猪头人大军进攻了白瓦镇!!"NOR);
// 代表只广播一行, 届时用 stringp 判断即可
// 阵列内若有 "" 代表延迟 1~2 秒, 会有额外判断
c_shout(1,({HIR"猪头人大军进攻了白瓦镇!!"NOR}));
// 第 1 阶段生成怪物
// 什麽怪物, 数量, 位置
war_mob(1,({"pig1",3,"room1",
"pig2",1,"room1",}));
// 第 2 阶段, 每隔 30 秒判断一次
// 在 war.h 内会 #define WAR_LOOP 1
// war_step 会用 varargs 宣告
war_step(2,30);
// 第 2 阶段置中广播
c_shout(2,HIR"猪头人持续进攻着白瓦镇!!"NOR);
// 有设置 war_check(2 的话就会做 loop, 直到 war_check_2 的
// 回传值为 1
// loop 的判断一律为自订,即脚本内需有 war_check_2 函数
war_check(2,"war_check_2");
// <1 秒代表第 3 阶段为结束阶段
war_step(3,0);
// 以下还没想到怎麽呈现比较好
// 可能会有一个 war_call(阶段数字,什麽函数);
// 然後脚本内自订该函数, 例如为某房间加出口
// 或者将某房间的玩家转移到其它地点
// 或者清空某些房间的某些怪物等等
// 当战争启动时, 该脚本
}
当上面的函数是那样写时,WAR_D 里面要有相对应的函数,且每个
函数对於呼叫 times_check 时给定的参数也需不同。
再於 WAR_D 里面内建 times_check 函数,用来接收 times_check
的呼叫及传值,依据所传值的不同来做不同的动作即可。
这样 WAR_D 应该 1000 行内可以解决。
然後再来考虑 war_end 要怎麽写,我应该会给一个基本范本,再允
许 wiz 可自订。
然後再写一个 _war.c 来管理。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.117.106.224
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1550106425.A.7D9.html
※ 编辑: laechan (122.117.106.224), 02/14/2019 10:02:09
※ 编辑: laechan (122.117.106.224), 02/14/2019 10:03:23