void Erik::in_sp1() { //TODO: check STATE_WATER if (state&STATE_FALL) setState(STATE_ACT_1); if (state&STATE_ACT_2) { } else if (state&STATE_ACT_1) { setState(STATE_ACT_2); addSpeed(jump2); setEvent(new CAnimEvent(this,DE_JUMP,0,ESTATE_ABORT,au_jump,(state&STATE_LEFT) ? anim_erik_jump2_left : anim_erik_jump2_right)); } else { setState(STATE_ACT_1); addSpeed(jump); setEvent(new CAnimEvent(this,DE_JUMP,0,ESTATE_ABORT,NULL,(state&STATE_LEFT) ? anim_erik_jump_left : anim_erik_jump_right)); } }
void BasicScreenObject::doMove() { speed *= movedrag; if (speed.length() > 0) { move(speed.x, speed.y, speed.z); } if (moveattractionforce > 0) { ofVec3f dist; dist.set(endposition); dist -= getPosition(); dist *= moveattractionforce; addSpeed(dist.x, dist.y, dist.z, movedrag); } }
int PlayerSAO::punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, float time_from_last_punch) { if (!m_player) return 0; // It's best that attachments cannot be punched if (isAttached()) return 0; if (!toolcap) return 0; // No effect if PvP disabled if (g_settings->getBool("enable_pvp") == false) { if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { std::string str = gob_cmd_punched(0, getHP()); // create message and add to list ActiveObjectMessage aom(getId(), true, str); m_messages_out.push(aom); return 0; } } HitParams hitparams = getHitParams(m_armor_groups, toolcap, time_from_last_punch); std::string punchername = "nil"; if (puncher != 0) punchername = puncher->getDescription(); PlayerSAO *playersao = m_player->getPlayerSAO(); bool damage_handled = m_env->getScriptIface()->on_punchplayer(playersao, puncher, time_from_last_punch, toolcap, dir, hitparams.hp); if (!damage_handled) { setHP(getHP() - hitparams.hp); } else { // override client prediction if (puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { std::string str = gob_cmd_punched(0, getHP()); // create message and add to list ActiveObjectMessage aom(getId(), true, str); m_messages_out.push(aom); } } v3f punch = dir * 5 * BS; addSpeed(punch); actionstream << "Player " << m_player->getName() << " punched by " << punchername; if (!damage_handled) { actionstream << ", damage " << hitparams.hp << " HP"; } else { actionstream << ", damage handled by lua"; } actionstream << std::endl; return hitparams.wear; }