HUD fixes

master
amadin 2016-10-15 20:20:37 +03:00
parent 96892a03f7
commit 328ba19d11
5 changed files with 46 additions and 187 deletions

View File

@ -1,6 +1,6 @@
This mod creates a customizable compass with user settable bookmarks and shared and admin bookmarks in multiplayer.
**Compass GPS version 2.7**
**Compass GPS version 2.7 fork 1**
Echo created a compass mod back in 2012: [https://forum.minetest.net/viewtopic.php?id=3785](https://forum.minetest.net/viewtopic.php?id=3785)<p>
PilzAdams made a modification of it, which I can not find the source to, I don't know how much of PilzAdams changes made it into the later versions of Echo's mod.<p>
@ -139,6 +139,7 @@ If you use this mod, please consider reviewing it on the MineTest Mod Database.<
[https://forum.minetest.net/mmdb/mod/compassgps/](https://forum.minetest.net/mmdb/mod/compassgps/)
**Changelog:**<p>
2.7 fork 1 HUD fixes
2.7 bug fix: in a catastrophic server crash, compassgps_settings or bookmarks file could exist, but be empty. When the file exists but is empty, the table it is loaded into ends up as nil instead of empty and that causes the server to crash on startup. NOT GOOD! With bug fix, if file exists but is empty, server will start but not crash and new contents for empty file will be created. a message will appear in the debug informing server owner to restore bookmarks from backup if possible.<p>
2.6 bug fix from myoung008, type causing crashes when entering bad color.<p>
2.5 bug fix from TeTpaAka fix bug when static_spawnpoint is invalid<p>

View File

@ -1,158 +0,0 @@
[b]Compass GPS version 2.7[/b]
This mod creates a customizable compass with user settable bookmarks and shared and admin bookmarks in multiplayer.
Echo created a compass mod back in 2012: [url]https://forum.minetest.net/viewtopic.php?id=3785[/url]
PilzAdams made a modification of it, which I can not find the source to, I don't know how much of PilzAdams changes made it into the later versions of Echo's mod.
Then in 2013 TeTpaAka made a fork of the compass mod that he called compass+ [url]https://forum.minetest.net/viewtopic.php?id=8117[/url]
This fork added the ability to "bookmark" specific places, and a gui so you could choose what point the compass should point to.
This is my fork of TeTpaAka's fork of Echo's mod. :)
The compass mod as it was is REALLY cool I love the way Echo managed to make the compass in your inventory actually change it's image to point in the direction of it's target
[img]http://i59.tinypic.com/a15ls0.png[/img]
And TeTpaAka's gui, file io, and coding for multiplayer games was simply amazing. But as I was learning from their awesome code, I saw some changes I'd like to make using these new ideas, as well as some things I learned while looking at other mods. So, with complete and total respect for the original awesome mods, and hopefully in the same spirit as theirs, I present my own fork of the fork. CompassGPS
The crafting recipe for a compass is unchanged:
[code]
, steel ,
steel, mese fragment, steel
, steel ,
[/code]
[img]http://i59.tinypic.com/14ad2qw.png[/img]
Compass GPS introduces several other changes though. First of all, this mod adds a heads up display that indicates your current position, and the name of the bookmark the compass is pointing at, that bookmarks pos, as well as the distance to that bookmark.
[img]http://i60.tinypic.com/facwea.png[/img]
The hud updates constantly as long as the compass is in one of your active inventory slots, so you can always know where you are in relation to the target node, and how far away it is.
There is a GUI that pops up whenever you wield the compass and left click. I never played with a GUI in minetest before, so this was a new experience for me, I learned a lot and made quite a few changes:
[IMG]http://i61.tinypic.com/29zzgy1.png[/IMG]
To create a new bookmark, type the name into the "bookmark:" field and click "Create Bookmark" (or just hit enter). To remove a bookmark, select it from the list and click "Remove Bookmark." A confirmation dialog will appear and the bookmark will only be removed if you click "YES".
The bookmark list has been expanded from a dropdown into a textlist to improve visibility. Select any bookmark in the list by clicking on it, and then click "Find Selected Bookmark" to make the compass (and hud) point at that location. "default" is always at the top of the list and will point to (0,0,0) or your bed from PilzAdams bed-mod, or home location as defined in the sethome-mod. (Setting default to your bed or sethome is old code, I modified it to make it work with my new version, but I cant take credit for the idea or basic structure.) The rest of the list are bookmarked locations that you have set and named
Just click in the "Sort by" box to change whether the bookmarks are sorted by name, or by distance from your current location. ("default" will still always be the first item in the list no matter which way you sort it)
Click in the "Dist" box to change whether the distance is calculated in 3d (including your distance in the vertical direction) or in 2d (x and z coords only, ignore vertical distance)
Down at the lower right of the screen, I'm certain you noticed the "Teleport to bookmark" button. [i]That button appears if, and ONLY IF the player has teleport privileges.[/i] If they do, then they can select any bookmark out of the list, click on teleport, and be instantly transported to the location of that bookmark. Since the user already had teleport privileges, this just saved them some typing, it's not adding any new abilities.
If you click the "Settings" button in the upper right hand corner it brings up a screen where you can customize the appearance of your compass gps:
[IMG]http://i59.tinypic.com/aahqa8.png[/IMG]
(The two awesome new compass images are by Bas080 and Spootonium)
I figured the position of the hud text was likely to be something that people would want to customize, so here in the settings gui are the x and y coords for the hud text. Just enter the new coords where you want the hud text to appear and click "Change Hud"
The cords must be between 0 and 1 and represent a percentage of the screen, so x=0 would put the text at the far left of the screen, and y=0.98 would put the text almost at the bottom of the screen. The default is x=0.4 and y=0.01, and that is displayed right over the input boxes so the user can easily set them back to the default if they are having trouble placing the hud. If you change either the x or y coord to a number that is out of range (less than 0 or greater than 1) then the hud will not be displayed. That makes it easy to turn the hud off if you wish.
You can also change the color of the hud text by changing the value in the "Color" field here. Again, click "Change Hud" to make the update appear.
AND, there are three buttons here that allow you to select from 3 different styles of compass images. The basic compass image by Echo. A nice wooden compass image by Bas080. And a high resolution compass image by spootonium.
In Multiplayer, there are now shared and admin bookmarks!
[IMG]http://i61.tinypic.com/a5b7li.png[/IMG]
If a player has the new "shared_bookmarks" privilege, then they will get the "Create Shared Bookmark" button and be able to create bookmarks that all players on the server can see and use. Shared bookmarks are preceded by *shared* and the name of the player that created them. There is a variable near the top of the init.lua called max_shared. This controls the maximum number of shared bookmarks that an individual player can create. It is set to 10 by default, but the server admin can change it to whatever they want. A player can delete their own shared bookmarks, but they can not delete anyone else's (unless they are an admin, then they can delete anyone's shared bookmarks)
If a player has the "privs" privilege, then they will get the "Create Admin Bookmark" button. Admin bookmarks are intended to allow the admins to mark important places in their world that they want everyone to be able to find. There are no limits on how many admin bookmarks can be created. Only Admins can delete admin bookmarks.
In a multiplayer game, all players get the "Show: Private, Shared, Admin" checkboxes. You can use these checkboxes to toggle which type of bookmarks show in your list. If you uncheck all three the system will automatically recheck "Private" for you.
The bookmark list is saved any time a user changes it. All of your other settings, the currently selected bookmark, sort order, distance function, and hud position and color, and compass type, are saved whenever a user leaves the game, and on game shutdown. So if you move the hud down to the lower right hand corner of the screen, and then quit, the hud will still be in the place you put it when you restart the game later.
The Chat Commands from the orignal compass mod still work, but only on private bookmarks. Chat commands available are:
list_bookmarks
set_bookmark <bookmark name>
find_bookmark <bookmark name>
remove_bookmark <bookmark name>
I also fixed a few bugs while I was working on this. There was a problem in the mod that caused compass to jump around in inventory if there were empty slots above it, that is fixed now. And there was also a problem with the bookmark list not being saved after you removed a bookmark if you didn't add a new bookmark afterwards. Now the bookmark list is saved whenever you change it, either adding or removing.
I tried to follow Echo and TeTpaAka's examples of how to properly code for multiplayer games, and all of the new settings should work just fine in a multiplayer game.
----[b] MAPS! [/b]----
Thanks to a great idea and initial code from TeTpaAka CompassGPS now includes MAPS!
Maps allow you to store a bookmark that you can then give to another player and they can use the map to put that bookmark into their own list. They also enhance role playing/story possibilities since you can hide maps for players to find that will give them bookmarks they need to find their next goal.
Craft a blank map by putting 5 papers in an X pattern:
[code]
paper, ,paper
,paper,
paper, ,paper
[/code]
[img]http://i57.tinypic.com/20z5wmr.png[/img]
To place a bookmark into a map, just right click while wielding the map, select any bookmark from your list, and click the "write to cgpsmap" button. You can also put your current position into the map (without having to first create a bookmark in your compassGPS)
The map icon now changes to have a red X on it, so you can tell it is a marked map. This map can be given to another player. To transfer the bookmark to their own compassgps, they right click while wielding the marked map and a formspec like this pops up:
[img]http://i61.tinypic.com/jakj9v.png[/img]
You can change the name of the bookmark to whatever you wish, click the "copy bookmark to your compassgps" button and the new bookmark is now available in your compassgps list.
To turn a marked map back into a blank map, just put it into the crafting grid.
Thanks to some nice code by Miner59 you can now mount a map on a wall! If you can dig on the position where the map is placed, you can take the map, otherwise you can add the bookmark saved in the map in your compassgps. This will make it possible on a multiplayer server to mount maps that everyone can use.
---------------------
The code is kinda a mess, because I was learning a lot of new things while working on it. I hope to do a clean up on it sometime in the near future, but I wanted to release it now so some people could start testing it. Please do not hesitate to offer critiques, criticism, or coding advice. I'm new to lua and minetest and could use the help.
And above all, if you run into a bug, please let me know!
[b]Credits:[/b]
Original mod is by Echo and TeTpaAka, and probably PilzAdam. Cactuz_pl clockmod showed me how to write the hud to the screen. My son offered a lot of advice and suggested several changes. I got an example of how to sort lists in lua from Michal Kottman on StackOverflow. Big thanks to Bas080 and spootonium for providing some very nice alternate images for the compass gps mod! Also thanks to Topywo for the shared bookmarks idea, and to my son for several ideas, corrections, and testing help.
Map idea, image, and initial code by TeTpaAka. Store current position in map code contributed by Miner95
intllib support by TeTpaAka
Wall mounted maps by Miner59
[b]License:[/b]
Original code by Echo, PilzAdam, and TeTpaAka is WTFPL. My changes are CC0 (No rights reserved)
textures: original compass textures: CC BY-SA by Echo
compass b textures: CC BY-SA by Bas080 (slight modifications by Kilarin)
compass c textures: CC BY-SA by Andre Goble mailto:spootonium@gmail.com
(slight modifications by Kilarin)
map texture: CC BY-SA by TeTpaAka (slight modifications by Kilarin for blank map)
[b]Dependencies:[/b]
default is the only requirement.
PilzAdams Beds mod and the sethome-mod are supported if you have them.
[b]Incompatibilities:[/b]
This mod will clash with both the original compass and compass+ mods. They should not be installed and enabled at the same time as compassgps. HOWEVER, compassgps is 100% compatible with the bookmarks file from the compass+ mod. So if you were using compass+ and switch to compassgps you will NOT lose your previous bookmarks.
[b]github source:[/b]
[url]https://github.com/Kilarin/compassgps[/url]
[b]Download:[/b]
[url]https://github.com/Kilarin/compassgps/archive/master.zip[/url]
[b]To install:[/b]
Simply unzip the file into your mods folder, then rename the resulting folder from compassgps-master to compassgps
OR, simply install it directly from minetest using the online mod repository.
[b]Mod Database:[/b]
If you use this mod, please consider reviewing it on the MineTest Mod Database.
[url]https://forum.minetest.net/mmdb/mod/compassgps/[/url]
[b]Changelog:[/b]
2.7 bug fix: in a catastrophic server crash, compassgps_settings or bookmarks file could exist, but be empty. When the file exists but is empty, the table it is loaded into ends up as nil instead of empty and that causes the server to crash on startup. NOT GOOD! With bug fix, if file exists but is empty, server will start but not crash and new contents for empty file will be created. a message will appear in the debug informing server owner to restore bookmarks from backup if possible.
2.6 bug fix from myoung008, type causing crashes when entering bad color.
2.5 bug fix from TeTpaAka fix bug when static_spawnpoint is invalid
2.4 wall mounted maps by Miner59
2.3 intllib support by TeTpaTka so CompassGPS will work with different languages now!
2.2 current position option in bookmark list when writing to map (Miner95 contribution)
2.1 cgpsmap_marked notincreative and defaults to default on /giveme
2.0 maps so you can exchange bookmarks between players (TeTpaAka initial contribution)
1.9 corrected undeclared global variables to avoid warnings.
1.8 changed register_craft to compassgps:0 for unified inventory compatibility
1.7 fixed bug causing crash on first load of formspec in multiplayer
1.6 fixed compass point_to not saving
1.5 shared/admin bookmarks. confirm dialog for remove.
1.4 corrected teleport button priv
1.3 multiple compass types
1.2 rounding of position corrected
1.1 switched core to minetest
1.0 Initial release

