本文整理汇总了C++中player::has_grab_break_tec方法的典型用法代码示例。如果您正苦于以下问题:C++ player::has_grab_break_tec方法的具体用法?C++ player::has_grab_break_tec怎么用?C++ player::has_grab_break_tec使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类player
的用法示例。
在下文中一共展示了player::has_grab_break_tec方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: hit_player
//.........这里部分代码省略.........
} else {
g->add_msg(_("Your %s puncture it!"),
(g->u.has_trait("QUILLS") ? _("quills") : _("spines")));
}
hurt(spine);
}
if (dam + cut <= 0)
{
return; // Defensive technique canceled damage.
}
//Hallucinations don't actually hurt the player, but do produce the message
if(is_hallucination()) {
//~14% chance of vanishing after hitting the player
if(one_in(7)) {
die(g);
return;
}
} else {
//Hurt the player
dam = p.hit(g, bphit, side, dam, cut);
//Monster effects
if (dam > 0 && has_flag(MF_VENOM)) {
g->add_msg_if_player(&p, _("You're poisoned!"));
p.add_disease("poison", 30);
} else if (dam > 0 && has_flag(MF_BADVENOM)) {
g->add_msg_if_player(&p, _("You feel poison flood your body, wracking you with pain..."));
p.add_disease("badpoison", 40);
} else if (dam > 0 && has_flag(MF_PARALYZE)) {
g->add_msg_if_player(&p, _("You feel poison enter your body!"));
p.add_disease("paralyzepoison", 100, false, 1, 20, 100);
}
if (has_flag(MF_BLEED) && dam > 6 && cut > 0) {
g->add_msg_if_player(&p, _("You're Bleeding!"));
p.add_disease("bleed", 60, false, 1, 3, 120, 1, bphit, side, true);
}
//Same as monster's chance to not miss
if (can_grab && has_flag(MF_GRABS) &&
(rng(0, 10000) > 11000 * exp(-.3 * type->melee_skill)))
{
g->add_msg(_("The %s grabs you!"), name().c_str());
if (p.has_grab_break_tec() &&
dice(p.dex_cur + p.skillLevel("melee"), 12) > dice(type->melee_dice, 10))
{
g->add_msg_if_player(&p, _("You break the grab!"));
} else {
hit_player(g, p, false); //We grabed, so hit them again
}
}
}
// TODO: readd with counter mechanic
}
}
}
// if dam > 0
if (is_npc)
{
if (p.hp_cur[hp_head] <= 0 || p.hp_cur[hp_torso] <= 0)
{
npc* tmp = dynamic_cast<npc*>(&p);
tmp->die(g);
int index = g->npc_at(p.posx, p.posy);
if (index != -1 && index < g->active_npc.size())
{
g->active_npc.erase(g->active_npc.begin() + index);
}
plans.clear();
}
}
// Adjust anger/morale of same-species monsters, if appropriate
int anger_adjust = 0, morale_adjust = 0;
if (type->has_anger_trigger(MTRIG_FRIEND_ATTACKED)){
anger_adjust += 15;
}
if (type->has_fear_trigger(MTRIG_FRIEND_ATTACKED)){
morale_adjust -= 15;
}
if (type->has_placate_trigger(MTRIG_FRIEND_ATTACKED)){
anger_adjust -= 15;
}
if (anger_adjust != 0 && morale_adjust != 0)
{
for (int i = 0; i < g->num_zombies(); i++)
{
g->zombie(i).morale += morale_adjust;
g->zombie(i).anger += anger_adjust;
}
}
}