BetonQuest is an advanced and powerful quest plugin. It offers RPG-style conversations with NPCs and a very flexible quest system.
Website | API Documentation | Contributing Documentation | Discord
An advanced and powerful quest scripting plugin for Minecraft. Features built-in RPG style conversations and integration for over 30+ other plugins.
Home Page: https://docs.betonquest.org
License: GNU General Public License v3.0
BetonQuest is an advanced and powerful quest plugin. It offers RPG-style conversations with NPCs and a very flexible quest system.
Why make two conditions which differ only with --inverted
? That not only increases chance of mistake, but also is very impractical. It should be possible to negate any condition when using it.
Every condition, event and objective should have some form of validating instruction string. This would prevent errors from incorrect user input and display a helpful message.
There should be also a conversation structure validation upon reloading. This would check if there are some missing options, if every condition/event is defined and so on.
Effect of these checks should be logged to a file, so nothing gets undetected.
As Bastikeks said,
It would require blocking all inventory modification except changing item in hand. Will be hard and complicated, as inventory modification in Bukkit is painful...
Not a bug because it can still be verified with conditions in NPC option.
is it possible to add an condition which checks if the player is inside a worldguard region?
Running BetonQuest events in Denizen scripts, checking BetonQuest conditions in Denizen scripts and running Denizen scripts with BetonQuest events.
I hate Denizen, someone do this for me please...
If an NPC has a path, he won't stop to have a conversation with a player. It breaks the immersion, so the movement should be stopped for the duration of conversation and then resumed.
If anyone can give me a hand figuring out what I might have wrong and causing the journal not to work, I'd appreciate it :)
my database is correct, I've checked it.
Thank you, Patti
Yet there are the commands /q condition and /q event which check or run conditions/events for yourself (possible for an admin)
It would be cool if admins also could do these commands for a specific player. e.g:
/q condition
/q event
Edit by Co0sh:
Currently the plugin uses 4 SQL tables: objectives, points, tags and journal. Other plugins could use the same names for the tables.
The conflict would happen especially on servers hosted by a Minecraft-specific hosting company. Most of them don't allow creating additional databases, so users have only one to chose. This means that if some other plugin uses points table there will be a conflict, which cannot be avoided.
The idea is to add "prefix" option to MySQL configuration (SQLite doesn't need this). This would name tables like betonquest_points, so there is no conflict.
This would only affect new users. The default file that generates will have "prefix" option set to betonquest_. Old users will have empty prefix so the table names remain the same. I highly encourage you to rename them for yourself in 1.6 version, to avoid conflicts in the future.
So every time I try to click on an npc I added to the npcs list I get the error. The regular default npc works, but any additions do not.
Log as follow:
8:34:35 PM
CONSOLE:
ERROR]: Cannot load plugins\BetonQuest\npcs.yml
8:34:35 PM
CONSOLE:
scanning a simple key
8:34:35 PM
CONSOLE:
'string', line 4, column 1:
8:34:35 PM
CONSOLE:
-----------------------------225 ...
8:34:35 PM
CONSOLE:
^
8:34:35 PM
CONSOLE:
found expected ':'
8:34:35 PM
CONSOLE:
'string', line 5, column 1:
8:34:35 PM
CONSOLE:
8:34:35 PM
CONSOLE:
^
8:34:35 PM
CONSOLE:
Method) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Source) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Source) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Source) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Method) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Source) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Source) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Source) ~[?:1.7.0]
8:34:35 PM
CONSOLE:
Source) [?:1.7.0]
8:34:35 PM
CONSOLE:
Source) [?:1.7.0]
8:34:35 PM
CONSOLE:
Source) [?:1.7.0]
8:34:36 PM
CONSOLE:
Source) [?:1.7.0]
8:34:36 PM
CONSOLE:
org.yaml.snakeyaml.scanner.ScannerException: while scanning a simple key; could not found expected ':'; in 'string', line 5, column 1:
8:34:36 PM
CONSOLE:
8:34:36 PM
CONSOLE:
^
and my test npcslist looks as such
0: 'innkeeper'
346: 'Test'
-----------------------------27024111239563--
Can you please help?
can you add a way for server admins to look at players progress through a website?
Written books with \n inside the text aren't supported by the condition if the item matches.
list: WRITTEN_BOOK data:0 title:§5List author:Notch text:§lSomecooltext§0moretext
works when checking via /q condition list
list: WRITTEN_BOOK data:0 title:§5List author:Notch text:§lSomecooltext§0\nmoretext
fails
The localization should be handled per-player. The server admin would specify which language is default and which languages are available to players. Players could then pick their favourite language using a command. The quests would have to be written in a default language, and they could have additional translations. If there were no translation for player's language, the plugin would fall back to default language.
The change would affect these things:
The items wouldn't be affected - they need to remain single language, even though the lore seems to be something that needs to be translated. Consider this situation: two players with different languages (and different lores) are exchanging their quest items. Now both of them cannot complete a quest.
Example of conversation option in multiple languages:
some_option:
text:
en: 'Hi there, traveler!'
pl: 'Witaj podrozniku!'
de: 'Hallo Abenteurer!'
conditions: 'cond1,cond2'
events: 'event1,event2,event3'
pointer: 'some_other_option'
The web-based editor is a big feature. It needs a web server embed inside a plugin to run. This server needs to be coded in order to do anything else.
/q reload command is hanging up the server for quite a long time when there are lot of players online and the database used is MySQL. That's because the plugin is disabling - saving all data to the database. It can be avoided by manually resetting every part of the plugin (like global locations listener) and keeping the data in memory.
If a player logs out with active countdown in folder event, then the events simply won't fire. It is acceptable for item or message but tag or command should be able to run even though the player is offline. This would allow creating timers for various quests, which are impossible to create now.
This would require to add checks in almost every event type and implement setting tags/points/journal/objectives directly into the database for offline players.
I dont know if this is even possible because arrows are entities which are not related to the player(?). Is it possible to check for an arrow-entity shot by the player and landed in a specific area?
so an objective could be to shoot an arrow to a specific aim-location to activate an event.
quote from http://dev.bukkit.org/bukkit-plugins/betonquest/?page=3#c151:
"when i have
iron: 'item item:iron_ingot amount:6'
not_enogh_iron: 'item --inverted item:iron_ingot amount:6'
i imply that the conditions "iron" is true, when i have iron_ingot 6 or above
"not_enogh_iron" is true if i have less than 6.
But i experienced that it is only true when i have exactly 0..."
Has slightly to do with #23 .
But preventing item drops doesnt solve the bug itself
Just had a curious idea that you could add a condition which checks if the player is sneaking while doing something. By this it would be possible to interact different with NPCs:
R-Click NPC: start normal conversation
Shift+R-Click: when "stealing" learned you may could steal something from this NPC
ATM i use R: BetonQuest v1.5.3 for 1.8 Dec 26, 2014
with bukkit 1.7.9 R0.2 and got this erros if i use any command (testet /g and /j)
Items given in quests can easily be lost on death. The backpack would keep them for players and would prevent from loosing them in any other way.
The quest item should have a configurable string in it's lore ("Quest Item" by default) and have it's representation in items.yml file to be stored to backpack on dropping.
The player should be also able to get quest items from backpack to normal inventory in order to use them in quests.
This would affect give and take events and item condition. Hand cannot be affected as the player can't hold more than one type of item in his hand.
The syntax should be like item_name:5,second_item
, which means 5 of item_name and one second_item.
Maybe im using this wrong, but the time condition seems to doesn't work for me correctly. I have 2 conditions:
night: 'time time:5-18 --inverted' //so time between 18:00 and 05:00
day: 'time time:5-18'
it detects night at daytime and day at nighttime.
Im changing the time via /time command.
When making
night: 'time time:5-18'
day: 'time time:5-18 --inverted'
it seems to work on the most part of the minecraft day then BUT when the time is set to 17 o'clock the condition of night is already true. So around 1 hour of the desired min/max-time there is a wrong handling.
I think this is because the time is calculated via ticks(?) and it has to be +60 "Minutes" to detect if it's really inside the range. But i don't understand why --inverted is handled the other way around then...
This would require player to put items in a specific chest, similarly to a Skyrim quest, where you had to deliver food to Greybeards temple and put it inside a chest.
Backup files make the plugin's root folder unorganized. They should be moved into a separate backup folder, and the new ones should be created in that folder as well.
Actually creating conversations have a lot to do with reloading the plugin and testing all the stuff you wrote down. While in this process of creating conversation/quests/etc it would be cool to disable some npcs and only for players who don't have a specific permission (so admins can do their job).
Would be easy to implement:
add a line in the .yml called "disabled: true/false".
When false, everything is normal as it is now
When true only people with specific permission can talk to this npc.
By that the NPC can be configured without any side effects like wrong rewards or broken events/conditions until everything is configured.
Chat messages prefixed with #
should be handled as normal chat, so it's possible to talk with others while in conversation.
Already done, added it for informational purposes.
It would be nice to fire events from a script or use BetonQuest's conditions inside of Skript's scripts.
There is no easy way of implementing this. It's hard to keep track of those potions in brewing stands, as players can put them inside (as opposed to crafting table or furnace). It is possible though, as mcMMO proves.
SetBlock event throws async block remove error: paste
check for the minimum or maximum level of a player
You can't be summoning demons without red leather armor, so it should be possible to check it with conditions or give with events. This would be an argument color:ff0000
inside item's definition, only valid if it's a leather armor (wools and dyes handle colors with data values). Fireworks and enchanted books would be a good idea too. Here's the list:
Im a fountain of ideas ideas :)
Why not including an event which includes a list of events (like the folder event). But instead of activating all just one (or a defined amount of events) will trigger randomly. By this it's possible to get random rewards or activate random objectives.
when typing /q ingame :
points have the description of tags
item has the description of events
See sourcecode (https://github.com/Co0sh/BetonQuest/blob/1e76fa88dd59a066ff8ee487968941247d8689f1/src/main/java/pl/betoncraft/betonquest/inout/QuestCommand.java):
sender.sendMessage("§e----- §aBetonQuest §e-----");
sender.sendMessage("§c/"+alias+" reload §b- " + getMessage("command_reload"));
sender.sendMessage("§c/"+alias+" objectives §b- " + getMessage("command_objectives"));
sender.sendMessage("§c/"+alias+" tags §b- " + getMessage("command_tags"));
sender.sendMessage("§c/"+alias+" points §b- " + getMessage("command_tags")); //HERE
sender.sendMessage("§c/"+alias+" condition <id> §b- " + getMessage("command_condition"));
sender.sendMessage("§c/"+alias+" event <id> §b- " + getMessage("command_event"));
sender.sendMessage("§c/"+alias+" item <id> §b- " + getMessage("command_event")); //HERE
sender.sendMessage("§c/"+alias+" purge <player> §b- " + getMessage("command_purge"));
have you thought about a quest map?
Related to: http://dev.bukkit.org/bukkit-plugins/betonquest/?comment=156
Hi, i think the MobKill objective is not working because some changes in MMobs api. The plugin is trying to hook into MMobs but failing to register some events from the MMobs api. Maybe they've changed something in theirs api that makes the objective not to work.
It would be nice to have NPCs asking riddles and players responding to them with normal messages (not just 1, 2 or 3). This would however require a lot of modifications in conversation structure. Don't worry, standard numeric options will still be main thing.
General TODO list of things that need to be done sometime.
adding &0-9a-f + formatting to the journal text would make texts more configurable with keywords, etc.
&r (reset) should fallback to color black instead of white if course...
Just discovered that meta data like the color of dyed leather armor and things like attribute modifiers (movementspeed and so on) doesn't get saved via /q item . Is there a manual way to add them?
If a player is in a conversation and the plugin gets reloaded, then the player won't be able to start any other conversation until he quits and joins the server again.
This is probably due to a sudden disabling of the plugin: the conversation can be removed only in the next tick, and the plugin stops working before the next tick.
It will be partially fixed by #5. The plugin will still contain hard reloading though, so it needs to be fixed anyway.
Currently there is no way of targeting items without enchants (etc). If the player has "Diamond Sword of Death" with sharpness V in the first slot and normal diamond sword on second, and then we'll remove one diamond sword (without enchants specified) then the first, expensive sword will be removed. Bad thing.
It should be possible to specify enchants:none
option, so conditions/events would target items only if they have no enchants at all.
Bug label because the above example should be considered as a bug.
Some server configurations can't parse special characters from messages.yml (Chinese translation specifically). They should be removed from defaults and added separately after validating that the server can read them.
It would be nice to have a choice between conversations in chat and chest GUI.
Can you please add NPC effects
Such as Note - Jukebox music note effect over the NPC head.
This is just a visual effect near NPC's that have an available Quest/Conversation(s) for a player.
Thanks,
madtomic
permissions: list of permission nodes needed to start a conversation or trigger objective
This would block using old options in conversation and spamming numbers afterwards.
The best idea is to generate unique string for each option and make it run a command with this string. All these commands would be ignored by the plugin except the ones currently active. The biggest problem would be to hide these commands from console to prevent spamming.
The idea taken from #40.
This one would require the player to right-click an NPC. It should also consider clay NPCs. Clicking could be optionally canceled to prevent starting a conversation.
Reward option
Hook into playerpoints
Plugin like bossshop and playervip could use this playerpoints
http://dev.bukkit.org/bukkit-plugins/playerpoints/
http://dev.bukkit.org/bukkit-plugins/lorinthsrpgmobs/
Please add support for this.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.