robe.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 289 行
C
289 行
#include <ansi.h>
#include <armor.h>
inherit CLOTH;
inherit F_GEMS;
void init_sockets(object me)
{
set("max_sockets", 3);
if (me->query("combat_exp") > 10000000)
add("max_sockets", 1);
if (me->query("combat_exp") < 10000000 && (int)query("sockets/max",1)>=3)
set("sockets/max",3);
if (me->query("combat_exp") < 20000000 && (int)query("sockets/max",1)>=4)
set("sockets/max",4);
if ((int)query("sockets/max",1)>5)
set("sockets/max",5);
if (me->query("diablo/" + TYPE_CLOTH + "/id") != query("id")) return;
set("sockets", me->query("diablo/" + TYPE_CLOTH + "/sockets"));
set_armor_desc();
}
void setup()
{
init_sockets(this_player());
::setup();
}
void spec_prop(object me, string socket, int socket_level, int mode)
{
int i;
if (!valid_gem(socket, socket_level)) return;
if (me->query("diablo/" + TYPE_CLOTH + "/id") != query("id")) return;
if (query("armor_prop/armor") < 20) return;
switch (socket) {
case "ruby":
break;
case "topaz":
break;
case "sapphire":
break;
case "emerald":
break;
case "amethyst":
if (mode == 1)
message_vision(MAG + query("name") + MAG"散出一片紫色云光环绕着$N,渐渐$P的身形显得越来越朦胧!\n"NOR, me);
else
message_vision(MAG"紫色越来越淡,$N的身形又显露了出来。\n"NOR, me);
me->add_temp("apply/defense", 30 * socket_level * mode);
break;
case "diamond":
if (mode == 1)
message_vision(HIW"只见$N身上的" + query("name") + HIW"表面晶彩流动,毫光四射!\n"NOR, me);
else
message_vision(HIW"渐渐的," + query("name") + HIW"似乎又恢复了寻常。\n"NOR, me);
me->add_temp("apply/armor", query("armor_prop/armor") * socket_level * mode / 16);
break;
case "skull":
break;
}
return;
}
int wear()
{
int i, sockets, ret;
object me = environment();
if (!(ret = ::wear())) return 0;
sockets = query("sockets/max");
for (i = 1; i <= sockets; i++)
spec_prop(me, query(sprintf("sockets/socket%d", i)), query(sprintf("sockets/socket%d_level", i)), 1);
remove_call_out("check_fight");
call_out("check_fight", 1, me);
return ret;
}
int unequip()
{
int i, sockets, ret;
object me = environment();
if (!(ret = ::unequip())) return 0;
sockets = query("sockets/max");
for (i = 1; i <= sockets; i++)
spec_prop(me, query(sprintf("sockets/socket%d", i)), query(sprintf("sockets/socket%d_level", i)), -1);
remove_call_out("check_fight");
return ret;
}
int spec_effect(object ob, object me, int damage, string socket, int socket_level)
{
int i, def = 0;
if (!valid_gem(socket, socket_level)) return def;
if (me->query("diablo/" + TYPE_CLOTH + "/id") != query("id")) return 0;
if (random(100) + me->query_temp("apply/magic") < 70) return def;
switch (socket) {
case "ruby":
break;
case "topaz":
break;
case "sapphire":
break;
case "emerald":
i = damage * socket_level / 15;
if (i > (int)ob->query("qi")/6) i=(int)ob->query("qi")/6;
if ((int)ob->query("qi")< (int)ob->query("max_qi"))
{
message_vision(HIG"只见$N的伤口绿气闪动,好像活力足了一些!\n"NOR, me);
ob->add("qi", i);
}
if (!ob->query_condition("emerald_poison")) {
message_vision(HIG"$n大叫:不好!只见一道绿气迅速延伸到$p的手臂!\n"NOR, me, ob);
ob->apply_condition("snake_poison", ob->query_condition("snake_poison") + random(5) + 3);
ob->apply_condition("zhizhu_poison", ob->query_condition("zhizhu_poison") + random(5) + 3);
ob->apply_condition("wugong_poison", ob->query_condition("wugong_poison") + random(5) + 3);
ob->apply_condition("xiezi_poison", ob->query_condition("xiezi_poison") + random(5) + 3);
ob->apply_condition("chanchu_poison", ob->query_condition("chanchu_poison") + random(5) + 3);
ob->apply_condition("emerald_poison", ob->query_condition("emerald_poison") + random(5) + 1);
ob->set("emerald_poison", socket_level);
}
break;
case "amethyst":
break;
case "windjade":
message_vision(GRN"$n只觉$N身体周围形成旋风将$p的攻击化去不少!\n"NOR, me, ob);
def = -damage * socket_level / 10;
if (def < 1) def=1;
break;
case "firejade":
i = damage * socket_level / 13;
if (i > 0) {
message_vision(RED"忽然$N的身上烈焰一闪,$n只感到灼热难挡,已受了伤!\n"NOR, me, ob);
if (i > (int)ob->query("qi")/5) i=(int)ob->query("qi")/5;
ob->receive_damage("qi", i);
ob->receive_wound("qi", random(i));
if (wizardp(me))
tell_object(me, sprintf("烧伤伤害力: %d\n", i));
}
break;
case "icejade":
i = damage;
if (i > 0) {
message_vision(CYN"忽然$N周围寒气冲天,形成了一道水晶墙,$n的攻击反弹了回来!\n"NOR, me, ob);
if (i > (int)ob->query("qi")/6) i=(int)ob->query("qi")/6;
ob->receive_damage("qi", i);
if (i > (int)ob->query("jing")/7) i=(int)ob->query("jing")/7;
ob->receive_damage("jing", i);
if (wizardp(me))
tell_object(me, sprintf("反震伤害力: %d\n", i));
}
break;
case "thunderjade":
i = damage * socket_level / 15;
if (i > 0) {
message_vision(MAG"$N身上电光一闪,$n只感全身一麻,不知所措!\n"NOR, me, ob);
if (!ob->is_busy())
ob->start_busy(random(socket_level)+1);
if (i > (int)ob->query("neili")/4) i=(int)ob->query("neili")/4;
ob->add("neili", -i);
}
break;
case "earthjade":
i = damage * socket_level / 15;
message_vision(YEL"$N被大地再生的光芒包围,$N的伤好了很多!\n"NOR, me, ob);
if (i > (int)ob->query("qi")/6) i=(int)ob->query("qi")/6;
if ((int)ob->query("qi")< (int)ob->query("max_qi"))
ob->add("qi", i);
if (i > (int)ob->query("jing")/6) i=(int)ob->query("jing")/6;
if ((int)ob->query("jing")< (int)ob->query("max_jing"))
ob->add("jing", i);
break;
case "diamond":
message_vision(HIW"$n只觉$N身上似乎有一股柔力将$p的劲力化去不少!\n"NOR, me, ob);
def = -damage * socket_level / 10;
if (def < 1) def=1;
break;
case "skull":
if (objectp(ob->query_temp("weapon")))
i = damage * socket_level / 25;
else
i = damage * socket_level / 15;
if (i > 0) {
message_vision(WHT"忽然$N周围阴气大盛,$n只感到气血汹涌,无法自控!\n"NOR, me, ob);
if (i > (int)ob->query("qi")/5) i=(int)ob->query("qi")/5;
ob->receive_damage("qi", i);
ob->receive_wound("qi", random(i));
if (wizardp(me))
tell_object(me, sprintf("反震伤害力: %d\n", i));
}
break;
}
return def;
}
int ob_hit(object ob, object me, int damage)
{
int i, sockets, ret = 0;
sockets = query("sockets/max");
for (i = 1; i <= sockets; i++)
ret += spec_effect(ob, me, damage,
query(sprintf("sockets/socket%d", i)), query(sprintf("sockets/socket%d_level", i)));
return ret;
}
void spec_recover(object me, string socket, int socket_level)
{
int i;
//if (ob->query_temp("combat_yield")) return;
if (!valid_gem(socket, socket_level)) return;
if (me->query("diablo/" + TYPE_CLOTH + "/id") != query("id")) return;
if ((int)me->query_temp("combat_yield")==1) return;
if (random(100) + me->query_temp("apply/magic") < 70) return;
switch (socket) {
case "ruby":
if (me->query("max_qi") > me->query("eff_qi") || me->query("eff_qi") > me->query("qi")
&& random(2)==0) {
message_vision(HIR"只见$N的伤口红光流动,血流顿时止住了,连伤口似乎也开始渐渐愈合!\n"NOR, me);
me->add("eff_qi", 40 * socket_level);
if (me->query("eff_qi") > me->query("max_qi"))
me->set("eff_qi", me->query("max_qi"));
me->add("qi", 70 * socket_level);
if (me->query("qi") > me->query("eff_qi"))
me->set("qi", me->query("eff_qi"));
}
break;
case "topaz":
if (me->query("max_jing") > me->query("eff_jing") || me->query("eff_jing") > me->query("jing")
&& random(2)==0) {
message_vision(HIY"只见$N的双眼开合之间金光闪现,精神顿时大振!\n"NOR, me);
me->add("eff_jing", 15 * socket_level);
if (me->query("eff_jing") > me->query("max_jing"))
me->set("eff_jing", me->query("max_jing"));
me->add("jing", 25 * socket_level);
if (me->query("jing") > me->query("eff_jing"))
me->set("jing", me->query("eff_jing"));
}
break;
case "sapphire":
if (me->is_busy() && me->is_busy() <= (socket_level + 1) / 2 + 1
&& random(3)==0) {
message_vision(HIB"$N只觉一股劲力引导着内气游走全身,被阻塞的穴道在它的冲击下已一贯而通!\n"NOR, me);
me->start_busy(1);
}
break;
case "emerald":
break;
case "amethyst":
break;
case "diamond":
break;
case "skull":
break;
}
return;
}
void check_fight(object me)
{
int i, sockets;
if (!me || !query("equipped")) return;
if (me->query("diablo/" + TYPE_CLOTH + "/id") != query("id")) return;
if (living(me) && me->is_fighting()) {
sockets = query("sockets/max");
for (i = 1; i <= sockets; i++)
spec_recover(me, query(sprintf("sockets/socket%d", i)),
query(sprintf("sockets/socket%d_level", i)));
}
call_out("check_fight", 1, me);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?