Giter Club home page Giter Club logo

betonquest's Introduction

betonquest's People

Contributors

adolfotupo avatar ahobowhosnameisu avatar archerymaister avatar b0n541 avatar bundabrg avatar chronoken avatar darkshimy00 avatar dependabot[bot] avatar dudeplayz avatar dzejkop avatar emibergo02 avatar firlefunke avatar j0b10 avatar jack-mckalling avatar jaroslawchladowicz avatar lorias-jak avatar motrellin avatar mrguitz avatar mwfiae avatar passeo avatar ravingar avatar riledupcrow avatar rtartakovsky avatar saltyaimbotter avatar seyfahni avatar theosree avatar toddharrison avatar vjh0107 avatar wolf2323 avatar yuyukey avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

betonquest's Issues

ERROR]: Cannot load plugins\BetonQuest\npcs.yml

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?

Block dropping items while in conversation

As Bastikeks said,

  1. line "here is your gold" is available (but you dont click/choose it yet) because you have enough gold in your inventar
  2. you drop the gold
  3. you are still able to choose the line now.
  4. events fire and may take the gold (which the player hasnt anymore)
  5. you pickup the gold you dropped before
  6. yay cheated.

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.

! inversion seems to check wrong in player options

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

Potion brewing objective

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.

Validation of input and checking for errors

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.

  • Conversation structure checking
  • Validating instruction strings in conditions
  • Validating instruction strings in events
  • Validating instruction strings in objectives
  • Validating item instructions

Colorcodes in journal

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...

Attribute modifiers in items.yml

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?

Web end for admin

can you add a way for server admins to look at players progress through a website?

Add table prefixes to avoid conflicts in MySQL databases

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.

Denizen support

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...

Show NPC effects

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

Time condition not working properly

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...

Implement web server for the editor

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.

Quest map

have you thought about a quest map?

Wrong descriptions in /q

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"));

Backpack for quest items

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.

Put item in chest objective

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.

Special characters not allowed

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.

New objective: arrowshot

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.

Missing attributes in items.yml

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:

  • BookMeta
  • EnchantmentStorageMeta
  • LeatherArmorMeta
  • PotionMeta
  • SkullMeta

Handling clickable options with unique commands

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.

Multiple items in events/conditions

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.

Sneak Condition

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

More options for /q command

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:

  • Firing events for online players
  • Checking conditions for online players
  • Listing, adding and removing tags for players
  • Listing, adding and removing points for players
  • Listing, adding and removing objectives for players
  • Listing, adding and removing journal entries for players
  • Setting configuration using a command
  • Creating backups

Remove lag on /q reload

/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.

Take, hand and item targeting stuff only without enchants/effects/etc.

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.

Folder event's delay persistency

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.

Active conversation blocks starting new ones after plugin's reload

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.

Making the code better

General TODO list of things that need to be done sometime.

  • Comments - the code is not documented well 😞
  • Debugging - it would be nice to be able to see what's going on inside the plugin
  • Refactoring - some pieces of code could be better (eg. async ResultSet handling)
  • Optimizations - because why not?

Random Event

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.

Item conditions \n in written books aren't recognized correctly

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

Skript support

It would be nice to fire events from a script or use BetonQuest's conditions inside of Skript's scripts.

NPC Interact Objective

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.

Move backup files to backup folder

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.

disable npc conversation for maintenance reasons

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.

Dynamic localization

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:

  • Conversations
  • Journal
  • Message event
  • Command event

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'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.