-- - select_horiz_by_yawpitch=false)
-- - ^ Select sprite from spritesheet with optional animation and DM-style
-- - texture selection based on yaw relative to camera
+-- - set_armor_groups({group1=rating, group2=rating, ...})
-- - get_entity_name() (DEPRECATED: Will be removed in a future version)
-- - get_luaentity()
-- Player-only: (no-op for other objects)
self.object:setvelocity({x=0, y=4, z=0})
self.object:setacceleration({x=0, y=-10, z=0})
self.object:settexturemod("^[brighten")
+ self.object:set_armor_groups({foo=1,bar=2})
end
-- Called periodically
if self.health <= 0 then
self.object:remove()
hitter:get_inventory():add_item("main", "experimental:tnt")
- hitter:set_hp(hitter:get_hp() - 1)
+ --hitter:set_hp(hitter:get_hp() - 1)
end
end
int m_anim_num_frames;
float m_anim_framelength;
float m_anim_timer;
+ ItemGroupList m_armor_groups;
public:
LuaEntityCAO(IGameDef *gamedef, ClientEnvironment *env):
m_hp = result_hp;
// TODO: Execute defined fast response
}
+ else if(cmd == LUAENTITY_CMD_UPDATE_ARMOR_GROUPS)
+ {
+ m_armor_groups.clear();
+ int armor_groups_size = readU16(is);
+ for(int i=0; i<armor_groups_size; i++){
+ std::string name = deSerializeString(is);
+ int rating = readS16(is);
+ m_armor_groups[name] = rating;
+ }
+ }
}
bool directReportPunch(v3f dir, const ItemStack *punchitem=NULL,
float time_from_last_punch=1000000)
{
- // TODO: Transfer this from the server
- ItemGroupList m_armor_groups;
-
assert(punchitem);
const ToolCapabilities *toolcap =
&punchitem->getToolCapabilities(m_gamedef->idef());
if(result.did_punch)
{
- // TODO: Decrease hp by
if(result.damage < m_hp)
m_hp -= result.damage;
else
return false;
}
+
+ std::string debugInfoText()
+ {
+ std::ostringstream os(std::ios::binary);
+ os<<"LuaEntityCAO \n";
+ os<<"armor={";
+ for(ItemGroupList::const_iterator i = m_armor_groups.begin();
+ i != m_armor_groups.end(); i++){
+ os<<i->first<<"="<<i->second<<", ";
+ }
+ os<<"}";
+ return os.str();
+ }
};
// Prototype
m_last_sent_position(0,0,0),
m_last_sent_velocity(0,0,0),
m_last_sent_position_timer(0),
- m_last_sent_move_precision(0)
+ m_last_sent_move_precision(0),
+ m_armor_groups_sent(false)
{
// Only register type if no environment supplied
if(env == NULL){
fabs(m_yaw - m_last_sent_yaw) > 1.0){
sendPosition(true, false);
}
+
+ if(m_armor_groups_sent == false){
+ m_armor_groups_sent = true;
+ std::ostringstream os(std::ios::binary);
+ writeU8(os, LUAENTITY_CMD_UPDATE_ARMOR_GROUPS);
+ writeU16(os, m_armor_groups.size());
+ for(ItemGroupList::const_iterator i = m_armor_groups.begin();
+ i != m_armor_groups.end(); i++){
+ os<<serializeString(i->first);
+ writeS16(os, i->second);
+ }
+ // create message and add to list
+ ActiveObjectMessage aom(getId(), true, os.str());
+ m_messages_out.push_back(aom);
+ }
}
std::string LuaEntitySAO::getClientInitializationData()
return m_init_name;
}
+void LuaEntitySAO::setArmorGroups(const ItemGroupList &armor_groups)
+{
+ m_armor_groups = armor_groups;
+ m_armor_groups_sent = false;
+}
+
void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end)
{
m_last_sent_move_precision = m_base_position.getDistanceFrom(
void setSprite(v2s16 p, int num_frames, float framelength,
bool select_horiz_by_yawpitch);
std::string getName();
+ void setArmorGroups(const ItemGroupList &armor_groups);
private:
void sendPosition(bool do_interpolate, bool is_movement_end);
v3f m_last_sent_velocity;
float m_last_sent_position_timer;
float m_last_sent_move_precision;
+ bool m_armor_groups_sent;
};
#endif
#define LUAENTITY_CMD_SET_TEXTURE_MOD 1
#define LUAENTITY_CMD_SET_SPRITE 2
#define LUAENTITY_CMD_PUNCHED 3
+#define LUAENTITY_CMD_UPDATE_ARMOR_GROUPS 4
#endif
return 0;
}
+ // set_armor_groups(self, groups)
+ static int l_set_armor_groups(lua_State *L)
+ {
+ ObjectRef *ref = checkobject(L, 1);
+ LuaEntitySAO *co = getluaobject(ref);
+ if(co == NULL) return 0;
+ // Do it
+ ItemGroupList groups;
+ read_groups(L, 2, groups);
+ co->setArmorGroups(groups);
+ return 0;
+ }
+
// DEPRECATED
// get_entity_name(self)
static int l_get_entity_name(lua_State *L)
method(ObjectRef, getyaw),
method(ObjectRef, settexturemod),
method(ObjectRef, setsprite),
+ method(ObjectRef, set_armor_groups),
method(ObjectRef, get_entity_name),
method(ObjectRef, get_luaentity),
// Player-only