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

📄 dagou.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
    return 1;}private string location(string direct){        int start, end, count, next;        while (count != 3) {                  if( direct[next] == '/' ) count++;                if (count == 2 && start == 0)                         start = next+1;                next++;        }        end = next-2;        direct = direct[start..end];        return direct;}void check_fight(object leader){    object weapon, *inarray;    int partner, skill, ori_effect, ori_partner;                if (!leader) return;        if( !leader->query_temp("dagou") ) return;                inarray = leader->query_temp("dagou/data")[0];        skill = leader->query_temp("dagou/data")[1];        partner = leader->query_temp("dagou/data")[2];        ori_effect = (int)(skill / (partner*3));        ori_partner = partner;          // If the victim is dead or run away or the qi less than 50, then        // the 打狗阵 is done.        // If the leader is not fighting with the victim or the leader is not        // using dagou-bang skill, then the 打狗阵 is finish too.     if (!inarray[MAX_INARRAY]) return;    if( !living(inarray[MAX_INARRAY])         || !present(inarray[MAX_INARRAY]->query("id"), environment(leader))         || inarray[MAX_INARRAY]->query("qi") <= 50         || !leader->is_fighting(inarray[MAX_INARRAY])         || leader->query_skill_mapped("staff") != "dagou-bang"        || !objectp(weapon = leader->query_temp("weapon"))         || (string)weapon->query("skill_type") != "staff" )      {                if ( partner != 1 ) {                for ( int i = 0; i < partner; i++ )                        remove_effect(inarray[i], ori_effect);                    if (living( leader ))                        message_vision(HIM"$N大喊一声:“收阵!”。众人口唱“莲花阵”,各自收招。\n\n"NOR, leader);                    else                        message_vision(HIM"众人失去了$N,群龙无首,于是一哄而散。\n\n"NOR, leader);                }                else {                        leader->delete_temp("dagou");                        if ( living(leader) )                    message_vision(HIM"$N看见没有人加入打狗阵,脚底抹油,一声不吭地溜了。\n\n"NOR, leader);        }        return;    }        // Else, if the leader is still in the 打狗阵,check all the people who are in        // the array. If someone is not fighting with the victim or is not using	 dagou-bang        // skill, then this guy quit the 打狗阵。After that, reset the effect.            else {        for ( int i = 1; i < ori_partner; i++ ) {                if ( inarray[i] == 0 ) break;                if ( !inarray[i]->is_fighting(inarray[MAX_INARRAY])                          || inarray[i]->query_skill_mapped("staff") != "dagou-bang"                     || !objectp(weapon = inarray[i]->query_temp("weapon"))                      || (string)weapon->query("skill_type") != "staff" )                 {                        message_vision(                             HIG "$N一边长声唱道:“这路的弟兄讨完饭哟,啊哟哎唷哟……”,"                            + "一边退出了打狗阵。\n"NOR, inarray[i]);                        remove_effect(inarray[i], ori_effect);                        skill -= inarray[i]->query_skill("staff");                          partner -= 1;                    if( i != partner ) {                                              inarray[i] = inarray[partner];                        inarray[partner] = 0;                                           i--;                    }                                        else inarray[i] = 0;                }            }                        if( ori_partner != partner ) {                    leader->set_temp("dagou/data", ({inarray, skill, partner}));                reset_effect(inarray, partner, ori_effect, skill);                          }        }        call_out("check_fight", 1, leader);}private void reset_effect(object *inarray, int partner, int ori_effect, int skill){        skill = (int)(skill/(partner*3));        if(partner == 1)         {                inarray[0]->add_temp("apply/dodge", -ori_effect );                return;        }                else {                for( int i = 0; i < partner; i++ )                {                        if(inarray[i] == 0 ) break;                        inarray[i]->add_temp("apply/dodge", -ori_effect );                        inarray[i]->add_temp("apply/dodge", skill );                }        }}private void remove_effect(object inarray, int skill){    inarray->add_temp("apply/dodge", -skill );    inarray->delete_temp("dagou");}void random_msg(object leader){        int partner;        int ran;        int extra;        int ran_usr, ran_usr1;        object obj, obj1, victim, weapon;        if (!leader) return;if (!leader->query_temp("dagou/data")) return;        if( partner = leader->query_temp("dagou/data")[2] ) {                if(random(5) < 2) {                        if( partner > 1 ) {                                ran_usr = random(partner);                                obj = leader->query_temp("dagou/data")[0][ran_usr];                                ran = random(5);                                message_vision( ran_color[ran] + "$N在打狗阵内" + ran_msg[ran] + "\n" NOR, obj);                                victim = leader->query_temp("dagou/data")[0][MAX_INARRAY];                                                                // This is for 棒掌结合 and 双棒结合.                                                                // this is 棒掌结合。                                if ( random(2) == 1 ) {                                                                                 if( obj->query_skill_prepare()["strike"] == "xianglong-zhang" ) {                                            message_vision(ran_color[ran] + "$N突然冒险进击,单手持棒,攻向$n。\n"NOR, obj, victim);                                            weapon = obj->query_temp("weapon");        extra=obj->query_skill("dagou-bang");        obj->add_temp("apply/attack", (2*extra));        obj->add_temp("apply/damage", extra);                                            COMBAT_D->do_attack(obj, victim, weapon, 1);                                        obj->delete_temp("weapon");                                        obj->set_temp("action_flag",1);                                            COMBAT_D->do_attack(obj, victim);        obj->add_temp("apply/attack", -(2*extra));        obj->add_temp("apply/damage", -extra);                                            obj->set_temp("weapon", weapon);                                            obj->set_temp("action_flag",0);                                            if ( obj->query("neili") >= 150 ) obj->add("neili", -10);                                        }                                }                                // this is 双棒结合。                                else {                                          do {                                                ran_usr1 = random(partner);                                        } while ( ran_usr1 == ran_usr);                                                                                obj1 = leader->query_temp("dagou/data")[0][ran_usr1];                                        message_vision(ran_color[ran] + "$N和$n突然冒险进击,双棒结合,舞成一团棒影,共同进攻。\n"NOR, obj, obj1);        extra=obj->query_skill("dagou-bang");        obj->add_temp("apply/attack", (2*extra));        obj->add_temp("apply/damage", extra);                                        COMBAT_D->do_attack(obj, victim, obj->query_temp("weapon"), 1);        obj->add_temp("apply/attack", -(2*extra));        obj->add_temp("apply/damage", -extra);                                        obj1->set_temp("action_flag", 1);        extra=obj1->query_skill("dagou-bang");        obj1->add_temp("apply/attack", (2*extra));        obj1->add_temp("apply/damage", extra);                                        COMBAT_D->do_attack(obj1, victim, obj1->query_temp("weapon"), 1);                                        obj1->set_temp("action_flag", 0);        obj1->add_temp("apply/attack", -(2*extra));        obj1->add_temp("apply/damage", -extra);                                        if ( obj->query("neili") >= 150 ) obj->add("neili", -5);                                        if ( obj1->query("neili") >= 150 ) obj1->add("neili", -5);                          }                        }                        else                                message_vision( ran_color[ran] + "$N孤军作战," + ran_msg[ran] + "并尽量拖延时间,等待群丐加入。\n"NOR, leader);                }                                        call_out("random_msg", 6, leader);        }}

⌨️ 快捷键说明

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