aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--models/blender/engine-with-animation.blend (renamed from models/engine-with-animation.blend)bin599504 -> 599504 bytes
-rw-r--r--models/blender/gleis/infos/Grafik_weiche.png (renamed from models/gleis/infos/Grafik_weiche.png)bin361700 -> 361700 bytes
-rw-r--r--models/blender/gleis/infos/breite (renamed from models/gleis/infos/breite)0
-rw-r--r--models/blender/gleis/licence.txt~ (renamed from models/gleis/licence.txt~)0
-rw-r--r--models/blender/gleis/rail_my.blend (renamed from models/gleis/rail_my.blend)bin654772 -> 654772 bytes
-rw-r--r--models/blender/gleis/rail_my.blend1 (renamed from models/gleis/rail_my.blend1)bin674164 -> 674164 bytes
-rw-r--r--models/blender/gleis/rail_my_rt.blend (renamed from models/gleis/rail_my_rt.blend)bin847060 -> 847060 bytes
-rw-r--r--models/blender/gleis/rail_my_rt.blend1 (renamed from models/gleis/rail_my_rt.blend1)bin767780 -> 767780 bytes
-rw-r--r--models/blender/gleis/rail_my_rt_final.blend (renamed from models/gleis/rail_my_rt_final.blend)bin827052 -> 827052 bytes
-rw-r--r--models/blender/gleis/rail_my_rt_final.blend1 (renamed from models/gleis/rail_my_rt_final.blend1)bin843380 -> 843380 bytes
-rw-r--r--models/blender/gleis/rail_my_rt_final_sw.blend1 (renamed from models/gleis/rail_my_rt_final_sw.blend1)bin824996 -> 824996 bytes
-rw-r--r--models/blender/gleis/rail_my_rt_final_sw.blend11 (renamed from models/gleis/rail_my_rt_final_sw.blend11)bin843380 -> 843380 bytes
-rw-r--r--models/blender/gleis/rail_together.blend (renamed from models/gleis/rail_together.blend)bin1016920 -> 1016920 bytes
-rw-r--r--models/blender/gleis/rail_together.png (renamed from models/gleis/rail_together.png)bin233544 -> 233544 bytes
-rw-r--r--models/blender/gleis/rail_together2.png (renamed from models/gleis/rail_together2.png)bin312891 -> 312891 bytes
-rw-r--r--models/blender/gleis/rail_together3.png (renamed from models/gleis/rail_together3.png)bin309398 -> 309398 bytes
-rw-r--r--models/blender/gleis/rail_verticals.blend (renamed from models/gleis/rail_verticals.blend)bin550748 -> 550748 bytes
-rw-r--r--models/blender/gleis/rail_verticals.blend1 (renamed from models/gleis/rail_verticals.blend1)bin574100 -> 574100 bytes
-rw-r--r--models/blender/gleis/texturen/rail.png (renamed from models/gleis/texturen/rail.png)bin2616 -> 2616 bytes
-rw-r--r--models/blender/gleis/texturen/uv.png (renamed from models/gleis/texturen/uv.png)bin2343 -> 2343 bytes
-rw-r--r--models/blender/locomotive.blend (renamed from models/locomotive.blend)bin459600 -> 459600 bytes
-rw-r--r--models/blender/magnet_track.blend (renamed from models/magnet_track.blend)bin516836 -> 516836 bytes
-rw-r--r--models/blender/newlocomotive.blend (renamed from models/newlocomotive.blend)bin603376 -> 603376 bytes
-rw-r--r--models/blender/newlocomotive.blend1 (renamed from models/newlocomotive.blend1)bin603376 -> 603376 bytes
-rw-r--r--models/blender/newlocomotive_uvs.png (renamed from models/newlocomotive_uvs.png)bin175030 -> 175030 bytes
-rw-r--r--models/blender/newwagon.blend (renamed from models/newwagon.blend)bin542188 -> 542188 bytes
-rw-r--r--models/blender/newwagon.blend1 (renamed from models/newwagon.blend1)bin550292 -> 550292 bytes
-rw-r--r--models/blender/newwagon.png (renamed from models/newwagon.png)bin108762 -> 108762 bytes
-rw-r--r--models/blender/trackplane.blend (renamed from models/trackplane.blend)bin462200 -> 462200 bytes
-rw-r--r--models/blender/trackvertical1.blend (renamed from models/trackvertical1.blend)bin453656 -> 453656 bytes
-rw-r--r--models/blender/trackvertical1.blend1 (renamed from models/trackvertical1.blend1)bin453344 -> 453344 bytes
-rw-r--r--models/blender/trackvertical1.png (renamed from models/trackvertical1.png)bin59146 -> 59146 bytes
-rw-r--r--models/blender/trackvertical2.blend (renamed from models/trackvertical2.blend)bin459216 -> 459216 bytes
-rw-r--r--models/blender/trackvertical2.png (renamed from models/trackvertical2.png)bin66755 -> 66755 bytes
-rw-r--r--models/oldmodels/locomotive.b3d (renamed from models/locomotive.b3d)bin181112 -> 181112 bytes
-rw-r--r--models/oldmodels/trackvertical1.b3d (renamed from models/trackvertical1.b3d)bin629 -> 629 bytes
-rw-r--r--models/oldmodels/trackvertical2.b3d (renamed from models/trackvertical2.b3d)bin869 -> 869 bytes
-rw-r--r--textures_gravelback/advtrains_track_cr.pngbin84648 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_cr_45.pngbin85734 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_st.pngbin67368 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_st_45.pngbin88782 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swl_cr.pngbin83089 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swl_cr_45.pngbin90284 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swl_st.pngbin82548 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swl_st_45.pngbin90485 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swr_cr.pngbin84070 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swr_cr_45.pngbin90410 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swr_st.pngbin83421 -> 0 bytes
-rw-r--r--textures_gravelback/advtrains_track_swr_st_45.pngbin90641 -> 0 bytes
-rw-r--r--textures_old/track_cr.pngbin1933 -> 0 bytes
-rw-r--r--textures_old/track_cr_45.pngbin1945 -> 0 bytes
-rw-r--r--textures_old/track_curve_45.xcfbin13824 -> 0 bytes
-rw-r--r--textures_old/track_placer.pngbin621 -> 0 bytes
-rw-r--r--textures_old/track_st.pngbin621 -> 0 bytes
-rw-r--r--textures_old/track_st_45.pngbin2549 -> 0 bytes
-rw-r--r--textures_old/track_swl_cr.pngbin1868 -> 0 bytes
-rw-r--r--textures_old/track_swl_cr_45.pngbin2512 -> 0 bytes
-rw-r--r--textures_old/track_swl_st.pngbin1892 -> 0 bytes
-rw-r--r--textures_old/track_swl_st_45.pngbin2509 -> 0 bytes
-rw-r--r--textures_old/track_swr_cr.pngbin1897 -> 0 bytes
-rw-r--r--textures_old/track_swr_cr_45.pngbin2528 -> 0 bytes
-rw-r--r--textures_old/track_swr_st.pngbin1912 -> 0 bytes
-rw-r--r--textures_old/track_swr_st_45.pngbin2485 -> 0 bytes
63 files changed, 0 insertions, 0 deletions
diff --git a/models/engine-with-animation.blend b/models/blender/engine-with-animation.blend
index 2649587..2649587 100644
--- a/models/engine-with-animation.blend
+++ b/models/blender/engine-with-animation.blend
Binary files differ
diff --git a/models/gleis/infos/Grafik_weiche.png b/models/blender/gleis/infos/Grafik_weiche.png
index 6674eb3..6674eb3 100644
--- a/models/gleis/infos/Grafik_weiche.png
+++ b/models/blender/gleis/infos/Grafik_weiche.png
Binary files differ
diff --git a/models/gleis/infos/breite b/models/blender/gleis/infos/breite
index b2862c6..b2862c6 100644
--- a/models/gleis/infos/breite
+++ b/models/blender/gleis/infos/breite
diff --git a/models/gleis/licence.txt~ b/models/blender/gleis/licence.txt~
index e69de29..e69de29 100644
--- a/models/gleis/licence.txt~
+++ b/models/blender/gleis/licence.txt~
diff --git a/models/gleis/rail_my.blend b/models/blender/gleis/rail_my.blend
index 3c741bc..3c741bc 100644
--- a/models/gleis/rail_my.blend
+++ b/models/blender/gleis/rail_my.blend
Binary files differ
diff --git a/models/gleis/rail_my.blend1 b/models/blender/gleis/rail_my.blend1
index 6322856..6322856 100644
--- a/models/gleis/rail_my.blend1
+++ b/models/blender/gleis/rail_my.blend1
Binary files differ
diff --git a/models/gleis/rail_my_rt.blend b/models/blender/gleis/rail_my_rt.blend
index 8372a0c..8372a0c 100644
--- a/models/gleis/rail_my_rt.blend
+++ b/models/blender/gleis/rail_my_rt.blend
Binary files differ
diff --git a/models/gleis/rail_my_rt.blend1 b/models/blender/gleis/rail_my_rt.blend1
index 7d0978e..7d0978e 100644
--- a/models/gleis/rail_my_rt.blend1
+++ b/models/blender/gleis/rail_my_rt.blend1
Binary files differ
diff --git a/models/gleis/rail_my_rt_final.blend b/models/blender/gleis/rail_my_rt_final.blend
index 1f346ae..1f346ae 100644
--- a/models/gleis/rail_my_rt_final.blend
+++ b/models/blender/gleis/rail_my_rt_final.blend
Binary files differ
diff --git a/models/gleis/rail_my_rt_final.blend1 b/models/blender/gleis/rail_my_rt_final.blend1
index 12beed9..12beed9 100644
--- a/models/gleis/rail_my_rt_final.blend1
+++ b/models/blender/gleis/rail_my_rt_final.blend1
Binary files differ
diff --git a/models/gleis/rail_my_rt_final_sw.blend1 b/models/blender/gleis/rail_my_rt_final_sw.blend1
index 1d37fa7..1d37fa7 100644
--- a/models/gleis/rail_my_rt_final_sw.blend1
+++ b/models/blender/gleis/rail_my_rt_final_sw.blend1
Binary files differ
diff --git a/models/gleis/rail_my_rt_final_sw.blend11 b/models/blender/gleis/rail_my_rt_final_sw.blend11
index 7372d51..7372d51 100644
--- a/models/gleis/rail_my_rt_final_sw.blend11
+++ b/models/blender/gleis/rail_my_rt_final_sw.blend11
Binary files differ
diff --git a/models/gleis/rail_together.blend b/models/blender/gleis/rail_together.blend
index cff51ea..cff51ea 100644
--- a/models/gleis/rail_together.blend
+++ b/models/blender/gleis/rail_together.blend
Binary files differ
diff --git a/models/gleis/rail_together.png b/models/blender/gleis/rail_together.png
index 386cd5c..386cd5c 100644
--- a/models/gleis/rail_together.png
+++ b/models/blender/gleis/rail_together.png
Binary files differ
diff --git a/models/gleis/rail_together2.png b/models/blender/gleis/rail_together2.png
index 3effe34..3effe34 100644
--- a/models/gleis/rail_together2.png
+++ b/models/blender/gleis/rail_together2.png
Binary files differ
diff --git a/models/gleis/rail_together3.png b/models/blender/gleis/rail_together3.png
index 4a183c1..4a183c1 100644
--- a/models/gleis/rail_together3.png
+++ b/models/blender/gleis/rail_together3.png
Binary files differ
diff --git a/models/gleis/rail_verticals.blend b/models/blender/gleis/rail_verticals.blend
index 45c37e1..45c37e1 100644
--- a/models/gleis/rail_verticals.blend
+++ b/models/blender/gleis/rail_verticals.blend
Binary files differ
diff --git a/models/gleis/rail_verticals.blend1 b/models/blender/gleis/rail_verticals.blend1
index 320f30b..320f30b 100644
--- a/models/gleis/rail_verticals.blend1
+++ b/models/blender/gleis/rail_verticals.blend1
Binary files differ
diff --git a/models/gleis/texturen/rail.png b/models/blender/gleis/texturen/rail.png
index 8478cf6..8478cf6 100644
--- a/models/gleis/texturen/rail.png
+++ b/models/blender/gleis/texturen/rail.png
Binary files differ
diff --git a/models/gleis/texturen/uv.png b/models/blender/gleis/texturen/uv.png
index fb0af3e..fb0af3e 100644
--- a/models/gleis/texturen/uv.png
+++ b/models/blender/gleis/texturen/uv.png
Binary files differ
diff --git a/models/locomotive.blend b/models/blender/locomotive.blend
index 8fd6059..8fd6059 100644
--- a/models/locomotive.blend
+++ b/models/blender/locomotive.blend
Binary files differ
diff --git a/models/magnet_track.blend b/models/blender/magnet_track.blend
index 0ab14e7..0ab14e7 100644
--- a/models/magnet_track.blend
+++ b/models/blender/magnet_track.blend
Binary files differ
diff --git a/models/newlocomotive.blend b/models/blender/newlocomotive.blend
index 858882b..858882b 100644
--- a/models/newlocomotive.blend
+++ b/models/blender/newlocomotive.blend
Binary files differ
diff --git a/models/newlocomotive.blend1 b/models/blender/newlocomotive.blend1
index 4b8b24f..4b8b24f 100644
--- a/models/newlocomotive.blend1
+++ b/models/blender/newlocomotive.blend1
Binary files differ
diff --git a/models/newlocomotive_uvs.png b/models/blender/newlocomotive_uvs.png
index 879be65..879be65 100644
--- a/models/newlocomotive_uvs.png
+++ b/models/blender/newlocomotive_uvs.png
Binary files differ
diff --git a/models/newwagon.blend b/models/blender/newwagon.blend
index 1cedc55..1cedc55 100644
--- a/models/newwagon.blend
+++ b/models/blender/newwagon.blend
Binary files differ
diff --git a/models/newwagon.blend1 b/models/blender/newwagon.blend1
index eb30fde..eb30fde 100644
--- a/models/newwagon.blend1
+++ b/models/blender/newwagon.blend1
Binary files differ
diff --git a/models/newwagon.png b/models/blender/newwagon.png
index 812bc32..812bc32 100644
--- a/models/newwagon.png
+++ b/models/blender/newwagon.png
Binary files differ
diff --git a/models/trackplane.blend b/models/blender/trackplane.blend
index 79365f7..79365f7 100644
--- a/models/trackplane.blend
+++ b/models/blender/trackplane.blend
Binary files differ
diff --git a/models/trackvertical1.blend b/models/blender/trackvertical1.blend
index fca6742..fca6742 100644
--- a/models/trackvertical1.blend
+++ b/models/blender/trackvertical1.blend
Binary files differ
diff --git a/models/trackvertical1.blend1 b/models/blender/trackvertical1.blend1
index b146b56..b146b56 100644
--- a/models/trackvertical1.blend1
+++ b/models/blender/trackvertical1.blend1
Binary files differ
diff --git a/models/trackvertical1.png b/models/blender/trackvertical1.png
index a998dcb..a998dcb 100644
--- a/models/trackvertical1.png
+++ b/models/blender/trackvertical1.png
Binary files differ
diff --git a/models/trackvertical2.blend b/models/blender/trackvertical2.blend
index a066b84..a066b84 100644
--- a/models/trackvertical2.blend
+++ b/models/blender/trackvertical2.blend
Binary files differ
diff --git a/models/trackvertical2.png b/models/blender/trackvertical2.png
index 43142f9..43142f9 100644
--- a/models/trackvertical2.png
+++ b/models/blender/trackvertical2.png
Binary files differ
diff --git a/models/locomotive.b3d b/models/oldmodels/locomotive.b3d
index 5e16be3..5e16be3 100644
--- a/models/locomotive.b3d
+++ b/models/oldmodels/locomotive.b3d
Binary files differ
diff --git a/models/trackvertical1.b3d b/models/oldmodels/trackvertical1.b3d
index 5620f60..5620f60 100644
--- a/models/trackvertical1.b3d
+++ b/models/oldmodels/trackvertical1.b3d
Binary files differ
diff --git a/models/trackvertical2.b3d b/models/oldmodels/trackvertical2.b3d
index 22dbb20..22dbb20 100644
--- a/models/trackvertical2.b3d
+++ b/models/oldmodels/trackvertical2.b3d
Binary files differ
diff --git a/textures_gravelback/advtrains_track_cr.png b/textures_gravelback/advtrains_track_cr.png
deleted file mode 100644
index a21b970..0000000
--- a/textures_gravelback/advtrains_track_cr.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_cr_45.png b/textures_gravelback/advtrains_track_cr_45.png
deleted file mode 100644
index b30a8ca..0000000
--- a/textures_gravelback/advtrains_track_cr_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_st.png b/textures_gravelback/advtrains_track_st.png
deleted file mode 100644
index ac94158..0000000
--- a/textures_gravelback/advtrains_track_st.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_st_45.png b/textures_gravelback/advtrains_track_st_45.png
deleted file mode 100644
index e541853..0000000
--- a/textures_gravelback/advtrains_track_st_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swl_cr.png b/textures_gravelback/advtrains_track_swl_cr.png
deleted file mode 100644
index 769b92d..0000000
--- a/textures_gravelback/advtrains_track_swl_cr.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swl_cr_45.png b/textures_gravelback/advtrains_track_swl_cr_45.png
deleted file mode 100644
index 6ff8b4b..0000000
--- a/textures_gravelback/advtrains_track_swl_cr_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swl_st.png b/textures_gravelback/advtrains_track_swl_st.png
deleted file mode 100644
index e4d5a0c..0000000
--- a/textures_gravelback/advtrains_track_swl_st.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swl_st_45.png b/textures_gravelback/advtrains_track_swl_st_45.png
deleted file mode 100644
index 2dba2f6..0000000
--- a/textures_gravelback/advtrains_track_swl_st_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swr_cr.png b/textures_gravelback/advtrains_track_swr_cr.png
deleted file mode 100644
index e13bd2e..0000000
--- a/textures_gravelback/advtrains_track_swr_cr.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swr_cr_45.png b/textures_gravelback/advtrains_track_swr_cr_45.png
deleted file mode 100644
index e0b36ff..0000000
--- a/textures_gravelback/advtrains_track_swr_cr_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swr_st.png b/textures_gravelback/advtrains_track_swr_st.png
deleted file mode 100644
index 52d272d..0000000
--- a/textures_gravelback/advtrains_track_swr_st.png
+++ /dev/null
Binary files differ
diff --git a/textures_gravelback/advtrains_track_swr_st_45.png b/textures_gravelback/advtrains_track_swr_st_45.png
deleted file mode 100644
index b81df2c..0000000
--- a/textures_gravelback/advtrains_track_swr_st_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_cr.png b/textures_old/track_cr.png
deleted file mode 100644
index 54ddf79..0000000
--- a/textures_old/track_cr.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_cr_45.png b/textures_old/track_cr_45.png
deleted file mode 100644
index ad4580e..0000000
--- a/textures_old/track_cr_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_curve_45.xcf b/textures_old/track_curve_45.xcf
deleted file mode 100644
index 0e6c26e..0000000
--- a/textures_old/track_curve_45.xcf
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_placer.png b/textures_old/track_placer.png
deleted file mode 100644
index afed4ce..0000000
--- a/textures_old/track_placer.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_st.png b/textures_old/track_st.png
deleted file mode 100644
index afed4ce..0000000
--- a/textures_old/track_st.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_st_45.png b/textures_old/track_st_45.png
deleted file mode 100644
index e3ce89f..0000000
--- a/textures_old/track_st_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swl_cr.png b/textures_old/track_swl_cr.png
deleted file mode 100644
index 602d727..0000000
--- a/textures_old/track_swl_cr.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swl_cr_45.png b/textures_old/track_swl_cr_45.png
deleted file mode 100644
index f3b741a..0000000
--- a/textures_old/track_swl_cr_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swl_st.png b/textures_old/track_swl_st.png
deleted file mode 100644
index b12a9ac..0000000
--- a/textures_old/track_swl_st.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swl_st_45.png b/textures_old/track_swl_st_45.png
deleted file mode 100644
index cf80d77..0000000
--- a/textures_old/track_swl_st_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swr_cr.png b/textures_old/track_swr_cr.png
deleted file mode 100644
index 92a09bd..0000000
--- a/textures_old/track_swr_cr.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swr_cr_45.png b/textures_old/track_swr_cr_45.png
deleted file mode 100644
index f127e30..0000000
--- a/textures_old/track_swr_cr_45.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swr_st.png b/textures_old/track_swr_st.png
deleted file mode 100644
index 7d014fc..0000000
--- a/textures_old/track_swr_st.png
+++ /dev/null
Binary files differ
diff --git a/textures_old/track_swr_st_45.png b/textures_old/track_swr_st_45.png
deleted file mode 100644
index 5d7764a..0000000
--- a/textures_old/track_swr_st_45.png
+++ /dev/null
Binary files differ
pan class="hl opt">(!list_from) { infostream << "IMoveAction::apply(): FAIL: source list not found: " << "from_inv=\"" << from_inv.dump() << "\"" << ", from_list=\"" << from_list << "\"" << std::endl; return; } if (!list_to) { infostream << "IMoveAction::apply(): FAIL: destination list not found: " << "to_inv=\""<<to_inv.dump() << "\"" << ", to_list=\"" << to_list << "\"" << std::endl; return; } if (move_somewhere) { s16 old_to_i = to_i; u16 old_count = count; caused_by_move_somewhere = true; move_somewhere = false; infostream << "IMoveAction::apply(): moving item somewhere" << " msom=" << move_somewhere << " count=" << count << " from inv=\"" << from_inv.dump() << "\"" << " list=\"" << from_list << "\"" << " i=" << from_i << " to inv=\"" << to_inv.dump() << "\"" << " list=\"" << to_list << "\"" << std::endl; // Try to add the item to destination list s16 dest_size = list_to->getSize(); // First try all the non-empty slots for (s16 dest_i = 0; dest_i < dest_size && count > 0; dest_i++) { if (!list_to->getItem(dest_i).empty()) { to_i = dest_i; apply(mgr, player, gamedef); count -= move_count; } } // Then try all the empty ones for (s16 dest_i = 0; dest_i < dest_size && count > 0; dest_i++) { if (list_to->getItem(dest_i).empty()) { to_i = dest_i; apply(mgr, player, gamedef); count -= move_count; } } to_i = old_to_i; count = old_count; caused_by_move_somewhere = false; move_somewhere = true; return; } if ((u16)to_i > list_to->getSize()) { infostream << "IMoveAction::apply(): FAIL: destination index out of bounds: " << "to_i=" << to_i << ", size=" << list_to->getSize() << std::endl; return; } /* Do not handle rollback if both inventories are that of the same player */ bool ignore_rollback = ( from_inv.type == InventoryLocation::PLAYER && to_inv.type == InventoryLocation::PLAYER && from_inv.name == to_inv.name); /* Collect information of endpoints */ int try_take_count = count; if(try_take_count == 0) try_take_count = list_from->getItem(from_i).count; int src_can_take_count = 0xffff; int dst_can_put_count = 0xffff; /* Query detached inventories */ // Move occurs in the same detached inventory if(from_inv.type == InventoryLocation::DETACHED && to_inv.type == InventoryLocation::DETACHED && from_inv.name == to_inv.name) { src_can_take_count = PLAYER_TO_SA(player)->detached_inventory_AllowMove( from_inv.name, from_list, from_i, to_list, to_i, try_take_count, player); dst_can_put_count = src_can_take_count; } else { // Destination is detached if(to_inv.type == InventoryLocation::DETACHED) { ItemStack src_item = list_from->getItem(from_i); src_item.count = try_take_count; dst_can_put_count = PLAYER_TO_SA(player)->detached_inventory_AllowPut( to_inv.name, to_list, to_i, src_item, player); } // Source is detached if(from_inv.type == InventoryLocation::DETACHED) { ItemStack src_item = list_from->getItem(from_i); src_item.count = try_take_count; src_can_take_count = PLAYER_TO_SA(player)->detached_inventory_AllowTake( from_inv.name, from_list, from_i, src_item, player); } } /* Query node metadata inventories */ // Both endpoints are nodemeta // Move occurs in the same nodemeta inventory if(from_inv.type == InventoryLocation::NODEMETA && to_inv.type == InventoryLocation::NODEMETA && from_inv.p == to_inv.p) { src_can_take_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowMove( from_inv.p, from_list, from_i, to_list, to_i, try_take_count, player); dst_can_put_count = src_can_take_count; } else { // Destination is nodemeta if(to_inv.type == InventoryLocation::NODEMETA) { ItemStack src_item = list_from->getItem(from_i); src_item.count = try_take_count; dst_can_put_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowPut( to_inv.p, to_list, to_i, src_item, player); } // Source is nodemeta if(from_inv.type == InventoryLocation::NODEMETA) { ItemStack src_item = list_from->getItem(from_i); src_item.count = try_take_count; src_can_take_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowTake( from_inv.p, from_list, from_i, src_item, player); } } int old_count = count; /* Modify count according to collected data */ count = try_take_count; if(src_can_take_count != -1 && count > src_can_take_count) count = src_can_take_count; if(dst_can_put_count != -1 && count > dst_can_put_count) count = dst_can_put_count; /* Limit according to source item count */ if(count > list_from->getItem(from_i).count) count = list_from->getItem(from_i).count; /* If no items will be moved, don't go further */ if(count == 0) { infostream<<"IMoveAction::apply(): move was completely disallowed:" <<" count="<<old_count <<" from inv=\""<<from_inv.dump()<<"\"" <<" list=\""<<from_list<<"\"" <<" i="<<from_i <<" to inv=\""<<to_inv.dump()<<"\"" <<" list=\""<<to_list<<"\"" <<" i="<<to_i <<std::endl; return; } ItemStack src_item = list_from->getItem(from_i); src_item.count = count; ItemStack from_stack_was = list_from->getItem(from_i); ItemStack to_stack_was = list_to->getItem(to_i); /* Perform actual move If something is wrong (source item is empty, destination is the same as source), nothing happens */ bool did_swap = false; move_count = list_from->moveItem(from_i, list_to, to_i, count, !caused_by_move_somewhere, &did_swap); // If source is infinite, reset it's stack if (src_can_take_count == -1) { // For the caused_by_move_somewhere == true case we didn't force-put the item, // which guarantees there is no leftover, and code below would duplicate the // (not replaced) to_stack_was item. if (!caused_by_move_somewhere) { // If destination stack is of different type and there are leftover // items, attempt to put the leftover items to a different place in the // destination inventory. // The client-side GUI will try to guess if this happens. if (from_stack_was.name != to_stack_was.name) { for (u32 i = 0; i < list_to->getSize(); i++) { if (list_to->getItem(i).empty()) { list_to->changeItem(i, to_stack_was); break; } } } } if (move_count > 0 || did_swap) { list_from->deleteItem(from_i); list_from->addItem(from_i, from_stack_was); } } // If destination is infinite, reset it's stack and take count from source if(dst_can_put_count == -1){ list_to->deleteItem(to_i); list_to->addItem(to_i, to_stack_was); list_from->deleteItem(from_i); list_from->addItem(from_i, from_stack_was); list_from->takeItem(from_i, count); } infostream << "IMoveAction::apply(): moved" << " msom=" << move_somewhere << " caused=" << caused_by_move_somewhere << " count=" << count << " from inv=\"" << from_inv.dump() << "\"" << " list=\"" << from_list << "\"" << " i=" << from_i << " to inv=\"" << to_inv.dump() << "\"" << " list=\"" << to_list << "\"" << " i=" << to_i << std::endl; // If we are inside the move somewhere loop, we don't need to report // anything if nothing happened (perhaps we don't need to report // anything for caused_by_move_somewhere == true, but this way its safer) if (caused_by_move_somewhere && move_count == 0) { return; } /* Record rollback information */ if(!ignore_rollback && gamedef->rollback()) { IRollbackManager *rollback = gamedef->rollback(); // If source is not infinite, record item take if(src_can_take_count != -1){ RollbackAction action; std::string loc; { std::ostringstream os(std::ios::binary); from_inv.serialize(os); loc = os.str(); } action.setModifyInventoryStack(loc, from_list, from_i, false, src_item); rollback->reportAction(action); } // If destination is not infinite, record item put if(dst_can_put_count != -1){ RollbackAction action; std::string loc; { std::ostringstream os(std::ios::binary); to_inv.serialize(os); loc = os.str(); } action.setModifyInventoryStack(loc, to_list, to_i, true, src_item); rollback->reportAction(action); } } /* Report move to endpoints */ /* Detached inventories */ // Both endpoints are same detached if(from_inv.type == InventoryLocation::DETACHED && to_inv.type == InventoryLocation::DETACHED && from_inv.name == to_inv.name) { PLAYER_TO_SA(player)->detached_inventory_OnMove( from_inv.name, from_list, from_i, to_list, to_i, count, player); } else { // Destination is detached if(to_inv.type == InventoryLocation::DETACHED) { PLAYER_TO_SA(player)->detached_inventory_OnPut( to_inv.name, to_list, to_i, src_item, player); } // Source is detached if(from_inv.type == InventoryLocation::DETACHED) { PLAYER_TO_SA(player)->detached_inventory_OnTake( from_inv.name, from_list, from_i, src_item, player); } } /* Node metadata inventories */ // Both endpoints are same nodemeta if(from_inv.type == InventoryLocation::NODEMETA && to_inv.type == InventoryLocation::NODEMETA && from_inv.p == to_inv.p) { PLAYER_TO_SA(player)->nodemeta_inventory_OnMove( from_inv.p, from_list, from_i, to_list, to_i, count, player); } else{ // Destination is nodemeta if(to_inv.type == InventoryLocation::NODEMETA) { PLAYER_TO_SA(player)->nodemeta_inventory_OnPut( to_inv.p, to_list, to_i, src_item, player); } // Source is nodemeta else if(from_inv.type == InventoryLocation::NODEMETA) { PLAYER_TO_SA(player)->nodemeta_inventory_OnTake( from_inv.p, from_list, from_i, src_item, player); } } mgr->setInventoryModified(from_inv, false); if(inv_from != inv_to) mgr->setInventoryModified(to_inv, false); } void IMoveAction::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); Inventory *inv_to = mgr->getInventory(to_inv); if(!inv_from || !inv_to) return; InventoryLocation current_player; current_player.setCurrentPlayer(); Inventory *inv_player = mgr->getInventory(current_player); if(inv_from != inv_player || inv_to != inv_player) return; InventoryList *list_from = inv_from->getList(from_list); InventoryList *list_to = inv_to->getList(to_list); if(!list_from || !list_to) return; if (!move_somewhere) list_from->moveItem(from_i, list_to, to_i, count); else list_from->moveItemSomewhere(from_i, list_to, count); mgr->setInventoryModified(from_inv); if(inv_from != inv_to) mgr->setInventoryModified(to_inv); } /* IDropAction */ IDropAction::IDropAction(std::istream &is) { std::string ts; std::getline(is, ts, ' '); count = stoi(ts); std::getline(is, ts, ' '); from_inv.deSerialize(ts); std::getline(is, from_list, ' '); std::getline(is, ts, ' '); from_i = stoi(ts); } void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) { Inventory *inv_from = mgr->getInventory(from_inv); if(!inv_from){ infostream<<"IDropAction::apply(): FAIL: source inventory not found: " <<"from_inv=\""<<from_inv.dump()<<"\""<<std::endl; return; } InventoryList *list_from = inv_from->getList(from_list); /* If a list doesn't exist or the source item doesn't exist */ if(!list_from){ infostream<<"IDropAction::apply(): FAIL: source list not found: " <<"from_inv=\""<<from_inv.dump()<<"\""<<std::endl; return; } if(list_from->getItem(from_i).empty()) { infostream<<"IDropAction::apply(): FAIL: source item not found: " <<"from_inv=\""<<from_inv.dump()<<"\"" <<", from_list=\""<<from_list<<"\"" <<" from_i="<<from_i<<std::endl; return; } /* Do not handle rollback if inventory is player's */ bool ignore_src_rollback = (from_inv.type == InventoryLocation::PLAYER); /* Collect information of endpoints */ int take_count = list_from->getItem(from_i).count; if(count != 0 && count < take_count) take_count = count; int src_can_take_count = take_count; // Source is detached if(from_inv.type == InventoryLocation::DETACHED) { ItemStack src_item = list_from->getItem(from_i); src_item.count = take_count; src_can_take_count = PLAYER_TO_SA(player)->detached_inventory_AllowTake( from_inv.name, from_list, from_i, src_item, player); } // Source is nodemeta if(from_inv.type == InventoryLocation::NODEMETA) { ItemStack src_item = list_from->getItem(from_i); src_item.count = take_count; src_can_take_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowTake( from_inv.p, from_list, from_i, src_item, player); } if(src_can_take_count != -1 && src_can_take_count < take_count) take_count = src_can_take_count; int actually_dropped_count = 0; ItemStack src_item = list_from->getItem(from_i); // Drop the item ItemStack item1 = list_from->getItem(from_i); item1.count = take_count; if(PLAYER_TO_SA(player)->item_OnDrop(item1, player, player->getBasePosition() + v3f(0,1,0))) { actually_dropped_count = take_count - item1.count; if(actually_dropped_count == 0){ infostream<<"Actually dropped no items"<<std::endl; return; } // If source isn't infinite if(src_can_take_count != -1){ // Take item from source list ItemStack item2 = list_from->takeItem(from_i, actually_dropped_count); if(item2.count != actually_dropped_count) errorstream<<"Could not take dropped count of items"<<std::endl; mgr->setInventoryModified(from_inv, false); } } infostream<<"IDropAction::apply(): dropped " <<" from inv=\""<<from_inv.dump()<<"\"" <<" list=\""<<from_list<<"\"" <<" i="<<from_i <<std::endl; src_item.count = actually_dropped_count; /* Report drop to endpoints */ // Source is detached if(from_inv.type == InventoryLocation::DETACHED) { PLAYER_TO_SA(player)->detached_inventory_OnTake( from_inv.name, from_list, from_i, src_item, player); } // Source is nodemeta if(from_inv.type == InventoryLocation::NODEMETA) { PLAYER_TO_SA(player)->nodemeta_inventory_OnTake( from_inv.p, from_list, from_i, src_item, player); } /* Record rollback information */ if(!ignore_src_rollback && gamedef->rollback()) { IRollbackManager *rollback = gamedef->rollback(); // If source is not infinite, record item take if(src_can_take_count != -1){ RollbackAction action; std::string loc; { std::ostringstream os(std::ios::binary); from_inv.serialize(os); loc = os.str(); } action.setModifyInventoryStack(loc, from_list, from_i, false, src_item); rollback->reportAction(action); } } } 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); } /* ICraftAction */ ICraftAction::ICraftAction(std::istream &is) { std::string ts; std::getline(is, ts, ' '); count = stoi(ts); std::getline(is, ts, ' '); craft_inv.deSerialize(ts); } void ICraftAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) { Inventory *inv_craft = mgr->getInventory(craft_inv); if (!inv_craft) { infostream << "ICraftAction::apply(): FAIL: inventory not found: " << "craft_inv=\"" << craft_inv.dump() << "\"" << std::endl; return; } InventoryList *list_craft = inv_craft->getList("craft"); InventoryList *list_craftresult = inv_craft->getList("craftresult"); InventoryList *list_main = inv_craft->getList("main"); /* If a list doesn't exist or the source item doesn't exist */ if (!list_craft) { infostream << "ICraftAction::apply(): FAIL: craft list not found: " << "craft_inv=\"" << craft_inv.dump() << "\"" << std::endl; return; } if (!list_craftresult) { infostream << "ICraftAction::apply(): FAIL: craftresult list not found: " << "craft_inv=\"" << craft_inv.dump() << "\"" << std::endl; return; } if (list_craftresult->getSize() < 1) { infostream << "ICraftAction::apply(): FAIL: craftresult list too short: " << "craft_inv=\"" << craft_inv.dump() << "\"" << std::endl; return; } ItemStack crafted; ItemStack craftresultitem; int count_remaining = count; std::vector<ItemStack> output_replacements; getCraftingResult(inv_craft, crafted, output_replacements, false, gamedef); PLAYER_TO_SA(player)->item_CraftPredict(crafted, player, list_craft, craft_inv); bool found = !crafted.empty(); while (found && list_craftresult->itemFits(0, crafted)) { InventoryList saved_craft_list = *list_craft; std::vector<ItemStack> temp; // Decrement input and add crafting output getCraftingResult(inv_craft, crafted, temp, true, gamedef); PLAYER_TO_SA(player)->item_OnCraft(crafted, player, &saved_craft_list, craft_inv); list_craftresult->addItem(0, crafted); mgr->setInventoryModified(craft_inv); // Add the new replacements to the list IItemDefManager *itemdef = gamedef->getItemDefManager(); for (std::vector<ItemStack>::iterator it = temp.begin(); it != temp.end(); ++it) { for (std::vector<ItemStack>::iterator jt = output_replacements.begin(); jt != output_replacements.end(); ++jt) { if (it->name == jt->name) { *it = jt->addItem(*it, itemdef); if (it->empty()) continue; } } output_replacements.push_back(*it); } actionstream << player->getDescription() << " crafts " << crafted.getItemString() << std::endl; // Decrement counter if (count_remaining == 1) break; else if (count_remaining > 1) count_remaining--; // Get next crafting result found = getCraftingResult(inv_craft, crafted, temp, false, gamedef); PLAYER_TO_SA(player)->item_CraftPredict(crafted, player, list_craft, craft_inv); found = !crafted.empty(); } // Put the replacements in the inventory or drop them on the floor, if // the invenotry is full for (std::vector<ItemStack>::iterator it = output_replacements.begin(); it != output_replacements.end(); ++it) { if (list_main) *it = list_main->addItem(*it); if (it->empty()) continue; u16 count = it->count; do { PLAYER_TO_SA(player)->item_OnDrop(*it, player, player->getBasePosition() + v3f(0,1,0)); if (count >= it->count) { errorstream << "Couldn't drop replacement stack " << it->getItemString() << " because drop loop didn't " "decrease count." << std::endl; break; } } while (!it->empty()); } infostream<<"ICraftAction::apply(): crafted " <<" craft_inv=\""<<craft_inv.dump()<<"\"" <<std::endl; } void ICraftAction::clientApply(InventoryManager *mgr, IGameDef *gamedef) { // Optional InventoryAction operation that is run on the client // to make lag less apparent. } // Crafting helper bool getCraftingResult(Inventory *inv, ItemStack& result, std::vector<ItemStack> &output_replacements, bool decrementInput, IGameDef *gamedef) { DSTACK(FUNCTION_NAME); result.clear(); // Get the InventoryList in which we will operate InventoryList *clist = inv->getList("craft"); if(!clist) return false; // Mangle crafting grid to an another format CraftInput ci; ci.method = CRAFT_METHOD_NORMAL; ci.width = clist->getWidth() ? clist->getWidth() : 3; for(u16 i=0; i<clist->getSize(); i++) ci.items.push_back(clist->getItem(i)); // Find out what is crafted and add it to result item slot CraftOutput co; bool found = gamedef->getCraftDefManager()->getCraftResult( ci, co, output_replacements, decrementInput, gamedef); if(found) result.deSerialize(co.item, gamedef->getItemDefManager()); if(found && decrementInput) { // CraftInput has been changed, apply changes in clist for(u16 i=0; i<clist->getSize(); i++) { clist->changeItem(i, ci.items[i]); } } return found; }