本文整理汇总了C++中ItemStack函数的典型用法代码示例。如果您正苦于以下问题:C++ ItemStack函数的具体用法?C++ ItemStack怎么用?C++ ItemStack使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ItemStack函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: craftToolRepair
static ItemStack craftToolRepair(
const ItemStack &item1,
const ItemStack &item2,
float additional_wear,
IGameDef *gamedef)
{
IItemDefManager *idef = gamedef->idef();
if(item1.count != 1 || item2.count != 1 || item1.name != item2.name
|| idef->get(item1.name).type != ITEM_TOOL
|| idef->get(item2.name).type != ITEM_TOOL)
{
// Failure
return ItemStack();
}
s32 item1_uses = 65536 - (u32) item1.wear;
s32 item2_uses = 65536 - (u32) item2.wear;
s32 new_uses = item1_uses + item2_uses;
s32 new_wear = 65536 - new_uses + floor(additional_wear * 65536 + 0.5);
if(new_wear >= 65536)
return ItemStack();
if(new_wear < 0)
new_wear = 0;
ItemStack repaired = item1;
repaired.wear = new_wear;
return repaired;
}
开发者ID:AMDmi3,项目名称:minetest,代码行数:28,代码来源:craftdef.cpp
示例2: ItemStack
void Gravel::onBreak(World &world, Block b, BlockIterator bi, WorldLockManager &lock_manager, Item &tool) const
{
if(isMatchingTool(tool))
{
if(std::uniform_int_distribution<int>(0, 9)(world.getRandomGenerator()) <= 0)
ItemDescriptor::addToWorld(world, lock_manager, ItemStack(Item(Items::builtin::Flint::descriptor())), bi.position() + VectorF(0.5));
else
ItemDescriptor::addToWorld(world, lock_manager, ItemStack(Item(Items::builtin::Gravel::descriptor())), bi.position() + VectorF(0.5));
}
handleToolDamage(tool);
}
开发者ID:guijun,项目名称:voxels-0.7,代码行数:11,代码来源:sand.cpp
示例3: while
/**
* Insert item into first available carried slot, preferably in the optionnal specified slot
* Returns an ItemStack containing anything that couldn't fit
*
* @param ItemStack Stack of items
* @param slot Slot number where it will try to store the item
*/
ItemStack ItemStorage::add( ItemStack stack, int slot) {
if (!stack.empty()) {
if (items->items.empty() || stack.item <= 0 || static_cast<unsigned>(stack.item) > items->items.size()-1) {
items->addUnknownItem(stack.item);
}
int max_quantity = items->items[stack.item].max_quantity;
if (slot > -1) {
// a slot is specified
if (storage[slot].item != 0 && storage[slot].item != stack.item) {
// the proposed slot isn't available
slot = -1;
}
}
else {
// first search of stack to complete if the item is stackable
int i = 0;
while (max_quantity > 1 && slot == -1 && i < slot_number) {
if (storage[i].item == stack.item && storage[i].quantity < max_quantity) {
slot = i;
}
i++;
}
// then an empty slot
i = 0;
while (slot == -1 && i < slot_number) {
if (storage[i].empty()) {
slot = i;
}
i++;
}
}
if (slot != -1) {
// Add
int quantity_added = std::min( stack.quantity, max_quantity - storage[slot].quantity);
storage[slot].item = stack.item;
storage[slot].quantity += quantity_added;
stack.quantity -= quantity_added;
// Add back the remaining, recursivly, until there's no more left to add or we run out of space.
if (stack.quantity > 0) {
return add(stack);
}
// everything added successfully, so return an empty ItemStack
return ItemStack();
}
else {
// Returns an ItemStack containing the remaining quantity if we run out of space.
// This stack will likely be dropped on the ground
return stack;
}
}
return ItemStack();
}
开发者ID:Jeffry84,项目名称:flare-engine,代码行数:60,代码来源:ItemStorage.cpp
示例4: read_item
ItemStack read_item(lua_State *L, int index)
{
if(index < 0)
index = lua_gettop(L) + 1 + index;
if(lua_isnil(L, index))
{
return ItemStack();
}
else if(lua_isuserdata(L, index))
{
// Convert from LuaItemStack
LuaItemStack *o = LuaItemStack::checkobject(L, index);
return o->getItem();
}
else if(lua_isstring(L, index))
{
// Convert from itemstring
std::string itemstring = lua_tostring(L, index);
IItemDefManager *idef = get_server(L)->idef();
try
{
ItemStack item;
item.deSerialize(itemstring, idef);
return item;
}
catch(SerializationError &e)
{
infostream<<"WARNING: unable to create item from itemstring"
<<": "<<itemstring<<std::endl;
return ItemStack();
}
}
else if(lua_istable(L, index))
{
// Convert from table
IItemDefManager *idef = get_server(L)->idef();
std::string name = getstringfield_default(L, index, "name", "");
int count = getintfield_default(L, index, "count", 1);
int wear = getintfield_default(L, index, "wear", 0);
std::string metadata = getstringfield_default(L, index, "metadata", "");
return ItemStack(name, count, wear, metadata, idef);
}
else
{
throw LuaError(L, "Expecting itemstack, itemstring, table or nil");
}
}
开发者ID:hexafraction,项目名称:minetest-debug-testing,代码行数:48,代码来源:scriptapi_item.cpp
示例5: ItemStack
void Torch::onReplace(World &world, Block b, BlockIterator bi, WorldLockManager &lock_manager) const
{
ItemDescriptor::addToWorld(world,
lock_manager,
ItemStack(Item(Items::builtin::Torch::descriptor())),
bi.position() + VectorF(0.5));
}
开发者ID:programmerjake,项目名称:voxels-0.7,代码行数:7,代码来源:torch.cpp
示例6: ItemStack
void IDropAction::clientApply(InventoryManager *mgr, IGameDef *gamedef)
{
// Optional InventoryAction operation that is run on the client
// to make lag less apparent.
Inventory *inv_from = mgr->getInventory(from_inv);
if(!inv_from)
return;
InventoryLocation current_player;
current_player.setCurrentPlayer();
Inventory *inv_player = mgr->getInventory(current_player);
if(inv_from != inv_player)
return;
InventoryList *list_from = inv_from->getList(from_list);
if(!list_from)
return;
if(count == 0)
list_from->changeItem(from_i, ItemStack());
else
list_from->takeItem(from_i, count);
mgr->setInventoryModified(from_inv);
}
开发者ID:BlazingGamer,项目名称:InfinityCraft,代码行数:26,代码来源:inventorymanager.cpp
示例7: ItemStack
void DiamondOre::onBreak(World &world, Block b, BlockIterator bi, WorldLockManager &lock_manager, Item &tool) const
{
if(isMatchingTool(tool))
{
ItemDescriptor::addToWorld(world, lock_manager, ItemStack(Item(Items::builtin::Diamond::descriptor())), bi.position() + VectorF(0.5));
}
handleToolDamage(tool);
}
开发者ID:guijun,项目名称:voxels-0.7,代码行数:8,代码来源:ores.cpp
示例8: ItemStack
void Grass::onBreak(
World &world, Block b, BlockIterator bi, WorldLockManager &lock_manager, Item &tool) const
{
ItemDescriptor::addToWorld(world,
lock_manager,
ItemStack(Item(Items::builtin::Dirt::descriptor())),
bi.position() + VectorF(0.5));
handleToolDamage(tool);
}
开发者ID:programmerjake,项目名称:voxels-0.7,代码行数:9,代码来源:grass.cpp
示例9: getInventory
ItemStack ServerActiveObject::getWieldedItem() const
{
const Inventory *inv = getInventory();
if(inv)
{
const InventoryList *list = inv->getList(getWieldList());
if(list && (getWieldIndex() < (s32)list->getSize()))
return list->getItem(getWieldIndex());
}
return ItemStack();
}
开发者ID:cyisfor,项目名称:freeminer,代码行数:11,代码来源:serverobject.cpp
示例10: trim
void Player::deSerialize(std::istream &is, std::string playername)
{
Settings args;
for(;;)
{
if(is.eof())
throw SerializationError
(("Player::deSerialize(): PlayerArgsEnd of player \"" + playername + "\" not found").c_str());
std::string line;
std::getline(is, line);
std::string trimmedline = trim(line);
if(trimmedline == "PlayerArgsEnd")
break;
args.parseConfigLine(line);
}
//args.getS32("version"); // Version field value not used
std::string name = args.get("name");
updateName(name.c_str());
setPitch(args.getFloat("pitch"));
setYaw(args.getFloat("yaw"));
setPosition(args.getV3F("position"));
try{
hp = args.getS32("hp");
}catch(SettingNotFoundException &e){
hp = 20;
}
try{
m_breath = args.getS32("breath");
}catch(SettingNotFoundException &e){
m_breath = 11;
}
inventory.deSerialize(is);
if(inventory.getList("craftpreview") == NULL)
{
// Convert players without craftpreview
inventory.addList("craftpreview", 1);
bool craftresult_is_preview = true;
if(args.exists("craftresult_is_preview"))
craftresult_is_preview = args.getBool("craftresult_is_preview");
if(craftresult_is_preview)
{
// Clear craftresult
inventory.getList("craftresult")->changeItem(0, ItemStack());
}
}
// Set m_last_*
checkModified();
}
开发者ID:Belugion,项目名称:minetest,代码行数:54,代码来源:player.cpp
示例11: craftGetItems
// convert a list of item names, to ItemStacks.
static std::vector<ItemStack> craftGetItems(
const std::vector<std::string> &items, IGameDef *gamedef)
{
std::vector<ItemStack> result;
for(std::vector<std::string>::const_iterator
i = items.begin();
i != items.end(); i++)
{
result.push_back(ItemStack(std::string(*i),(u16)1,(u16)0,"",gamedef->getItemDefManager()));
}
return result;
}
开发者ID:AMDmi3,项目名称:minetest,代码行数:13,代码来源:craftdef.cpp
示例12: SerializationError
void RemotePlayer::deSerialize(std::istream &is, const std::string &playername,
PlayerSAO *sao)
{
Settings args;
if (!args.parseConfigLines(is, "PlayerArgsEnd")) {
throw SerializationError("PlayerArgsEnd of player " + playername + " not found!");
}
m_dirty = true;
//args.getS32("version"); // Version field value not used
std::string name = args.get("name");
strlcpy(m_name, name.c_str(), PLAYERNAME_SIZE);
if (sao) {
try {
sao->setHPRaw(args.getS32("hp"));
} catch(SettingNotFoundException &e) {
sao->setHPRaw(PLAYER_MAX_HP);
}
try {
sao->setBasePosition(args.getV3F("position"));
} catch (SettingNotFoundException &e) {}
try {
sao->setPitch(args.getFloat("pitch"));
} catch (SettingNotFoundException &e) {}
try {
sao->setYaw(args.getFloat("yaw"));
} catch (SettingNotFoundException &e) {}
try {
sao->setBreath(args.getS32("breath"));
} catch (SettingNotFoundException &e) {}
}
inventory.deSerialize(is);
if (inventory.getList("craftpreview") == NULL) {
// Convert players without craftpreview
inventory.addList("craftpreview", 1);
bool craftresult_is_preview = true;
if(args.exists("craftresult_is_preview"))
craftresult_is_preview = args.getBool("craftresult_is_preview");
if(craftresult_is_preview)
{
// Clear craftresult
inventory.getList("craftresult")->changeItem(0, ItemStack());
}
}
}
开发者ID:Bremaweb,项目名称:minetest,代码行数:53,代码来源:remoteplayer.cpp
示例13: checkobject
// get_wielded_item(self)
int ObjectRef::l_get_wielded_item(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
ServerActiveObject *co = getobject(ref);
if (co == NULL) {
// Empty ItemStack
LuaItemStack::create(L, ItemStack());
return 1;
}
// Do it
LuaItemStack::create(L, co->getWieldedItem());
return 1;
}
开发者ID:rubenwardy,项目名称:minetest,代码行数:15,代码来源:l_object.cpp
示例14: getstringfield_default
// get_craft_result(input)
int ModApiCraft::l_get_craft_result(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
int input_i = 1;
std::string method_s = getstringfield_default(L, input_i, "method", "normal");
enum CraftMethod method = (CraftMethod)getenumfield(L, input_i, "method",
es_CraftMethod, CRAFT_METHOD_NORMAL);
int width = 1;
lua_getfield(L, input_i, "width");
if(lua_isnumber(L, -1))
width = luaL_checkinteger(L, -1);
lua_pop(L, 1);
lua_getfield(L, input_i, "items");
std::vector<ItemStack> items = read_items(L, -1,getServer(L));
lua_pop(L, 1); // items
IGameDef *gdef = getServer(L);
ICraftDefManager *cdef = gdef->cdef();
CraftInput input(method, width, items);
CraftOutput output;
std::vector<ItemStack> output_replacements;
bool got = cdef->getCraftResult(input, output, output_replacements, true, gdef);
lua_newtable(L); // output table
if (got) {
ItemStack item;
item.deSerialize(output.item, gdef->idef());
LuaItemStack::create(L, item);
lua_setfield(L, -2, "item");
setintfield(L, -1, "time", output.time);
push_items(L, output_replacements);
lua_setfield(L, -2, "replacements");
} else {
LuaItemStack::create(L, ItemStack());
lua_setfield(L, -2, "item");
setintfield(L, -1, "time", 0);
lua_newtable(L);
lua_setfield(L, -2, "replacements");
}
lua_newtable(L); // decremented input table
lua_pushstring(L, method_s.c_str());
lua_setfield(L, -2, "method");
lua_pushinteger(L, width);
lua_setfield(L, -2, "width");
push_items(L, input.items);
lua_setfield(L, -2, "items");
return 2;
}
开发者ID:Mab879,项目名称:freeminer,代码行数:49,代码来源:l_craft.cpp
示例15: getClient
int ModApiClient::l_get_wielded_item(lua_State *L)
{
Client *client = getClient(L);
Inventory local_inventory(client->idef());
client->getLocalInventory(local_inventory);
InventoryList *mlist = local_inventory.getList("main");
if (mlist && client->getPlayerItem() < mlist->getSize()) {
LuaItemStack::create(L, mlist->getItem(client->getPlayerItem()));
} else {
LuaItemStack::create(L, ItemStack());
}
return 1;
}
开发者ID:juhdanad,项目名称:minetest,代码行数:16,代码来源:l_client.cpp
示例16: checkobject
// remove_item(self, listname, itemstack or itemstring or table or nil) -> itemstack
// Returns the items that were actually removed
int InvRef::l_remove_item(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
InvRef *ref = checkobject(L, 1);
const char *listname = luaL_checkstring(L, 2);
ItemStack item = read_item(L, 3, getServer(L)->idef());
InventoryList *list = getlist(L, ref, listname);
if(list){
ItemStack removed = list->removeItem(item);
if(!removed.empty())
reportInventoryChange(L, ref);
LuaItemStack::create(L, removed);
} else {
LuaItemStack::create(L, ItemStack());
}
return 1;
}
开发者ID:4Evergreen4,项目名称:minetest,代码行数:19,代码来源:l_inventory.cpp
示例17: createItemStack
ItemStack createItemStack()
{
try{
IItemDefManager *idef = m_env->getGameDef()->idef();
ItemStack item;
item.deSerialize(m_itemstring, idef);
infostream<<__FUNCTION_NAME<<": m_itemstring=\""<<m_itemstring
<<"\" -> item=\""<<item.getItemString()<<"\""
<<std::endl;
return item;
}
catch(SerializationError &e)
{
infostream<<__FUNCTION_NAME<<": serialization error: "
<<"m_itemstring=\""<<m_itemstring<<"\""<<std::endl;
return ItemStack();
}
}
开发者ID:Lejufe,项目名称:minetest,代码行数:18,代码来源:content_sao.cpp
示例18: SerializationError
void Player::deSerialize(std::istream &is, std::string playername)
{
Settings args;
if (!args.parseConfigLines(is, "PlayerArgsEnd")) {
throw SerializationError("PlayerArgsEnd of player " +
playername + " not found!");
}
//args.getS32("version"); // Version field value not used
std::string name = args.get("name");
m_name = name;
setPitch(args.getFloat("pitch"));
setYaw(args.getFloat("yaw"));
setPosition(args.getV3F("position"));
try{
hp = args.getS32("hp");
}catch(SettingNotFoundException &e) {
hp = 20;
}
try{
m_breath = args.getS32("breath");
}catch(SettingNotFoundException &e) {
m_breath = 11;
}
inventory.deSerialize(is);
if(inventory.getList("craftpreview") == NULL) {
// Convert players without craftpreview
inventory.addList("craftpreview", 1);
bool craftresult_is_preview = true;
if(args.exists("craftresult_is_preview"))
craftresult_is_preview = args.getBool("craftresult_is_preview");
if(craftresult_is_preview)
{
// Clear craftresult
inventory.getList("craftresult")->changeItem(0, ItemStack());
}
}
}
开发者ID:gourytch,项目名称:freeminer,代码行数:42,代码来源:player.cpp
示例19: createClientCachedDirect
ClientCached* createClientCachedDirect(const std::string &name,
Client *client) const
{
infostream<<"Lazily creating item texture and mesh for \""
<<name<<"\""<<std::endl;
// This is not thread-safe
sanity_check(std::this_thread::get_id() == m_main_thread);
// Skip if already in cache
ClientCached *cc = NULL;
m_clientcached.get(name, &cc);
if(cc)
return cc;
ITextureSource *tsrc = client->getTextureSource();
const ItemDefinition &def = get(name);
// Create new ClientCached
cc = new ClientCached();
// Create an inventory texture
cc->inventory_texture = NULL;
if (!def.inventory_image.empty())
cc->inventory_texture = tsrc->getTexture(def.inventory_image);
ItemStack item = ItemStack();
item.name = def.name;
getItemMesh(client, item, &(cc->wield_mesh));
cc->palette = tsrc->getPalette(def.palette_image);
// Put in cache
m_clientcached.set(name, cc);
return cc;
}
开发者ID:EXio4,项目名称:minetest,代码行数:38,代码来源:itemdef.cpp
示例20: createClientCachedDirect
ClientCached* createClientCachedDirect(const std::string &name,
IGameDef *gamedef) const
{
infostream<<"Lazily creating item texture and mesh for \""
<<name<<"\""<<std::endl;
// This is not thread-safe
sanity_check(thr_is_current_thread(m_main_thread));
// Skip if already in cache
ClientCached *cc = NULL;
m_clientcached.get(name, &cc);
if(cc)
return cc;
ITextureSource *tsrc = gamedef->getTextureSource();
const ItemDefinition &def = get(name);
// Create new ClientCached
cc = new ClientCached();
// Create an inventory texture
cc->inventory_texture = NULL;
if(def.inventory_image != "")
cc->inventory_texture = tsrc->getTexture(def.inventory_image);
ItemStack item = ItemStack();
item.name = def.name;
scene::IMesh *mesh = getItemMesh(gamedef, item);
cc->wield_mesh = mesh;
// Put in cache
m_clientcached.set(name, cc);
return cc;
}
开发者ID:grigoriis,项目名称:MultiCraft,代码行数:37,代码来源:itemdef.cpp
注:本文中的ItemStack函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论