View File

@ -30,6 +30,9 @@ function write_to_cgpsmap(itemstack, user)
end
textlist_bookmark[user:get_player_name()] = list
local formspec = "size[9,10;]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"button_exit[2,2;5,0.5;write;"..S("Write to cgpsmap").."]"..
"textlist[0,3.0;9,6;bookmark_list;"..list..";"..bkmrkidx.."]"
minetest.show_formspec(user:get_player_name(), "compassgps:write", formspec)
@ -40,9 +43,12 @@ end
function read_from_cgpsmap(itemstack, user, meta)
--print("read_from_cgpsmap")
local formspec = "size[9,5]"..
"button_exit[2,3;5,0.5;read;"..S("copy bookmark to your compassgps").."]"
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"button_exit[3,3;4,0.5;read;"..S("Copy bookmark to compassgps").."]"
if itemstack~=nil then
formspec=formspec.. "button_exit[3.1,4;2.6,0.8;rename;"..S("rename bookmark").."]"
formspec=formspec.. "button_exit[3.1,4;2.6,0.8;rename;"..S("Rename bookmark").."]"
else
itemstack=ItemStack("compassgps:cgpsmap_marked 1")
if meta then
@ -55,8 +61,8 @@ function read_from_cgpsmap(itemstack, user, meta)
end
selected_cgpsmap[user:get_player_name()] = itemstack
formspec=formspec.."label[2,0.5;"..S("bookmark pos:").." ("..meta["x"]..","..meta["y"]..","..meta["z"]..")]"..
"field[2,2;5,0.5;name;"..S("bookmark name:")..";"..meta["bkmrkname"].."]"
formspec=formspec.."label[2,0.5;"..S("Bookmark pos:").." ("..meta["x"]..","..meta["y"]..","..meta["z"]..")]"..
"field[2,2;5,0.5;name;"..S("Bookmark name:")..";"..meta["bkmrkname"].."]"
minetest.show_formspec(user:get_player_name(), "compassgps:read", formspec)
--print("read_from_cgpsmap end")
end

