⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dagou.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
// dagou.c 打狗阵法// By lichen@xkx.us// For trying to make a dagou zhen. When perform dagou, increase temp damage.// Suggestion: Zhenfa can be created in multiple rooms. Maybe we can use// OOD to do it. I believe it will be more fun than making zhenfa as perform// or skill.#include <ansi.h>// Define requirement is 4 dai gbdizi// maximum number of people in 打狗阵 is 6 people// minimum number of people in 打狗阵 is 2 people#define REQUIRE 4#define MAX_INARRAY 6#define MIN_INARRAY 2inherit F_DBASE;inherit F_SSERVER;string *ran_msg = ({        "高叫:“老爷、太太、施舍口冷饭!”",        "叫道:“老爷太太行行好,赏赐乞儿一文钱。”",        "唱道:“天堂有路你不走哪!”",        "唱道:“地狱无门你闯进来!”",        "唱道:“施舍化子一碗饭哪!”",});string *ran_color = ({ HIC, HIG, HIY, HIR, HIM });private string location(string direct);void check_fight(object leader);private void reset_effect(object *inarray, int partner, int ori_effect, int skill);private void remove_effect(object inarray, int skill);void random_msg(object leader);int perform(object me){    int skill, ori_effect;    int partner, num;    int user_num;    object victim, weapon;    object leader, *obj, *inarray, env;    object *user_list;    string id;        leader = 0;    inarray = ({0, 0 , 0, 0, 0, 0, 0});        if( me->query("family/family_name") != "丐帮" )                return notify_fail("你不是丐帮弟子,使用不了打狗阵。\n");                    if( (int)me->query_temp("dagou") )         return notify_fail("你已经在参与打狗阵法了。\n");                                                                    if( !victim ) victim = offensive_target(me);    if( !victim || !victim->is_character() || !me->is_fighting(victim) )        return notify_fail("打狗阵法只能对战斗中的对手使用。\n");        if( victim->query("family/family_name") == "丐帮" )                return notify_fail("你怎么可以对同门使用打狗阵?\n");                if( me->query_skill_mapped("staff") != "dagou-bang"             || !objectp(weapon = me->query_temp("weapon"))         || (string)weapon->query("skill_type") != "staff" )         return notify_fail("你必须使用打狗棒法才能加入打狗阵。\n");           env = environment(me);        obj = all_inventory(env);        num = sizeof(obj);        partner = 0;                // check how many users are in 打狗阵. If there are someone in the 打狗阵,        // then get leader and victim.                for( int i = 0; i < num; i++ ) {            if( obj[i]->query_temp("dagou") ) {                if( !leader ) {                        if( obj[i]->query_temp("dagou/is_leader") == -1 )                        leader = obj[i]->query_temp("dagou/data");                    else                        leader = obj[i];                    victim = leader->query_temp("dagou/data")[0][MAX_INARRAY];                }                partner++;            }        }                // If in the room there is no one take part in 打狗阵, then set this user        // as leader. If any other 4dai or above gb dizi here are fighting the same         // victim, then these gb dizi set_temp("dagou", pointer to the leader ). the         // leader set_temp("dagou") 4 variables. First one is "leader"(indicate he is         // the leader of the array, second one is a pointer point to all people in         // array(打狗阵), third one is total staff skill of all people who join the         // arraym, the forth is the number of people who join the array.                if( partner == 0 ) {                inarray[0] = me;                inarray[MAX_INARRAY] = victim;                                       message_vision( HIR"$N忽然高声叫道:各位丐帮兄弟,结打狗阵!帮我对付$n!\n" NOR, me, victim);                                user_list = users();                user_num = sizeof(user_list);                // Let all 4 dai(or above) gb dizi who are in the same area know that someone is using 打狗阵.                // It is to increase the interaction between gb dizi.                // 正所谓:一方有难,百方支援。                                while( user_num-- ) {                        if( !environment(user_list[user_num]) ) continue;                  if( user_list[user_num]->query("family/family_name") != "丐帮"                        ) continue;                        if( environment(user_list[user_num]) == env ) continue;                        if( !living(user_list[user_num]) ) continue;                        if( location(file_name(env)) == location(file_name(environment(user_list[user_num]))) )                            tell_object( user_list[user_num], HIG"你隐隐约约地听到在远处" + me->query("name")                                    + "好象在发动打狗阵对付" + victim->query("name") + "。"                                    + "\n听方向好象是" + env->query("short") + "。\n\n"NOR );                    else                             tell_object( user_list[user_num], HIG"你隐隐约约地听到在远处杀声震天,好象有丐帮弟子在发动打狗阵!\n\n"NOR );                }                                         partner = 1;                skill = me->query_skill("staff");                            for( int i=0; i < num; i++) {            if( obj[i] == me ) continue;            if( !living(obj[i]) ) continue;                if( !obj[i]->is_character() || obj[i]->is_corpse() ) continue;                if( !obj[i]->is_fighting(victim) ) continue;                if( obj[i]->query_skill_mapped("staff") != "dagou-bang" ) continue;                if( !objectp(weapon = obj[i]->query_temp("weapon"))                || (string)weapon->query("skill_type") != "staff" )                continue;//                    if( obj[i]->query("rank") < REQUIRE ) continue;                        if( !obj[i]->is_fighting(victim) ) continue;                                                                 if( (int)obj[i]->query_temp("dagou") ) continue;                                                  inarray[partner] = obj[i];            message_vision(                             HIR "$N一边长声唱道:“各路的弟兄来讨饭哟,啊哟哎唷哟……”" +                             "一边包围着$n。\n" NOR, inarray[partner], victim );            skill += inarray[partner]->query_skill("staff");            partner++;            if( partner == MAX_INARRAY ) break;                }                                me->set_temp("dagou/is_leader", 1);                me->set_temp("dagou/data", ({ inarray, skill, partner }) );                                skill = (int)(skill / (partner*3));                if( partner > 1 ) {                        for( int i = 0; i < partner; i++ ) {                        inarray[i]->add_temp("apply/dodge",  skill );                        if( i > 0 ) {                                inarray[i]->set_temp("dagou/is_leader", -1);                                inarray[i]->set_temp("dagou/data",  me );                        }                        }                }                    call_out("random_msg", 5, me);                        me->start_call_out( (: call_other, __FILE__, "check_fight", me :), 1);        }                else if( partner >= MAX_INARRAY )                 return notify_fail("打狗阵法只能由二人至六人参与。\n");    else {        inarray = leader->query_temp("dagou/data")[0];            skill = leader->query_temp("dagou/data")[1];            ori_effect = (int)(skill / (partner*3));            if(partner == 1)                 leader->add_temp("apply/dodge", ori_effect );            me->add_temp("apply/dodge", ori_effect );        inarray[partner] = me;          partner += 1;        skill += me->query_skill("staff");        leader->set_temp("dagou/data", ({ inarray, skill, partner }) );        reset_effect(inarray, partner, ori_effect, skill);              me->fight_ob(victim);                victim->fight_ob(me);                me->set_temp("dagou/is_leader", -1);                me->set_temp("dagou/data", leader);                message_vision(             HIR "$N一边长声唱道:“老爷太太行行好,赏赐乞儿一文钱。”" +            "一边加入打狗阵,包围$n。\n" NOR, me, victim );            for( int i = 0; i < partner-1; i++ )                tell_object(inarray[i], HIG"\n你看见有人加入打狗阵,不由得精神为之一振。\n"NOR);        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -