From 3f58028d3198e77ce26d09680f0a637188610871 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 15 Oct 2011 16:04:25 +0300 Subject: [PATCH] Make dungeon masters though and make oerkkis disappear when they get to you (because hitting them doesn't work for some unknown reason) --- data/dungeon_master.png | Bin 5998 -> 6636 bytes src/client.cpp | 2 +- src/content_cao.cpp | 18 +++++++++-- src/content_cao.h | 3 ++ src/content_sao.cpp | 65 ++++++++++++++++++++++++++++++++-------- src/content_sao.h | 2 ++ src/environment.cpp | 2 +- 7 files changed, 74 insertions(+), 18 deletions(-) diff --git a/data/dungeon_master.png b/data/dungeon_master.png index 77e015c16a8d27616279150fec477d92a1554ae9..3457c8228fce6572daa79e219e0bb22f568062ea 100644 GIT binary patch literal 6636 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 yFQl3=L&|V)!cr8s%hN`QkO=dy5K% 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 BG*18k diff --git a/src/client.cpp b/src/client.cpp index 1af91703e..c40c9e513 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1574,7 +1574,7 @@ void Client::clickActiveObject(u8 button, u16 id, u16 item_i) v3f dir = (objpos - playerpos).normalize(); bool disable_send = obj->directReportPunch(toolname, dir); - + if(disable_send) return; } diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 53e4a6d13..d9b88967d 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -606,7 +606,7 @@ void Oerkki1CAO::step(float dtime, ClientEnvironment *env) v2f playerpos_2d(playerpos.X,playerpos.Z); v2f objectpos_2d(m_position.X,m_position.Z); - if(fabs(m_position.Y - playerpos.Y) < 3.0*BS && + if(fabs(m_position.Y - playerpos.Y) < 1.5*BS && objectpos_2d.getDistanceFrom(playerpos_2d) < 1.5*BS) { if(m_attack_interval.step(dtime, 0.5)) @@ -709,6 +709,18 @@ void Oerkki1CAO::initialize(const std::string &data) updateNodePos(); } +bool Oerkki1CAO::directReportPunch(const std::string &toolname, v3f dir) +{ + m_damage_visual_timer = 1.0; + + m_position += dir * BS; + pos_translator.sharpen(); + pos_translator.update(m_position); + updateNodePos(); + + return false; +} + /* FireflyCAO */ @@ -1003,9 +1015,9 @@ void MobV2CAO::step(float dtime, ClientEnvironment *env) v3f cam_to_mob = m_node->getAbsolutePosition() - camera->getAbsolutePosition(); cam_to_mob.normalize(); int col = 0; - if(cam_to_mob.Y > 0.7) + if(cam_to_mob.Y > 0.75) col = 5; - else if(cam_to_mob.Y < -0.7) + else if(cam_to_mob.Y < -0.75) col = 4; else{ float mob_dir = atan2(cam_to_mob.Z, cam_to_mob.X) / M_PI * 180.; diff --git a/src/content_cao.h b/src/content_cao.h index a362b6be5..963e1a488 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -248,6 +248,9 @@ public: {return pos_translator.vect_show;} //{return m_position;} + // If returns true, punch will not be sent to the server + bool directReportPunch(const std::string &toolname, v3f dir); + private: IntervalLimiter m_attack_interval; core::aabbox3d m_selection_box; diff --git a/src/content_sao.cpp b/src/content_sao.cpp index d81e3f871..c849c7a98 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -523,13 +523,14 @@ void Oerkki1SAO::step(float dtime, bool send_recommended) Player *player = *i; v3f playerpos = player->getPosition(); f32 dist = m_base_position.getDistanceFrom(playerpos); - if(dist < BS*1.45) + if(dist < BS*0.6) { + m_removed = true; + return; player_is_too_close = true; near_player_pos = playerpos; - break; } - else if(dist < BS*15.0) + else if(dist < BS*15.0 && !player_is_too_close) { player_is_close = true; near_player_pos = playerpos; @@ -681,7 +682,7 @@ u16 Oerkki1SAO::punch(const std::string &toolname, v3f dir) { m_speed_f += dir*12*BS; - u16 amount = 5; + u16 amount = 20; doDamage(amount); return 65536/100; } @@ -917,7 +918,9 @@ MobV2SAO::MobV2SAO(ServerEnvironment *env, u16 id, v3f pos, m_shooting(false), m_shooting_timer(0), m_falling(false), - m_disturb_timer(100000) + m_disturb_timer(100000), + m_random_disturb_timer(0), + m_shoot_y(0) { ServerActiveObject::registerType(getType(), create); @@ -1073,18 +1076,46 @@ void MobV2SAO::step(float dtime, bool send_recommended) return; } + m_random_disturb_timer += dtime; + if(m_random_disturb_timer >= 5.0) + { + m_random_disturb_timer = 0; + // Check connected players + core::list players = m_env->getPlayers(true); + core::list::Iterator i; + for(i = players.begin(); + i != players.end(); i++) + { + Player *player = *i; + v3f playerpos = player->getPosition(); + f32 dist = m_base_position.getDistanceFrom(playerpos); + if(dist < BS*16) + { + if(myrand_range(0,2) == 0){ + dstream<<"ACTION: id="<getName()<getName(); + m_disturb_timer = 0; + break; + } + } + } + } + Player *disturbing_player = m_env->getPlayer(m_disturbing_player.c_str()); v3f disturbing_player_off = v3f(0,1,0); + v3f disturbing_player_norm = v3f(0,1,0); float disturbing_player_distance = 1000000; float disturbing_player_dir = 0; if(disturbing_player){ disturbing_player_off = disturbing_player->getPosition() - m_base_position; disturbing_player_distance = disturbing_player_off.getLength(); - disturbing_player_off.normalize(); - disturbing_player_dir = 180./M_PI*atan2(disturbing_player_off.Z, - disturbing_player_off.X); + disturbing_player_norm = disturbing_player_off; + disturbing_player_norm.normalize(); + disturbing_player_dir = 180./M_PI*atan2(disturbing_player_norm.Z, + disturbing_player_norm.X); } m_disturb_timer += dtime; @@ -1100,6 +1131,8 @@ void MobV2SAO::step(float dtime, bool send_recommended) shoot_pos.Y += m_properties->getFloat("shoot_y") * BS; if(shoot_type == "fireball"){ v3f dir(cos(m_yaw/180*PI),0,sin(m_yaw/180*PI)); + dir.Y = m_shoot_y; + dir.normalize(); v3f speed = dir * BS * 10.0; v3f pos = m_base_position + shoot_pos; dstream<<__FUNCTION_NAME<<": Shooting fireball from "<= reload_time && !m_next_pos_exists) + if(!m_shooting && m_shoot_reload_timer >= reload_time && + !m_next_pos_exists) { + m_shoot_y = 0; if(m_disturb_timer < 30.0 && disturbing_player && disturbing_player_distance < 16*BS && - fabs(disturbing_player_off.Y) < 5*BS){ + fabs(disturbing_player_norm.Y) < 0.8){ m_yaw = disturbing_player_dir; sendPosition(); + m_shoot_y += disturbing_player_norm.Y; } m_shoot_reload_timer = 0.0; m_shooting = true; @@ -1292,9 +1328,13 @@ u16 MobV2SAO::punch(const std::string &toolname, v3f dir, { assert(m_env); Map *map = &m_env->getMap(); + + dstream<<"ACTION: "<