View File

@ -25,7 +25,7 @@ end
local hud_default_x=0.4
local hud_default_y=0.01
local hud_default_color="FFFF00"
local compass_default_type="a"
local compass_default_type="c"
local compass_valid_types={"a","b","c"}
local activewidth=8 --until I can find some way to get it from minetest
local max_shared=10 --how many shared bookmarks a user with shared_bookmarks priv can make.
@ -402,7 +402,10 @@ function compassgps.get_confirm_formspec(playername,bkmrkidx)
local bkmrk=textlist_bkmrks[playername][bkmrkidx]
return "compassgps:confirm_remove", "size[8,2;]"..
"label[0,0.2;"..S("Remove bookmark: ")..compassgps.bookmark_name_string(bkmrk).." ?]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"label[0,0.2;"..S("Remove: ")..compassgps.bookmark_name_string(bkmrk).." ?]"..
"button[0,0.7;4,1;confirm_remove_yes;"..S("Yes").."]"..
"button[4,0.7;4,1;confirm_remove_no;"..S("No").."]"
end
@ -1210,41 +1213,44 @@ function compassgps.get_compassgps_formspec(name)
end
local telebutton=""
if player_privs["teleport"] then
telebutton="button[4,9.3;3,1;teleport;"..S("teleport to bookmark").."]"
telebutton="button[6,9.3;3,1;teleport;"..S("teleport to bookmark").."]"
end
local sharedbutton=""
if player_privs["shared_bookmarks"] and not singleplayer then
sharedbutton="button[2.3,0.7;2.3,1;new_shared_bookmark;"..S("create shared").."]"
sharedbutton="button[2.4,0.7;2.2,1;new_shared_bookmark;"..S("create shared").."]"
end
local adminbutton=""
if player_privs["privs"] and not singleplayer then
adminbutton="button[4.6,0.7;2.3,1;new_admin_bookmark;"..S("create admin").."]"
adminbutton="button[4.5,0.7;2.1,1;new_admin_bookmark;"..S("create admin").."]"
end
local checkboxes=""
if not singleplayer then
checkboxes="label[3.65,1.75;"..S("Show:").."]"..
"checkbox[4.35,1.4;show_private;"..S("Private")..";"..view_type_P[name].."]"..
"checkbox[4.35,1.7;show_shared;"..S("Shared")..";"..view_type_S[name].."]"..
"checkbox[4.35,2.0;show_admin;"..S("Admin")..";"..view_type_A[name].."]"
checkboxes="label[3.85,1.75;"..S("Show:").."]"..
"checkbox[7.55,1.4;show_private;"..S("Private")..";"..view_type_P[name].."]"..
"checkbox[7.55,1.7;show_shared;"..S("Shared")..";"..view_type_S[name].."]"..
"checkbox[7.55,2.0;show_admin;"..S("Admin")..";"..view_type_A[name].."]"
end
return "compassgps:bookmarks", "size[9,10;]"..
"field[0,0.2;5,1;bookmark;"..S("bookmark")..":;]"..
"button[5.5,0;2.25,0.8;settings;"..S("Settings").."]"..
"button[0,0.7;2.3,1;new_bookmark;"..S("create bookmark").."]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"field[0.3,0.2;5,1;bookmark;"..S("bookmark name")..":;]"..
"button[6.5,0;2.25,0.8;settings;"..S("Settings").."]"..
"button[0,0.7;2.5,1;new_bookmark;"..S("Create bookmark").."]"..
sharedbutton..
adminbutton..
"button[6.9,0.7;2.4,1;remove_bookmark;"..S("remove bookmark").."]"..
"button[6.5,0.7;2.5,1;remove_bookmark;"..S("Remove bookmark").."]"..
"label[0,1.75;"..S("Sort by:").."]"..
"textlist[1,1.75;1.2,1;sort_type;"..S("name")..","..S("distance")..";"..sortdropdown.."]"..
"label[2.4,1.75;"..S("Dist:").."]"..
"textlist[3,1.75;.5,1;distance_type;3d,2d;"..distdropdown.."]"..
checkboxes..
"textlist[0,3.0;9,6;bookmark_list;"..list..";"..bkmrkidx.."]"..
"button[0,9.3;3,1;find_bookmark;"..S("find selected bookmark").."]"..
"textlist[0,3.0;8.8,6;bookmark_list;"..list..";"..bkmrkidx.."]"..
"button[0,9.3;3.3,1;find_bookmark;"..S("Show selected bookmark").."]"..
telebutton
end --get_compassgps_formspec
@ -1253,6 +1259,9 @@ function compassgps.get_settings_formspec(name)
local player = minetest.get_player_by_name(name)
return "compassgps:settings", "size[8,4;]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
"button[1,0.2;2.25,1;hud_pos;"..S("Change hud:").."]"..
"field[3.6,0.5;1.2,1;hudx;X:("..hud_default_x..");"..hud_pos[name].x.."]"..
"field[4.8,0.5;1.2,1;hudy;Y:("..hud_default_y..");"..hud_pos[name].y.."]"..

