forked from oerkki/voxelands
cooking redo pt3
This commit is contained in:
parent
3ce33887a2
commit
f83b2efc2c
|
@ -837,7 +837,7 @@ CrusherNodeMetadata::CrusherNodeMetadata()
|
||||||
m_inventory->addList("fuel", 1);
|
m_inventory->addList("fuel", 1);
|
||||||
m_inventory->addList("src", 1);
|
m_inventory->addList("src", 1);
|
||||||
m_inventory->addList("main", 4);
|
m_inventory->addList("main", 4);
|
||||||
m_inventory->addList("upgrades", 2);
|
m_inventory->addList("upgrades", 3);
|
||||||
|
|
||||||
m_active_timer = 0.0;
|
m_active_timer = 0.0;
|
||||||
m_burn_counter = 0.0;
|
m_burn_counter = 0.0;
|
||||||
|
@ -925,8 +925,8 @@ NodeMetadata* CrusherNodeMetadata::create(std::istream &is)
|
||||||
d->m_inventory = new Inventory();
|
d->m_inventory = new Inventory();
|
||||||
d->m_inventory->addList("fuel", 1);
|
d->m_inventory->addList("fuel", 1);
|
||||||
d->m_inventory->addList("src", 1);
|
d->m_inventory->addList("src", 1);
|
||||||
d->m_inventory->addList("main", 18);
|
d->m_inventory->addList("main", 16);
|
||||||
d->m_inventory->addList("upgrades", 2);
|
d->m_inventory->addList("upgrades", 3);
|
||||||
}
|
}
|
||||||
d->m_inventory->deSerialize(is);
|
d->m_inventory->deSerialize(is);
|
||||||
d->inventoryModified();
|
d->inventoryModified();
|
||||||
|
@ -955,7 +955,7 @@ std::wstring CrusherNodeMetadata::infoText()
|
||||||
if (m_is_locked) {
|
if (m_is_locked) {
|
||||||
snprintf(buff, 256, gettext("Locked Crusher owned by '%s'"), m_owner.c_str());
|
snprintf(buff, 256, gettext("Locked Crusher owned by '%s'"), m_owner.c_str());
|
||||||
}else if (m_is_exo) {
|
}else if (m_is_exo) {
|
||||||
snprintf(buff, 256, gettext("Exo Crusher"));
|
snprintf(buff, 256, gettext("Exo Crusher owned by '%s'"), m_owner.c_str());
|
||||||
}else{
|
}else{
|
||||||
snprintf(buff, 256, gettext("Crusher"));
|
snprintf(buff, 256, gettext("Crusher"));
|
||||||
}
|
}
|
||||||
|
@ -975,11 +975,11 @@ bool CrusherNodeMetadata::nodeRemovalDisabled()
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
if (list[i] == NULL)
|
if (list[i] == NULL)
|
||||||
continue;
|
continue;
|
||||||
if (list[i]->getUsedSlots() == 0)
|
if (list[i]->getUsedSlots() != 0)
|
||||||
continue;
|
continue;
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
void CrusherNodeMetadata::inventoryModified()
|
void CrusherNodeMetadata::inventoryModified()
|
||||||
|
@ -1009,20 +1009,21 @@ void CrusherNodeMetadata::inventoryModified()
|
||||||
if (m_is_exo)
|
if (m_is_exo)
|
||||||
continue;
|
continue;
|
||||||
inv = new Inventory();
|
inv = new Inventory();
|
||||||
inv->addList("upgrades", 2);
|
inv->addList("upgrades", 3);
|
||||||
inv->addList("main", 36);
|
inv->addList("main", 16);
|
||||||
il = inv->getList("upgrades");
|
il = inv->getList("upgrades");
|
||||||
im = inv->getList("main");
|
im = inv->getList("main");
|
||||||
if (!il || !im) {
|
if (!il || !im) {
|
||||||
delete inv;
|
delete inv;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (k=0; k<2; k++) {
|
vlprintf(CN_INFO,"inv size: '%u' '%u'",l->getSize(),m->getSize());
|
||||||
|
for (k=0; k<3; k++) {
|
||||||
itm = l->changeItem(k,NULL);
|
itm = l->changeItem(k,NULL);
|
||||||
if (itm)
|
if (itm)
|
||||||
il->addItem(k,itm);
|
il->addItem(k,itm);
|
||||||
}
|
}
|
||||||
for (k=0; k<18; k++) {
|
for (k=0; k<4; k++) {
|
||||||
itm = m->changeItem(k,NULL);
|
itm = m->changeItem(k,NULL);
|
||||||
if (itm)
|
if (itm)
|
||||||
im->addItem(k,itm);
|
im->addItem(k,itm);
|
||||||
|
@ -1063,22 +1064,22 @@ void CrusherNodeMetadata::inventoryModified()
|
||||||
|
|
||||||
if (m_is_expanded && !b[0]) {
|
if (m_is_expanded && !b[0]) {
|
||||||
inv = new Inventory();
|
inv = new Inventory();
|
||||||
inv->addList("upgrades", 2);
|
inv->addList("upgrades", 3);
|
||||||
inv->addList("main", 18);
|
inv->addList("main", 4);
|
||||||
il = inv->getList("upgrades");
|
il = inv->getList("upgrades");
|
||||||
im = inv->getList("main");
|
im = inv->getList("main");
|
||||||
if (!il || !im) {
|
if (!il || !im) {
|
||||||
delete inv;
|
delete inv;
|
||||||
}else{
|
}else{
|
||||||
for (k=0; k<2; k++) {
|
for (k=0; k<3; k++) {
|
||||||
itm = l->changeItem(k,NULL);
|
itm = l->changeItem(k,NULL);
|
||||||
if (itm)
|
if (itm)
|
||||||
il->addItem(k,itm);
|
il->addItem(k,itm);
|
||||||
}
|
}
|
||||||
for (k=0; k<36; k++) {
|
for (k=0; k<16; k++) {
|
||||||
itm = m->changeItem(k,NULL);
|
itm = m->changeItem(k,NULL);
|
||||||
if (itm) {
|
if (itm) {
|
||||||
if (k > 17) {
|
if (k > 3) {
|
||||||
im->addItem(itm);
|
im->addItem(itm);
|
||||||
}else{
|
}else{
|
||||||
im->addItem(k,itm);
|
im->addItem(k,itm);
|
||||||
|
@ -1122,15 +1123,16 @@ bool CrusherNodeMetadata::step(float dtime, v3s16 pos, ServerEnvironment *env)
|
||||||
InventoryItem *src_item;
|
InventoryItem *src_item;
|
||||||
InventoryList *fuel_list;
|
InventoryList *fuel_list;
|
||||||
InventoryItem *fuel_item;
|
InventoryItem *fuel_item;
|
||||||
|
Player *player = NULL;
|
||||||
|
|
||||||
if (dtime > 60.0)
|
if (dtime > 60.0)
|
||||||
vlprintf(CN_INFO,"Crusher stepping a long time (%f)",dtime);
|
vlprintf(CN_INFO,"Crusher stepping a long time (%f)",dtime);
|
||||||
|
|
||||||
if (m_is_exo) {
|
if (m_is_exo) {
|
||||||
Player *p = env->getPlayer(m_owner.c_str());
|
player = env->getPlayer(m_owner.c_str());
|
||||||
if (!p)
|
if (!player)
|
||||||
return false;
|
return false;
|
||||||
dst_list = p->inventory.getList("exo");
|
dst_list = player->inventory.getList("exo");
|
||||||
}else{
|
}else{
|
||||||
dst_list = m_inventory->getList("main");
|
dst_list = m_inventory->getList("main");
|
||||||
}
|
}
|
||||||
|
@ -1234,6 +1236,8 @@ bool CrusherNodeMetadata::step(float dtime, v3s16 pos, ServerEnvironment *env)
|
||||||
dst_list->addItem(crushresult);
|
dst_list->addItem(crushresult);
|
||||||
src_list->decrementMaterials(1);
|
src_list->decrementMaterials(1);
|
||||||
changed = true;
|
changed = true;
|
||||||
|
if (m_is_exo && player)
|
||||||
|
player->inventory_modified = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1243,24 +1247,51 @@ bool CrusherNodeMetadata::step(float dtime, v3s16 pos, ServerEnvironment *env)
|
||||||
std::string CrusherNodeMetadata::getDrawSpecString(Player *player)
|
std::string CrusherNodeMetadata::getDrawSpecString(Player *player)
|
||||||
{
|
{
|
||||||
float cook_time;
|
float cook_time;
|
||||||
|
float v = 0;
|
||||||
|
|
||||||
if (m_cook_upgrade < 1.0)
|
if (m_cook_upgrade < 1.0)
|
||||||
m_cook_upgrade = 1.0;
|
m_cook_upgrade = 1.0;
|
||||||
cook_time = 4.0/m_cook_upgrade;
|
cook_time = 4.0/m_cook_upgrade;
|
||||||
if (cook_time < 0.1)
|
if (cook_time < 0.1)
|
||||||
cook_time = 0.1;
|
cook_time = 0.1;
|
||||||
|
if (m_burn_counter > 0.0 && m_burn_timer > 0.0)
|
||||||
|
v = ((100.0/cook_time)*m_burn_timer);
|
||||||
|
|
||||||
std::string spec("size[8,9]");
|
std::string spec("size[9,10]");
|
||||||
spec += "list[current_name;fuel;2,3;1,1;]";
|
|
||||||
spec += "ring[2,3;1;#FF0000;";
|
if (!m_is_exo) {
|
||||||
float v = 0;
|
InventoryList *l = m_inventory->getList("main");
|
||||||
if (m_burn_counter > 0.0 && m_cook_timer > 0.0)
|
if (m_is_expanded && l && l->getUsedSlots() > 4) {
|
||||||
v = 100.0-((100.0/cook_time)*m_cook_timer);
|
if (m_expanded_slot_id == 0) {
|
||||||
|
spec += "list[current_name;upgrades;1,0;2,1;1,2;]";
|
||||||
|
}else if (m_expanded_slot_id == 1) {
|
||||||
|
spec += "list[current_name;upgrades;0,0;1,1;0,1;]";
|
||||||
|
spec += "list[current_name;upgrades;2,0;1,1;2,1;]";
|
||||||
|
}else{
|
||||||
|
spec += "list[current_name;upgrades;0,0;2,1;0,2;]";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
spec += "list[current_name;upgrades;0,0;3,1;]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spec += "list[current_name;fuel;1.5,3.5;1,1;]";
|
||||||
|
spec += "ring[1.5,3.5;1;#FF0000;";
|
||||||
spec += itos((int)v);
|
spec += itos((int)v);
|
||||||
spec += "]";
|
spec += "]";
|
||||||
spec += "list[current_name;src;2,1;1,1;]";
|
spec += "list[current_name;src;1.5,1.5;1,1;]";
|
||||||
spec += "list[current_name;main;5,1;2,2;]";
|
|
||||||
spec += "list[current_player;main;0,5;8,4;]";
|
if (m_is_expanded) {
|
||||||
|
spec += "list[current_name;main;4,1;4,4;]";
|
||||||
|
}else if (m_is_exo) {
|
||||||
|
spec += "list[current_player;exo;3,1;6,3;]";
|
||||||
|
}else{
|
||||||
|
spec += "list[current_name;main;5,1.5;2,2;]";
|
||||||
|
}
|
||||||
|
|
||||||
|
spec += "list[current_player;main;0.5,5.8;8,1;0,8;]";
|
||||||
|
spec += "list[current_player;main;0.5,7;8,3;8,-1;]";
|
||||||
|
|
||||||
return spec;
|
return spec;
|
||||||
}
|
}
|
||||||
std::vector<NodeBox> CrusherNodeMetadata::getNodeBoxes(MapNode &n)
|
std::vector<NodeBox> CrusherNodeMetadata::getNodeBoxes(MapNode &n)
|
||||||
|
@ -1278,7 +1309,7 @@ std::vector<NodeBox> CrusherNodeMetadata::getNodeBoxes(MapNode &n)
|
||||||
}
|
}
|
||||||
std::string CrusherNodeMetadata::getOwner()
|
std::string CrusherNodeMetadata::getOwner()
|
||||||
{
|
{
|
||||||
if (m_is_locked)
|
if (m_is_locked || m_is_exo)
|
||||||
return m_owner;
|
return m_owner;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ Player::Player():
|
||||||
swimming_up(false),
|
swimming_up(false),
|
||||||
in_bed(false),
|
in_bed(false),
|
||||||
wake_timeout(0.0),
|
wake_timeout(0.0),
|
||||||
|
inventory_modified(true),
|
||||||
craftresult_is_preview(true),
|
craftresult_is_preview(true),
|
||||||
health(100),
|
health(100),
|
||||||
air(100),
|
air(100),
|
||||||
|
|
|
@ -238,6 +238,7 @@ public:
|
||||||
u8 light;
|
u8 light;
|
||||||
|
|
||||||
Inventory inventory;
|
Inventory inventory;
|
||||||
|
bool inventory_modified;
|
||||||
|
|
||||||
bool craftresult_is_preview;
|
bool craftresult_is_preview;
|
||||||
|
|
||||||
|
|
|
@ -857,6 +857,7 @@ Server::Server():
|
||||||
m_emergethread_trigger_timer = 0.0;
|
m_emergethread_trigger_timer = 0.0;
|
||||||
m_savemap_timer = 0.0;
|
m_savemap_timer = 0.0;
|
||||||
m_send_object_info_timer = 0.0;
|
m_send_object_info_timer = 0.0;
|
||||||
|
m_send_full_inventory_timer = 0.0;
|
||||||
|
|
||||||
m_env_mutex.Init();
|
m_env_mutex.Init();
|
||||||
m_con_mutex.Init();
|
m_con_mutex.Init();
|
||||||
|
@ -1186,33 +1187,6 @@ void Server::AsyncRunStep()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Periodically print some info
|
|
||||||
{
|
|
||||||
float &counter = m_print_info_timer;
|
|
||||||
counter += dtime;
|
|
||||||
if(counter >= 30.0)
|
|
||||||
{
|
|
||||||
counter = 0.0;
|
|
||||||
|
|
||||||
JMutexAutoLock lock2(m_con_mutex);
|
|
||||||
|
|
||||||
if(m_clients.size() != 0)
|
|
||||||
infostream<<"Players:"<<std::endl;
|
|
||||||
for(core::map<u16, RemoteClient*>::Iterator
|
|
||||||
i = m_clients.getIterator();
|
|
||||||
i.atEnd() == false; i++)
|
|
||||||
{
|
|
||||||
//u16 peer_id = i.getNode()->getKey();
|
|
||||||
RemoteClient *client = i.getNode()->getValue();
|
|
||||||
Player *player = m_env.getPlayer(client->peer_id);
|
|
||||||
if(player==NULL)
|
|
||||||
continue;
|
|
||||||
infostream<<"* "<<player->getName()<<"\t";
|
|
||||||
client->PrintInfo(infostream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Check added and deleted active objects
|
Check added and deleted active objects
|
||||||
*/
|
*/
|
||||||
|
@ -1227,6 +1201,12 @@ void Server::AsyncRunStep()
|
||||||
|
|
||||||
int16_t radius = config_get_int("world.server.mob.range");
|
int16_t radius = config_get_int("world.server.mob.range");
|
||||||
radius *= MAP_BLOCKSIZE;
|
radius *= MAP_BLOCKSIZE;
|
||||||
|
bool send_inventory = false;
|
||||||
|
m_send_full_inventory_timer += dtime;
|
||||||
|
if (m_send_full_inventory_timer >= 60.0) {
|
||||||
|
m_send_full_inventory_timer -= 60.0;
|
||||||
|
send_inventory = true;
|
||||||
|
}
|
||||||
|
|
||||||
for (core::map<u16, RemoteClient*>::Iterator i = m_clients.getIterator(); i.atEnd() == false; i++) {
|
for (core::map<u16, RemoteClient*>::Iterator i = m_clients.getIterator(); i.atEnd() == false; i++) {
|
||||||
RemoteClient *client = i.getNode()->getValue();
|
RemoteClient *client = i.getNode()->getValue();
|
||||||
|
@ -1242,6 +1222,11 @@ void Server::AsyncRunStep()
|
||||||
m_env.getRemovedActiveObjects(pos, radius, client->m_known_objects, removed_objects);
|
m_env.getRemovedActiveObjects(pos, radius, client->m_known_objects, removed_objects);
|
||||||
m_env.getAddedActiveObjects(pos, radius, client->m_known_objects, added_objects);
|
m_env.getAddedActiveObjects(pos, radius, client->m_known_objects, added_objects);
|
||||||
|
|
||||||
|
if (send_inventory || player->inventory_modified) {
|
||||||
|
player->inventory_modified = false;
|
||||||
|
SendInventory(client->peer_id,true);
|
||||||
|
}
|
||||||
|
|
||||||
// Ignore if nothing happened
|
// Ignore if nothing happened
|
||||||
if (removed_objects.size() == 0 && added_objects.size() == 0) {
|
if (removed_objects.size() == 0 && added_objects.size() == 0) {
|
||||||
//infostream<<"active objects: none changed"<<std::endl;
|
//infostream<<"active objects: none changed"<<std::endl;
|
||||||
|
@ -1591,7 +1576,7 @@ void Server::AsyncRunStep()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Trigger emergethread (it somehow gets to a non-triggered but
|
Trigger emergethread (it somehow gets to a non-triggered but
|
||||||
bysy state sometimes)
|
busy state sometimes)
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
float &counter = m_emergethread_trigger_timer;
|
float &counter = m_emergethread_trigger_timer;
|
||||||
|
|
|
@ -580,6 +580,7 @@ private:
|
||||||
float m_emergethread_trigger_timer;
|
float m_emergethread_trigger_timer;
|
||||||
float m_savemap_timer;
|
float m_savemap_timer;
|
||||||
float m_send_object_info_timer;
|
float m_send_object_info_timer;
|
||||||
|
float m_send_full_inventory_timer;
|
||||||
IntervalLimiter m_map_timer_and_unload_interval;
|
IntervalLimiter m_map_timer_and_unload_interval;
|
||||||
|
|
||||||
// NOTE: If connection and environment are both to be locked,
|
// NOTE: If connection and environment are both to be locked,
|
||||||
|
|
Loading…
Reference in New Issue