Don't generate or send if not in sight
*/
- if(isBlockInSight(p, camera_pos, camera_dir, 10000*BS) == false)
+ if(isBlockInSight(p, camera_pos, camera_dir, M_PI, 10000*BS) == false)
{
continue;
}
u16 command
u16 number of player positions
for each player:
+ u16 peer_id
v3s32 position*100
v3s32 speed*100
s32 pitch*100
m_uptime.set(m_uptime.get() + dtime);
}
+ {
+ // Process connection's timeouts
+ JMutexAutoLock lock2(m_con_mutex);
+ ScopeProfiler sp(&g_profiler, "Server: connection timeout processing");
+ m_con.RunTimeouts(dtime);
+ }
+
+ {
+ // This has to be called so that the client list gets synced
+ // with the peer list of the connection
+ ScopeProfiler sp(&g_profiler, "Server: peer change handling");
+ handlePeerChanges();
+ }
+
/*
Update m_time_of_day and overall game time
*/
}
}
- {
- // Process connection's timeouts
- JMutexAutoLock lock2(m_con_mutex);
- ScopeProfiler sp(&g_profiler, "Server: connection timeout processing");
- m_con.RunTimeouts(dtime);
- }
-
- {
- // This has to be called so that the client list gets synced
- // with the peer list of the connection
- ScopeProfiler sp(&g_profiler, "Server: peer change handling");
- handlePeerChanges();
- }
-
{
JMutexAutoLock lock(m_env_mutex);
// Step environment
}
else if(event->type == MEET_OTHER)
{
+ dstream<<"Server: MEET_OTHER"<<std::endl;
prof.add("MEET_OTHER", 1);
- dstream<<"WARNING: Server: MEET_OTHER not implemented"
- <<std::endl;
+ for(core::map<v3s16, bool>::Iterator
+ i = event->modified_blocks.getIterator();
+ i.atEnd()==false; i++)
+ {
+ v3s16 p = i.getNode()->getKey();
+ setBlockNotSent(p);
+ }
}
else
{
// drop player if is ip is banned
if(m_banmanager.isIpBanned(peer->address.serializeString())){
SendAccessDenied(m_con, peer_id,
- L"Your ip is banned!");
+ L"Your ip is banned. Banned name was "
+ +narrow_to_wide(m_banmanager.getBanName(
+ peer->address.serializeString())));
m_con.deletePeer(peer_id, false);
return;
}
if(g_settings.getBool("creative_mode") == false)
{
// Skip if inventory has no free space
- if(ilist->getUsedSlots() == ilist->getSize())
+ if(ilist->roomForItem(item) == false)
{
dout_server<<"Player inventory has no free space"<<std::endl;
return;
return;
}
+ /*
+ If in creative mode, item dropping is disabled unless
+ player has build privileges
+ */
+ if(g_settings.getBool("creative_mode") &&
+ (getPlayerPrivs(player) & PRIV_BUILD) == 0)
+ {
+ derr_server<<"Not allowing player to drop item: "
+ "creative mode and no build privs"<<std::endl;
+ return;
+ }
+
dout_server<<"Placing a miscellaneous item on map"
<<std::endl;
mlist->addItem(item1);
}
}
+ // Disallow moving items if not allowed to build
+ else if((getPlayerPrivs(player) & PRIV_BUILD) == 0)
+ return;
}
if(disable_action == false)
u64 privs = getPlayerPrivs(player);
// Parse commands
- std::wstring commandprefix = L"/#";
- if(message.substr(0, commandprefix.size()) == commandprefix)
+ if(message[0] == L'/')
{
- line += L"Server: ";
+ size_t strip_size = 1;
+ if (message[1] == L'#') // support old-style commans
+ ++strip_size;
+ message = message.substr(strip_size);
- message = message.substr(commandprefix.size());
-
WStrfnd f1(message);
f1.next(L" "); // Skip over /#whatever
std::wstring paramstring = f1.next(L"");
player,
privs);
- line += processServerCommand(ctx);
- send_to_sender = ctx->flags & 1;
- send_to_others = ctx->flags & 2;
+ std::wstring reply(processServerCommand(ctx));
+ send_to_sender = ctx->flags & SEND_TO_SENDER;
+ send_to_others = ctx->flags & SEND_TO_OTHERS;
+
+ if (ctx->flags & SEND_NO_PREFIX)
+ line += reply;
+ else
+ line += L"Server: " + reply;
+
delete ctx;
}