📄 dagou.c
字号:
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 + -