View File

@ -41,15 +41,15 @@ compassgps: hud color not valid hex number = compassgps: HUD Farbe ist keine zul
compassgps: hud coords are not numeric. Change to between 0 and 1 = compassgps: HUD Koordinaten sind keine Zahlen. Ändern sie diese zu Werten zwischen 0 und 1.
compassgps: hud coords out of range, hud will not be displayed. Change to between 0 and 1 to restore = compassgps: HUD Koordinaten sind außerhalb des zulässigen Bereichs. Ändern sie diese zu Werten zwischen 0 und 1 um das HUD wiederherzustellen.
compassgps:%s invalid bookmark = compassgps.%s ungültiger Wegpunkt
create admin = Erstelle Administratorwegpunkt
create bookmark = Erstelle Wegpunkt
create shared = Erstelle geteilten Wegpunkt
Create admin = Erstelle Administratorwegpunkt
Create bookmark = Erstelle Wegpunkt
Create shared = Erstelle geteilten Wegpunkt
current position : = Momentane Position :
distance = Entfernung
find selected bookmark = Finde den ausgewählten Wegpunkt
Show selected bookmark = Zeigen den ausgewählten Wegpunkt
list_bookmarks: Lists all bookmarks of a player = list_bookmarks: Zeigt alle Wegpunkte eines Spielers.
name = Name
remove bookmark = Entferne den Wegpunkt
Remove bookmark = Entferne den Wegpunkt
remove bookmark playername\=%s bkmrkidx\=%s = Entferne den Wegpunkt Spielername\=%s bkmrkidx\=%s
removed %s = %s entfernt.
set_bookmark: Sets a location bookmark for the player = set_bookmark: Setzt einen Wegpunkt für den Spieler.
@ -58,6 +58,7 @@ you can not remove someone elses bookmark: = Sie können den Wegpunkt eines ande
CompassGPS Map (blank) = CompassGPS Karte (leer)
CompassGPS Map (marked) = CompassGPS Karte (markiert)
Write to cgpsmap = Schreibe auf die Karte
copy bookmark to your compassgps = Kopiere den Wegpunkt in ihren Kompass.
bookmark name: = Name des Wegpunkts:
bookmark pos: = Position des Wegpunkts:
Copy bookmark to compassgps = Kopiere den Wegpunkt in Kompass.
Bookmark name: = Name des Wegpunkts:
Bookmark pos: = Position des Wegpunkts:
Rename bookmark = Lesezeichen umbenennen