Math mapgen fix, ip show on connect, pathfinder segfault fix
authorproller <proller@github.com>
Sun, 23 Jun 2013 16:23:59 +0000 (20:23 +0400)
committerproller <proller@github.com>
Sun, 23 Jun 2013 16:35:16 +0000 (20:35 +0400)
src/mapgen_math.cpp
src/mapgen_math.h
src/mapgen_v7.cpp
src/mapgen_v7.h
src/pathfinder.cpp
src/server.cpp
src/socket.cpp

index 775d0523de32647f817d216a9c9bb925482b4171..a8a093a4a3462837649a9a429e651831e807df6a 100644 (file)
@@ -145,7 +145,7 @@ double sphere(double x, double y, double z, double d, int ITR = 1) {
 }
 
 
-//////////////////////// Mapgen Singlenode parameter read/write
+//////////////////////// Mapgen Math parameter read/write
 
 bool MapgenMathParams::readParams(Settings *settings) {
        //params = settings->getJson("mg_math");
@@ -171,6 +171,8 @@ void MapgenMathParams::writeParams(Settings *settings) {
 
 MapgenMath::MapgenMath(int mapgenid, MapgenMathParams *params_, EmergeManager *emerge) : MapgenV7(mapgenid, params_, emerge) {
        mg_params = params_;
+       this->lighting = 0;
+       this->ridges   = 0;
 
        Json::Value & params = mg_params->params;
        invert = params["invert"].empty() ? 1 : params["invert"].asBool(); //params["invert"].empty()?1:params["invert"].asBool();
@@ -238,7 +240,7 @@ MapgenMath::~MapgenMath() {
 
 void MapgenMath::generateTerrain() {
 
-       MapNode n_air(CONTENT_AIR), n_water_source(c_water_source, LIGHT_SUN);
+       MapNode n_air(CONTENT_AIR, LIGHT_SUN), n_water_source(c_water_source, LIGHT_SUN);
        MapNode n_stone(c_stone, LIGHT_SUN);
        u32 index = 0;
        v3s16 em = vm->m_area.getExtent();
@@ -263,6 +265,7 @@ void MapgenMath::generateTerrain() {
                                        if (vm->m_data[i].getContent() == CONTENT_IGNORE)
                                                vm->m_data[i] = (y > water_level + biome->filler_height) ?
                                                                MapNode(biome->c_filler) : n_stone;
+//                                             vm->m_data[i] = n_stone;
                                } else if (y <= water_level) {
                                        vm->m_data[i] = n_water_source;
                                } else {
index 070ebab616d4a1c5073b146b72a05a6c1783e666..3d3929c51a5949c7ec29f0c8ee306ee43e2d4f26 100644 (file)
@@ -42,8 +42,6 @@ class MapgenMath : public MapgenV7 {
                MapgenMath(int mapgenid, MapgenMathParams *mg_params, EmergeManager *emerge);
                ~MapgenMath();
 
-
-               //void makeChunk(BlockMakeData *data);
                void generateTerrain();
                int getGroundLevelAtPoint(v2s16 p);
 
index 301922be58d92ac6ed5c45216abc6fa91049f47f..870e7343e4f894781388b4cae3b2b70015a408dc 100644 (file)
@@ -76,7 +76,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenV7Params *params, EmergeManager *emerge)
 
        this->seed     = (int)params->seed;
        this->water_level = params->water_level;
-       this->flags   = params->flags;
+       this->flags    = params->flags;
+       this->lighting = 1;
+       this->ridges   = 1;
+
        this->csize   = v3s16(1, 1, 1) * params->chunksize * MAP_BLOCKSIZE;
        this->ystride = csize.X; //////fix this
 
@@ -183,7 +186,8 @@ void MapgenV7::makeChunk(BlockMakeData *data) {
        c_lava_source     = ndef->getId("mapgen_lava_source");
        
        generateTerrain();
-       carveRidges();
+       if (this->ridges)
+               carveRidges();
 
        if (flags & MG_CAVES)
                generateCaves(stone_surface_max_y);
@@ -211,7 +215,8 @@ void MapgenV7::makeChunk(BlockMakeData *data) {
        
        updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
        
-       calcLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
+       if (this->lighting)
+               calcLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
                                 node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE);
        //setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
        //                      node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF);
index 159a808ebcc081f38d1056ac3843aaaa9a13be33..3bba9938c3f0e4a7d7a1174b0268821335c3a534 100644 (file)
@@ -60,6 +60,8 @@ public:
        int ystride;
        v3s16 csize;
        u32 flags;
+       bool lighting;
+       bool ridges;
 
        u32 blockseed;
        v3s16 node_min;
index 0d1cfe476cf2567cbe8045f8d7a6d6656ca40832..bbda073624caf938a8ad1a025513f7fa1d3bb83c 100644 (file)
@@ -880,7 +880,7 @@ bool pathfinder::update_cost_heuristic(     v3s16 ipos,
 /******************************************************************************/
 void pathfinder::build_path(std::vector<v3s16>& path,v3s16 pos, int level) {
        level ++;
-       if (level > 1000) {
+       if (level > 700) {
                ERROR_TARGET
                << LVL "Pathfinder: path is too long aborting" << std::endl;
                return;
index fea4349f11efad5d99bca1bfd7d837a453e7d1c1..01692210354d2b0be254b9099852d1c9e7dc1034 100644 (file)
@@ -2154,7 +2154,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                                os<<player->getName()<<" ";
                        }
 
-                       actionstream<<player->getName()<<" joins game. List of players: "
+                       actionstream<<player->getName()<<" ["<<addr_s<<"] "<<" joins game. List of players: "
                                        <<os.str()<<std::endl;
                }
 
index c1517ccb922b8d5ce3a94bc008f9e908ea934a33..a889223b474873e1a5f3947ca06efc1ee455b7ee 100644 (file)
@@ -185,32 +185,11 @@ void Address::Resolve(const char *name)
 // IP address -> textual representation
 std::string Address::serializeString() const
 {
-       if(m_addr_family == AF_INET)
-       {
-               u8 a, b, c, d, addr;
-               addr = ntohl(m_address.ipv4.sin_addr.s_addr);
-               a = (addr & 0xFF000000) >> 24;
-               b = (addr & 0x00FF0000) >> 16;
-               c = (addr & 0x0000FF00) >> 8;
-               d = (addr & 0x000000FF);
-               return itos(a) + "." + itos(b) + "." + itos(c) + "." + itos(d);
+       char str[INET6_ADDRSTRLEN];
+       if (inet_ntop(m_addr_family, (m_addr_family == AF_INET) ? (void*)&(m_address.ipv4.sin_addr) : (void*)&(m_address.ipv6.sin6_addr), str, INET6_ADDRSTRLEN) == NULL) {
+           return std::string("");
        }
-       else if(m_addr_family == AF_INET6)
-       {
-               std::ostringstream os;
-               for(int i = 0; i < 16; i += 2)
-               {
-                       u16 section =
-                               (m_address.ipv6.sin6_addr.s6_addr[i] << 8) |
-                               (m_address.ipv6.sin6_addr.s6_addr[i + 1]);
-                       os << std::hex << section;
-                       if(i < 14)
-                               os << ":";
-               }
-               return os.str();
-       }
-       else
-               return std::string("");
+       return std::string(str);
 }
 
 struct sockaddr_in Address::getAddress() const