From 5fe761d1d4bd98379348c70787fe41ea4e793181 Mon Sep 17 00:00:00 2001 From: darkrose Date: Sat, 11 Oct 2014 23:46:16 +1000 Subject: [PATCH] add sheep - that may or may not be possessed by michael jackson --- data/models/sheep.b3d | Bin 0 -> 247680 bytes data/textures/cooked_meat.png | Bin 0 -> 678 bytes data/textures/fur.png | Bin 0 -> 631 bytes data/textures/meat.png | Bin 0 -> 697 bytes data/textures/mob_sheep.png | Bin 0 -> 3247 bytes src/activeobject.h | 41 ++++++++++------- src/content_cao.cpp | 50 ++++++++++++--------- src/content_cao.h | 73 ++++++++++++++++++++---------- src/content_craftitem.cpp | 29 ++++++++++++ src/content_craftitem.h | 3 ++ src/content_mob.cpp | 47 +++++++++++++++++-- src/content_mob.h | 13 ++++++ src/content_object.h | 41 ++++++++++------- src/content_sao.cpp | 82 +++++++++++++++++++++++----------- src/content_sao.h | 48 +++++++++++--------- src/environment.cpp | 42 +++++++++-------- src/environment.h | 41 ++++++++++------- src/game.cpp | 42 +++++++++-------- src/inventory.cpp | 45 ++++++++++--------- src/inventory.h | 45 ++++++++++--------- src/mapblock.cpp | 42 +++++++++-------- src/mapblock.h | 41 ++++++++++------- src/mapnode.h | 42 +++++++++-------- src/server.cpp | 79 +++++++++++++++++--------------- src/serverobject.cpp | 42 +++++++++-------- src/serverobject.h | 49 +++++++++++--------- 26 files changed, 583 insertions(+), 354 deletions(-) create mode 100644 data/models/sheep.b3d create mode 100644 data/textures/cooked_meat.png create mode 100644 data/textures/fur.png create mode 100644 data/textures/meat.png create mode 100644 data/textures/mob_sheep.png diff --git a/data/models/sheep.b3d b/data/models/sheep.b3d new file mode 100644 index 0000000000000000000000000000000000000000..cdb682440d90571138d54eee34a4f2e716d77f40 GIT binary patch literal 247680 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
    >`oT;6Gsc+qs){^*KX}kUYv+#W0T6+nP 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 literal 0 HcmV?d00001 diff --git a/src/activeobject.h b/src/activeobject.h index 24d1e33..782b9a5 100644 --- a/src/activeobject.h +++ b/src/activeobject.h @@ -1,21 +1,28 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* activeobject.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ #ifndef ACTIVEOBJECT_HEADER #define ACTIVEOBJECT_HEADER diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 2d24c38..835e417 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* content_cao.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #include "content_cao.h" #include "content_mob.h" @@ -354,9 +360,9 @@ void MobCAO::updateNodePos() v3f rot = m_node->getRotation(); if (m_draw_type == MDT_MODEL) { - rot.Y = (90-m_yaw)+content_mob_features(m_content).model_rotation.Y; + rot.Y = (90-pos_translator.yaw_show)+content_mob_features(m_content).model_rotation.Y; }else if (m_draw_type == MDT_SPRITE) { - rot.Y = m_yaw+content_mob_features(m_content).model_rotation.Y; + rot.Y = pos_translator.yaw_show+content_mob_features(m_content).model_rotation.Y; } m_node->setRotation(rot); } @@ -439,9 +445,9 @@ void MobCAO::processMessage(const std::string &data) if (cmd == 0) { // pos m_position = readV3F1000(is); - pos_translator.update(m_position); // yaw m_yaw = readF1000(is); + pos_translator.update(m_position,m_yaw); if (!m_walking) { m_walking = true; @@ -521,7 +527,7 @@ bool MobCAO::directReportPunch(const std::string &toolname, v3f dir) m_position += dir * BS; pos_translator.sharpen(); - pos_translator.update(m_position); + pos_translator.update(m_position,m_yaw); updateNodePos(); return false; diff --git a/src/content_cao.h b/src/content_cao.h index 6a802a7..50c7760 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* content_cao.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #ifndef CONTENT_CAO_HEADER #define CONTENT_CAO_HEADER @@ -40,6 +46,9 @@ struct SmoothTranslator f32 anim_counter; f32 anim_time; f32 anim_time_counter; + f32 yaw_old; + f32 yaw_show; + f32 yaw_aim; SmoothTranslator(): vect_old(0,0,0), @@ -47,7 +56,10 @@ struct SmoothTranslator vect_aim(0,0,0), anim_counter(0), anim_time(0), - anim_time_counter(0) + anim_time_counter(0), + yaw_old(0), + yaw_show(0), + yaw_aim(0) {} void init(v3f vect) @@ -58,6 +70,9 @@ struct SmoothTranslator anim_counter = 0; anim_time = 0; anim_time_counter = 0; + yaw_old = 0; + yaw_show = 0; + yaw_aim = 0; } void sharpen() @@ -65,14 +80,17 @@ struct SmoothTranslator init(vect_show); } - void update(v3f vect_new) + void update(v3f vect_new,f32 yaw_new) { vect_old = vect_show; vect_aim = vect_new; - if(anim_time < 0.001 || anim_time > 1.0) + yaw_old = yaw_show; + yaw_aim = wrapDegrees_0_360(yaw_new); + if (anim_time < 0.001 || anim_time > 1.0) { anim_time = anim_time_counter; - else + }else{ anim_time = anim_time * 0.9 + anim_time_counter * 0.1; + } anim_time_counter = 0; anim_counter = 0; } @@ -82,14 +100,21 @@ struct SmoothTranslator anim_time_counter = anim_time_counter + dtime; anim_counter = anim_counter + dtime; v3f vect_move = vect_aim - vect_old; + f32 yaw_move = yaw_aim - yaw_old; + if (yaw_move > 200) { + yaw_move -= 180; + }else if (yaw_move < -200) { + yaw_move += 180; + } f32 moveratio = 1.0; - if(anim_time > 0.001) + if (anim_time > 0.001) moveratio = anim_time_counter / anim_time; // Move a bit less than should, to avoid oscillation moveratio = moveratio * 0.5; - if(moveratio > 1.5) + if (moveratio > 1.5) moveratio = 1.5; vect_show = vect_old + vect_move * moveratio; + yaw_show = yaw_old + yaw_move * moveratio; } bool is_moving() diff --git a/src/content_craftitem.cpp b/src/content_craftitem.cpp index 745e668..962504b 100644 --- a/src/content_craftitem.cpp +++ b/src/content_craftitem.cpp @@ -719,4 +719,33 @@ void content_craftitem_init() lists::add("creative",i); lists::add("cooking",i); + i = CONTENT_CRAFTITEM_FUR; + f = &g_content_craftitem_features[i]; + f->content = CONTENT_CRAFTITEM_FUR; + f->texture = "fur.png"; + f->name = "fur"; + f->description = wgettext("Fur"); + lists::add("creative",i); + + i = CONTENT_CRAFTITEM_MEAT; + f = &g_content_craftitem_features[i]; + f->content = CONTENT_CRAFTITEM_MEAT; + f->texture = "meat.png"; + f->name = "meat"; + f->description = wgettext("Meat"); + f->cook_result = "CraftItem cooked_meat 1"; + lists::add("creative",i); + lists::add("cooking",i); + + i = CONTENT_CRAFTITEM_COOKED_MEAT; + f = &g_content_craftitem_features[i]; + f->content = CONTENT_CRAFTITEM_COOKED_MEAT; + f->texture = "cooked_meat.png"; + f->name = "cooked_meat"; + f->description = wgettext("Cooked Meat"); + f->cook_result = "CraftItem ash 1"; + f->edible = 6; + lists::add("creative",i); + lists::add("cooking",i); + } diff --git a/src/content_craftitem.h b/src/content_craftitem.h index a076489..a7d3b6d 100644 --- a/src/content_craftitem.h +++ b/src/content_craftitem.h @@ -105,5 +105,8 @@ CraftItemFeatures & content_craftitem_features(std::string subname); #define CONTENT_CRAFTITEM_OERKKI_DUST (CONTENT_CRAFTITEM_MASK | 0x44) #define CONTENT_CRAFTITEM_FISH (CONTENT_CRAFTITEM_MASK | 0x45) #define CONTENT_CRAFTITEM_COOKED_FISH (CONTENT_CRAFTITEM_MASK | 0x46) +#define CONTENT_CRAFTITEM_FUR (CONTENT_CRAFTITEM_MASK | 0x47) +#define CONTENT_CRAFTITEM_MEAT (CONTENT_CRAFTITEM_MASK | 0x48) +#define CONTENT_CRAFTITEM_COOKED_MEAT (CONTENT_CRAFTITEM_MASK | 0x49) #endif diff --git a/src/content_mob.cpp b/src/content_mob.cpp index f32e53a..4e029b0 100644 --- a/src/content_mob.cpp +++ b/src/content_mob.cpp @@ -22,6 +22,7 @@ #include "serverobject.h" #include "content_sao.h" #include "content_mob.h" +#include "content_craftitem.h" #include "main.h" #include "settings.h" #include "environment.h" @@ -111,6 +112,12 @@ bool content_mob_spawn(ServerEnvironment *env, v3s16 pos, u32 active_object_coun content_t c2 = a2.getContent(); u8 light = a1.getLightBlend(env->getDayNightRatio()); u8 level = mobLevelI(g_settings->get("max_mob_level")); + v3f pf = intToFloat(pos,BS); + Player *nearest = env->getNearestConnectedPlayer(pf); + f32 distance = 30000.0; + if (nearest) + distance = pf.getDistanceFrom(nearest->getPosition()); + if (c0 == CONTENT_IGNORE || c1 == CONTENT_IGNORE || c2 == CONTENT_IGNORE) return false; @@ -121,6 +128,12 @@ bool content_mob_spawn(ServerEnvironment *env, v3s16 pos, u32 active_object_coun continue; if (m.spawn_max_nearby_mobs < active_object_count) continue; + if (m.spawn_nearest_player != m.spawn_farthest_player) { + if (m.spawn_nearest_player > distance) + continue; + if (m.spawn_farthest_player < distance) + continue; + } if (m.spawn_min_height > pos.Y) continue; if (m.spawn_max_height < pos.Y) @@ -200,7 +213,6 @@ void content_mob_init() f = &g_content_mob_features[i]; f->content = i; f->level = MOB_PASSIVE; - //f->model = "rat.x"; f->model_scale = v3f(0.5,0.5,0.5); f->setTexture("mob_firefly.png"); f->punch_action = MPA_PICKUP; @@ -227,6 +239,7 @@ void content_mob_init() f->setAnimationFrames(MA_STAND,24,36); f->setAnimationFrames(MA_ATTACK,37,49); f->punch_action = MPA_HARM; + f->dropped_item = std::string("CraftItem2 ")+itos(CONTENT_CRAFTITEM_OERKKI_DUST)+" 2"; f->motion = MM_SEEKER; f->spawn_on = CONTENT_STONE; f->spawn_in = CONTENT_AIR; @@ -251,11 +264,13 @@ void content_mob_init() f->setAnimationFrames(MA_MOVE,31,60); f->setAnimationFrames(MA_ATTACK,61,90); f->punch_action = MPA_HARM; + f->dropped_item = std::string("CraftItem2 ")+itos(CONTENT_CRAFTITEM_GUNPOWDER)+" 4"; f->motion = MM_SENTRY; f->spawn_on = CONTENT_STONE; f->spawn_in = CONTENT_AIR; f->spawn_max_light = LIGHT_MAX/3; f->spawn_max_nearby_mobs = 1; + f->spawn_farthest_player = 20.0*BS; f->notices_player = true; f->attack_throw_object = CONTENT_MOB_FIREBALL; f->attack_glow_light = LIGHT_MAX-1; @@ -267,7 +282,6 @@ void content_mob_init() f = &g_content_mob_features[i]; f->content = i; f->level = MOB_DESTRUCTIVE; - //f->model = "rat.x"; f->setTexture("mob_fireball.png"); f->punch_action = MPA_IGNORE; f->motion = MM_CONSTANT; @@ -293,6 +307,7 @@ void content_mob_init() f->setAnimationFrames(MA_MOVE,0,60); f->setAnimationFrames(MA_ATTACK,0,60); f->punch_action = MPA_HARM; + f->dropped_item = std::string("CraftItem2 ")+itos(CONTENT_CRAFTITEM_FUR)+" 2"; f->motion = MM_SEEKER; f->motion_type = MMT_WALK; f->spawn_on = CONTENT_WILDGRASS_SHORT; @@ -318,6 +333,7 @@ void content_mob_init() f->setAnimationFrames(MA_MOVE,0,60); f->setAnimationFrames(MA_ATTACK,0,60); f->punch_action = MPA_HARM; + f->dropped_item = std::string("CraftItem2 ")+itos(CONTENT_CRAFTITEM_MEAT)+" 2"; f->motion = MM_WANDER; f->motion_type = MMT_WALK; f->angry_motion = MM_SEEKER; @@ -370,6 +386,7 @@ void content_mob_init() f->setAnimationFrames(MA_MOVE,80,160); f->setAnimationFrames(MA_ATTACK,80,160); f->punch_action = MPA_HARM; + f->dropped_item = std::string("CraftItem2 ")+itos(CONTENT_CRAFTITEM_MEAT)+" 2"; f->motion = MM_SEEKER; f->motion_type = MMT_SWIM; f->spawn_on = CONTENT_SAND; @@ -413,5 +430,29 @@ void content_mob_init() i = CONTENT_MOB_SHEEP; f = &g_content_mob_features[i]; - //f->content = i; + f->content = i; + f->level = MOB_PASSIVE; + f->hp = 30; + f->model = "sheep.b3d"; + f->model_scale = v3f(0.8,0.8,0.8); + f->model_rotation = v3f(0,-90,0); + f->model_offset = v3f(0,0.6,0); + f->setTexture("mob_sheep.png"); + f->setAnimationFrames(MA_STAND,61,120); + f->setAnimationFrames(MA_MOVE,0,60); + f->setAnimationFrames(MA_ATTACK,0,60); + f->punch_action = MPA_HARM; + f->dropped_item = std::string("CraftItem2 ")+itos(CONTENT_CRAFTITEM_MEAT)+" 2"; + f->special_punch_item = TT_SHEAR; + f->special_dropped_item = std::string("CraftItem2 ")+itos(CONTENT_CRAFTITEM_STRING)+" 4"; + f->motion = MM_SEEKER; + f->motion_type = MMT_WALK; + f->spawn_on = CONTENT_WILDGRASS_SHORT; + f->spawn_in = CONTENT_AIR; + f->spawn_min_height = 2; + f->spawn_max_height = 20; + f->spawn_min_light = LIGHT_MAX/2; + f->spawn_max_nearby_mobs = 3; + f->lifetime = 900.0; + f->setCollisionBox(aabb3f(-0.4*BS, 0., -0.4*BS, 0.4*BS, 1.*BS, 0.4*BS)); } diff --git a/src/content_mob.h b/src/content_mob.h index 042c51d..be44540 100644 --- a/src/content_mob.h +++ b/src/content_mob.h @@ -24,6 +24,7 @@ #include "mapnode.h" #include "serverobject.h" +#include "content_toolitem.h" #ifndef SERVER #include "common_irrlicht.h" #endif @@ -105,6 +106,8 @@ struct MobFeatures { MobMotionType motion_type; MobMotion angry_motion; bool is_tamable; + content_t hunted_node; + content_t fleed_node; bool notices_player; content_t tamed_mob; content_t attack_throw_object; @@ -115,6 +118,8 @@ struct MobFeatures { u8 attack_glow_light; u16 hp; std::string dropped_item; + ToolType special_punch_item; + std::string special_dropped_item; f32 lifetime; u16 contact_explosion_diameter; @@ -126,6 +131,8 @@ struct MobFeatures { s16 spawn_max_height; u8 spawn_max_nearby_mobs; s16 spawn_chance; + s16 spawn_nearest_player; + s16 spawn_farthest_player; MobFeatures() { @@ -214,6 +221,8 @@ struct MobFeatures { motion_type = MMT_WALK; angry_motion = MM_STATIC; is_tamable = false; + hunted_node = CONTENT_IGNORE; + fleed_node = CONTENT_IGNORE; notices_player = false; tamed_mob = CONTENT_IGNORE; attack_throw_object = CONTENT_IGNORE; @@ -224,6 +233,8 @@ struct MobFeatures { attack_glow_light = 0; hp = 20; dropped_item = ""; + special_punch_item = TT_NONE; + special_dropped_item = ""; lifetime = 0.0; contact_explosion_diameter = 0; spawn_on = CONTENT_IGNORE; @@ -234,6 +245,8 @@ struct MobFeatures { spawn_max_height = 100; spawn_max_nearby_mobs = 3; spawn_chance = 100; + spawn_nearest_player = 0; + spawn_farthest_player = 0; } }; diff --git a/src/content_object.h b/src/content_object.h index 353b01c..4c4ed72 100644 --- a/src/content_object.h +++ b/src/content_object.h @@ -1,21 +1,28 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* content_object.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ #ifndef CONTENT_OBJECT_HEADER #define CONTENT_OBJECT_HEADER diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 432a7f4..e7a8f82 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* content_sao.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #include "content_sao.h" #include "content_mob.h" @@ -473,10 +479,7 @@ void MobSAO::step(float dtime, bool send_recommended) if (m_next_pos_exists) { v3f pos_f = m_base_position; v3f next_pos_f = intToFloat(m_next_pos_i, BS); - v3f v = next_pos_f - pos_f; - m_yaw = atan2(v.Z, v.X) / PI * 180; - v3f diff = next_pos_f - pos_f; v3f dir = diff; dir.normalize(); @@ -485,6 +488,7 @@ void MobSAO::step(float dtime, bool send_recommended) speed = BS * 2.0; if (m_falling) speed = BS * 3.0; + dir *= dtime * speed; bool arrived = false; if (dir.getLength() > diff.getLength()) { @@ -492,6 +496,7 @@ void MobSAO::step(float dtime, bool send_recommended) arrived = true; } pos_f += dir; + m_yaw = wrapDegrees_180(180./PI*atan2(dir.Z, dir.X)); m_base_position = pos_f; if ((pos_f - next_pos_f).getLength() < 0.1 || arrived) @@ -556,8 +561,11 @@ void MobSAO::stepMotionWander(float dtime) } u32 order[3*3*3]; get_random_u32_array(order, num_dps); + v3s16 op = floatToInt(m_oldpos,BS); for (int i=0; idispatchEvent(&event); } -InventoryItem* MobSAO::createPickedUpItem() +InventoryItem* MobSAO::createPickedUpItem(content_t punch_item) { MobFeatures m = content_mob_features(m_content); + ToolItemFeatures f = content_toolitem_features(punch_item); if (m.punch_action != MPA_PICKUP) { - if (!m_removed) + if (!m_removed) { + if (m.special_dropped_item != "" && (m.special_punch_item == TT_NONE || f.type == m.special_punch_item)) { + std::istringstream is(m.special_dropped_item, std::ios_base::binary); + InventoryItem *item = InventoryItem::deSerialize(is); + return item; + } return NULL; + } } if (m.dropped_item == "") return NULL; @@ -1098,14 +1128,15 @@ InventoryItem* MobSAO::createPickedUpItem() m_removed = true; return item; } -u16 MobSAO::punch(const std::string &toolname, v3f dir, const std::string &playername) +u16 MobSAO::punch(content_t punch_item, v3f dir, const std::string &playername) { MobFeatures m = content_mob_features(m_content); if (m.punch_action == MPA_IGNORE) return 0; + ToolItemFeatures f = content_toolitem_features(punch_item); actionstream< - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* content_sao.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #ifndef CONTENT_SAO_HEADER #define CONTENT_SAO_HEADER @@ -38,7 +44,7 @@ public: std::string getClientInitializationData(); std::string getStaticData(); InventoryItem* createInventoryItem(); - InventoryItem* createPickedUpItem(){return createInventoryItem();} + InventoryItem* createPickedUpItem(content_t punch_item){return createInventoryItem();} void rightClick(Player *player); private: std::string m_inventorystring; @@ -60,8 +66,8 @@ public: std::string getStaticData(); std::string getClientInitializationData(); void step(float dtime, bool send_recommended); - InventoryItem* createPickedUpItem(); - u16 punch(const std::string &toolname, v3f dir, const std::string &playername); + InventoryItem* createPickedUpItem(content_t punch_item); + u16 punch(content_t punch_item, v3f dir, const std::string &playername); u8 level(); private: void sendPosition(); diff --git a/src/environment.cpp b/src/environment.cpp index 37c29dc..7012570 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* environment.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #include "environment.h" #include "filesys.h" diff --git a/src/environment.h b/src/environment.h index c614656..545c91a 100644 --- a/src/environment.h +++ b/src/environment.h @@ -1,21 +1,28 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* environment.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ #ifndef ENVIRONMENT_HEADER #define ENVIRONMENT_HEADER diff --git a/src/game.cpp b/src/game.cpp index c8c7ba0..b5ef512 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* game.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #include "game.h" #include "common_irrlicht.h" diff --git a/src/inventory.cpp b/src/inventory.cpp index cd10120..ab2f192 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -1,25 +1,28 @@ -/* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* inventory.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -/* -(c) 2010 Perttu Ahola -*/ #include "inventory.h" #include "serialization.h" diff --git a/src/inventory.h b/src/inventory.h index 5b4b5ce..7af0458 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -1,25 +1,28 @@ -/* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* inventory.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -/* -(c) 2010 Perttu Ahola -*/ #ifndef INVENTORY_HEADER #define INVENTORY_HEADER diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 69bd98b..43e313c 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* mapblock.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #include "mapblock.h" #include "map.h" diff --git a/src/mapblock.h b/src/mapblock.h index 0ff442e..95d9072 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -1,21 +1,28 @@ -/* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* mapblock.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ #ifndef MAPBLOCK_HEADER #define MAPBLOCK_HEADER diff --git a/src/mapnode.h b/src/mapnode.h index 767fc0f..9d00cd3 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* mapnode.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #ifndef MAPNODE_HEADER #define MAPNODE_HEADER diff --git a/src/server.cpp b/src/server.cpp index 93d1423..bd55a66 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* server.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #include "server.h" #include "utility.h" @@ -30,6 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "config.h" #include "servercommand.h" #include "filesys.h" +#include "content_object.h" #include "content_mapnode.h" #include "content_craft.h" #include "content_craftitem.h" @@ -2291,10 +2298,22 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) // Left click, pick object up (usually) if(button == 0) { + content_t wield_item = CONTENT_IGNORE; + ToolItem *titem = NULL; + + InventoryList *mlist = player->inventory.getList("main"); + if (mlist != NULL) { + InventoryItem *item = mlist->getItem(item_i); + if (item) { + wield_item = item->getContent(); + if ((wield_item&CONTENT_TOOLITEM_MASK) == CONTENT_TOOLITEM_MASK) + titem = (ToolItem*)item; + } + } /* Try creating inventory item */ - InventoryItem *item = obj->createPickedUpItem(); + InventoryItem *item = obj->createPickedUpItem(wield_item); if (item) { InventoryList *ilist = player->inventory.getList("main"); @@ -2315,7 +2334,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } // Remove object from environment - obj->m_removed = true; + if (obj->getType() != ACTIVEOBJECT_TYPE_MOB) + obj->m_removed = true; } }else{ /* @@ -2325,24 +2345,12 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) actionstream<getName()<<" punches object " <getId()<inventory.getList("main"); - if (mlist != NULL) { - InventoryItem *item = mlist->getItem(item_i); - if (item && (std::string)item->getName() == "ToolItem") { - titem = (ToolItem*)item; - toolname = titem->getToolName(); - } - } - v3f playerpos = player->getPosition(); v3f objpos = obj->getBasePosition(); v3f dir = (objpos - playerpos).normalize(); - u16 wear = obj->punch(toolname, dir, player->getName()); - item = obj->createPickedUpItem(); + u16 wear = obj->punch(wield_item, dir, player->getName()); + item = obj->createPickedUpItem(wield_item); /* killing something might have caused a drop */ if (item) { InventoryList *ilist = player->inventory.getList("main"); @@ -2365,8 +2373,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } if (titem && g_settings->getBool("tool_wear")) { - bool weared_out = titem->addWear(wear); - if(weared_out) + if (titem->addWear(wear)) mlist->deleteItem(item_i); SendInventory(player->peer_id); } diff --git a/src/serverobject.cpp b/src/serverobject.cpp index d01cf42..29c53d2 100644 --- a/src/serverobject.cpp +++ b/src/serverobject.cpp @@ -1,21 +1,27 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* serverobject.cpp +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #include "serverobject.h" #include diff --git a/src/serverobject.h b/src/serverobject.h index bff0705..db81642 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -1,27 +1,34 @@ -/* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +/************************************************************************ +* Minetest-c55 +* Copyright (C) 2010-2011 celeron55, Perttu Ahola +* +* serverobject.h +* voxelands - 3d voxel world sandbox game +* Copyright (C) Lisa 'darkrose' Milne 2013-2014 +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see +* +* License updated from GPLv2 or later to GPLv3 or later by Lisa Milne +* for Voxelands. +************************************************************************/ #ifndef SERVEROBJECT_HEADER #define SERVEROBJECT_HEADER #include "common_irrlicht.h" #include "activeobject.h" +#include "mapnode.h" #include "utility.h" #define MOB_PASSIVE 0 @@ -102,15 +109,13 @@ public: Item that the player gets when this object is picked up. If NULL, object cannot be picked up. */ - virtual InventoryItem* createPickedUpItem(){return NULL;} + virtual InventoryItem* createPickedUpItem(content_t punch_item) {return NULL;} /* If the object doesn't return an item, this will be called. Return value is tool wear. */ - virtual u16 punch(const std::string &toolname, v3f dir, - const std::string &playername) - {return 0;} + virtual u16 punch(content_t punch_item, v3f dir, const std::string &playername) {return 0;} /* */