作者laechan (小太保)
看板mud_sanc
标题Re: [wizs] 善见城 更新 申请qc
时间Tue Apr 20 10:53:41 2010
※ 引述《amosdeus (幽素)》之铭言:
: 道具 /d/ppl/wide/virtue/obj/
: /d/ppl/wide/virtue/obj/have.c
switch(
(int)query("plain_have_lv"))
下次可以这样做,增加判断的确定性。
另外,有其它的方法就是回圈式累加,不过因为这是物品
而且写在 init 中,所以你的写法对系统负担较小。
如果 plain_have_lv 一旦设了就不会再变更的话,你还
可以在物品已追加设定 short 後再增设一个 mark 来判
断「已经设了 short」,这样该物品在下次被玩家重新载
入前就都不会因为触发 init 而一再地对 short 做更动。
(但是若 plain_have_lv 属於变动性的那就保持原写法)
另外关於经验值损失的部份要考量玩家在这方面会产生的
错愕感,因为 long 里头有提到会失败但是没有说失败会
怎样。没有说会怎样是 ok 的,但相对的玩家就不会知道
失败会怎样。
所以有另一种方式就是比方存一次扣 n,改成存一次扣
n/10 或 n/100,这样就算失败也只损失微量,而玩家也
只需要有 n/10 就能存,当然需累积到 n 才能↑。
这样的方式你也可以考量,或失败时损失 n/100~n/10,
玩家「同样无法"马上"再存」。
下面另外有一个 switch,那个你可以直接做这样..
init();
这样它就会跑一次你上面写的 init。
(add_action 重覆跑没关系不会重叠)
: /d/ppl/wide/virtue/obj/sk_rock2.c
set("id", ({"record rock","record","rock"}));
set("short",YEL"蓄能"HIW"玉石"NOR"(Storage Rock)");
short 有看到什麽 id,在「id」的设定里就至少要有全
小写的 "storage rock"。
add("study",([
.
.
.
]));
「add mapping 资料」我还没试过,你可能要试一下。
一般是 set。
另外,这东西应该可以 inherit /std/book.c,我刚看
了一下 sk_rock 并没有超出 book 无法适用的范围。
如果你需要自订时就建议你写 /std/book2.c。
(跟 monster.c 无法符合前代大神的需要因此他们另外
又写了 smonster.c 的做法类似,他们写的 smonster.c
就一直延用至今。)
: /d/ppl/wide/virtue/obj/wind.c
: 装备 /d/ppl/wide/virtue/eq/
: /d/ppl/wide/virtue/eq/reliquiae.c
set("id",({"infinity reliquiae","ring"}));
set("short",EQ_NAME+HIC"("HIB"Infinity Reliquiae"HIC")"NOR);
short 有看到 infinity reliquias 时, id 最好有
1)infinity reliquiae
2)reliquiae
我看过别的 mud 在 short 有这样的做法..
(Ring, Infinity Reliquiae)
降你 id 那样设就 ok。
: /d/ppl/wide/virtue/eq/diwu_horn.c
在 stud_havetion 里面有两个 return 1 for write,
改成 return notify_fail
另外,就算是已镶嵌好也可以 return notify_fail("");
: NPC /d/ppl/wide/virtue/npc/
: /d/ppl/wide/virtue/npc/jean.c
void init()
{
.
.
call_out("imprecate",100);
我不建议这样写喔。因为你在 call_out 前面并没
有判定 mob 是否已有 call_out,这会造成怪物被
init 几次就 call 几次,而且你定的秒数并不短.
我先前有一篇文章也贴了 call_out 有被重覆呼叫
的情况。
ppl->set("skill/affliction",100);
ob1->remove();
这个则是小问题,通常我会建议先 ob1->remove()
再 ppl->set。
: /d/ppl/wide/virtue/npc/naomi.c
i++ 那边可以用回圈判定,你可以顺便把需判定的
物品 id define 或宣告成一个 mixed,先判断简单
的写在回圈内,再额外判断 <= 那个就行了。
这样日後要 modify 你 mob 的 wiz 也比较容易从
你单独宣告的 mixed 去改。
ob1~ob6 则用一个 mixed obs=({}) 去累存即可。
obs+=({ 某物 });
这样就可以直接一行 obs->remove();
: 房间 /d/ppl/wide/virtue/room/
: /d/ppl/wide/virtue/room/193.c
部份 return 1 要尽量改为 return notify_fail 的写法。
: /d/ppl/wide/virtue/room/194.c
: /d/ppl/wide/virtue/room/195.c
: 技能
: /doc/sk/affliction
: /d/spell/affliction.c
: 你开始念起古老的咒文: ~ 99 ~ ~ ~ 授予苦痛 ~
: 你缓缓念道: 非属自然的不洁生物,奉我之命化为尘土,回归大地!
: 你将光芒凝聚在手心, 缓缓形成净化邪恶的力量...
: 你开始念起古老的咒文: ~ 99 ~ ~ ~ 净化术 ~
: 我是由净化术修改授予苦痛,
: 应该要有 #define MSG 里的叙述,
: 请 laechan 帮忙看一下。
: Plain@Sanc
start_skill 那样的写法一般会写为底下...
if(xx1)
oo1;
else if(xx2)
oo2;
else if(xx3)
oo3;
else
oo4;
return 1;
你可以参考看看。
STR31[random(sizeof(STR31))]
我有些 spell 也会这样写,不过我 qc 时就会建议
若 sizeof(STR31) 是确定的,那你代入确定值给它
就好了,例如 STR31 size 确定就是 5 那就..
STR31[random(5)]
以上,我大概只看程式部份,数值或设定部份就由
plain 自行斟酌或参考其它 wiz 的意见。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 61.225.161.161 (04/20 10:58)
1F:→ amosdeus :都修改了,/u/p/plain/affliction.c请在cp到/d/spell 04/21 00:05
2F:→ laechan :已 cp 04/21 00:52