GithubHelp home page GithubHelp logo

spring-chobby / chobby Goto Github PK

View Code? Open in Web Editor NEW
24.0 6.0 62.0 598.93 MB

Spring RTS Ingame lobby project

Lua 98.87% Shell 0.03% GLSL 0.02% HTML 0.57% CSS 0.10% Makefile 0.13% Batchfile 0.13% Python 0.16%

chobby's Introduction

Chobby, the ingame lobby.

Installation

There are multiple ways you can install Chobby.

1. Chobby.exe wrapper (recommended)

Download chobby.exe from http://zero-k.info/lobby/chobby.exe and run it. It will download the newest version of Chobby as well as the required engine, and automatically start it. Should work under Windows and Linux.

2. Rapid (pr-downloader)

Chobby is on rapid, under the "chobby" tag.

To download with pr-downloader use this command line:

pr-downloader chobby:test

You will need to obtain the appropriate engine and configure it manually.

3. Development version from Github

The development version of Chobby can be obtained directly from here, and should be placed in your games subdirectory. Example (execute in your games folder):

git clone https://github.com/Spring-Chobby/Chobby.git Chobby.sdd

Launching

If you're using the wrapper, you don't need to read this. Just go ahead and run the executable.

Chobby is a Lua Menu and requires the newest engine. For exact version, see the engine tag in modinfo.lua (https://github.com/Spring-Chobby/Chobby/blob/master/modinfo.lua#L19).

For development version of Chobby (obtained from Github), you can launch Chobby by running spring --menu 'Chobby $VERSION' or by setting DefaultLuaMenu = Chobby $VERSION in your springsettings.cfg (https://springrts.com/wiki/Springsettings.cfg). Versions obtained from Github should follow the same procedure, but set the appropriate fixed version instead, e.g. Chobby test-1145-2d0ef36, instead of Chobby $VERSION.

If you are using chobby:test from rapid, you can specify rapid directly, instead of setting the version manually. e.g. spring --menu 'rapid://chobby:test' and DefaultLuaMenu = rapid://chobby:test

See the wiki for more details, including Game Customization

chobby's People

Contributors

aquanim avatar ashdnazg avatar azaremoth avatar beherith avatar cat-lady avatar crazyeddietk avatar danfireman avatar deinfreund avatar dvr333 avatar esainane avatar fir3bal avatar forbodingangel avatar gajop avatar googlefrog avatar histidine91 avatar jk3064 avatar kikito avatar lebdooder avatar licho1 avatar masterbel2 avatar porkch0p avatar raph-amiard avatar rlcevg avatar ruwetuin avatar scorchedearther avatar silentwings avatar sprunk avatar thorneel avatar turboss avatar yonaba 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

chobby's Issues

Rapid pause, cancel and queue reordering

Implement the required engine functions:
VFS.PauseDownload(downloadID)
VFS.ResumeDownload(downloadID)
VFS.StopDownload(downloadID)
VFS.SetDownloadPriority(downloadID, priority)
VFS.GetDownloadPriority(downloadID) -> number priority

Duplicate DownloadFinished?

These two lines appear to be defining DownloadFinished twice:

Because of this:
https://github.com/gajop/Chobby/blob/master/LuaUI/widgets/chobby/core.lua#L43

I dislike the line "ChiliLobby = widget". This global variable should be off limits. Ideally the widget file would just be a wrapper widget and none of the included files would respond to Spring callins. The widget would wrap everything.

Occasional list_window panel2 error

Sometimes this error occurs. I do not know what the effect of the error is.

[f=0057244] [liblobby] Error: [string "LuaUI/widgets/chobby/components/list_window..."]:164: attempt to index local 'panel2' (a nil value)
stack traceback:
[string "libs/liblobby/lobby/observable.lua"]:65: in function '_PrintError'
[string "libs/liblobby/lobby/observable.lua"]:59: in function <[string "libs/liblobby/lobby/observable.lua"]:59>
[string "LuaUI/widgets/chobby/components/list_window..."]:164: in function 'RecalculatePosition'
[string "LuaUI/widgets/chobby/components/list_window..."]:122: in function 'AddRow'
[string "LuaUI/widgets/chobby/components/battle/batt..."]:132: in function 'AddBattle'
[string "LuaUI/widgets/chobby/components/battle/batt..."]:9: in function 'listener'
[string "libs/liblobby/lobby/observable.lua"]:58: in function <[string "libs/liblobby/lobby/observable.lua"]:58>
[C]: in function 'xpcall'
[string "libs/liblobby/lobby/observable.lua"]:58: in function '_CallListeners'
[string "libs/liblobby/lobby/interface_zerok.lua"]:722: in function 'method'
[string "-- Copyright (c) 2012-2014 Roland Yonaba..."]:170: in function 'super'
...
[string "-- Copyright (c) 2012-2014 Roland Yonaba..."]:170: in function 'super'
[string "libs/liblobby/lobby/wrapper_zerok.lua"]:358: in function 'SafeUpdate'
[string "libs/liblobby/lobby/interface_shared.lua"]:207: in function <[string "libs/liblobby/lobby/interface_shared.lua"]:207>
[C]: in function 'xpcall'
[string "libs/liblobby/lobby/interface_shared.lua"]:207: in function 'Update'
[string "libs/liblobby/LuaUI/widgets/api_lobby.lua"]:66: in function <[string "libs/liblobby/LuaUI/widgets/api_lobby.lua"]:65>
(tail call): ?
[C]: in function 'pcall'
[string "LuaHandler/Utilities/crashHandler.lua"]:50: in function 'f'
[string "LuaHandler/Utilities/specialCallinHandlers...."]:80: in function <[string "LuaHandler/Utilities/specialCallinHandlers...."]:76>
[f=0057244] [liblobby] Error: [string "LuaUI/widgets/chobby/components/list_window..."]:164: attempt to index local 'panel2' (a nil value)
stack traceback:
[string "libs/liblobby/lobby/observable.lua"]:65: in function '_PrintError'
[string "libs/liblobby/lobby/observable.lua"]:59: in function <[string "libs/liblobby/lobby/observable.lua"]:59>
[string "LuaUI/widgets/chobby/components/list_window..."]:164: in function 'RecalculatePosition'
[string "LuaUI/widgets/chobby/components/battle/batt..."]:144: in function 'JoinedBattle'
[string "LuaUI/widgets/chobby/components/battle/batt..."]:19: in function 'listener'
[string "libs/liblobby/lobby/observable.lua"]:58: in function <[string "libs/liblobby/lobby/observable.lua"]:58>
[C]: in function 'xpcall'
[string "libs/liblobby/lobby/observable.lua"]:58: in function '_CallListeners'
[string "libs/liblobby/lobby/interface_zerok.lua"]:888: in function 'method'
[string "-- Copyright (c) 2012-2014 Roland Yonaba..."]:170: in function 'super'
[string "libs/liblobby/lobby/wrapper_zerok.lua"]:162: in function '_OnJoinedBattle'
...
[string "-- Copyright (c) 2012-2014 Roland Yonaba..."]:170: in function 'super'
[string "libs/liblobby/lobby/wrapper_zerok.lua"]:358: in function 'SafeUpdate'
[string "libs/liblobby/lobby/interface_shared.lua"]:207: in function <[string "libs/liblobby/lobby/interface_shared.lua"]:207>
[C]: in function 'xpcall'
[string "libs/liblobby/lobby/interface_shared.lua"]:207: in function 'Update'
[string "libs/liblobby/LuaUI/widgets/api_lobby.lua"]:66: in function <[string "libs/liblobby/LuaUI/widgets/api_lobby.lua"]:65>
(tail call): ?
[C]: in function 'pcall'
[string "LuaHandler/Utilities/crashHandler.lua"]:50: in function 'f'
[string "LuaHandler/Utilities/specialCallinHandlers...."]:80: in function <[string "LuaHandler/Utilities/specialCallinHandlers...."]:76>

Load Map/Game archive

It seems like we already have
VFS.UseArchive VFS.MapArchive VFS.UnmapArchive
but instead of working with files, they should use Map and Game archives that can be in .sd7, sdz, .sdd or in the rapid pool. The format is abstracted and the should be loaded by name, instead of having to know the correct path as it's currently implemented.

Create the Download panel

Should handle both rapid names and full archive names.
Initially we don't need search or game list (this will require some engine/pr-downloader changes)

Weird recursion(?) causing OOM

Happens sometimes, last one just happened as I launched Chobby

[f=-000001] Fatal: LuaUI: cannot allocate more memory! (805307079 bytes already used, 805306368 bytes maximum)
[f=-000001] Fatal: LuaUI: cannot allocate more memory! (805307079 bytes already used, 805306368 bytes maximum)
[f=-000001] Fatal: LuaUI: cannot allocate more memory! (805307079 bytes already used, 805306368 bytes maximum)
[f=-000001] Fatal: LuaUI: cannot allocate more memory! (805307079 bytes already used, 805306368 bytes maximum)
[f=-000001] Error: LuaUI::RunCallIn: error = 4, Update, [Internal Lua error: Call failure] not enough memory

Create username object

This is an object to replace the current buttons with usernames attached. It would consist of a control (probably panel or button) with stuff inside it. The purpose of the object is to have a consistent way to display and interact with user names across many types of user list. The stuff can then be defined in one place.

Possible stuff:

  • A button with a dropdown menu for chat, invite to game, private message etc..
  • Images for flag, rank etc...

Fix the current mainmenu->subtree navigation confusion

It has a number of issues:
1) There's no indication of where in menu tree you are. This should be done by introducing breadcrumbs or a fully visible tree (e.g. by using Content Place for the subtree like how Dota2/LoL do it). Breadcrumbs might not be clear and also too wide.
2) Exit button should be far away from other buttons, probably all the way in the bottom, so people don't press it accidentally.
3) Buttons should use fixed size, especially height (#68)
4) There is no indication to the user what button explores the subtree and what does something else, like open something in the Concent Place

I think it's key to get the basic interface going very early in the project.

Restructure liblobby

Change the liblobby architecture:

  • Implement a top-level, protocol class with a higher level of abstraction for shared datastructure, callins and callouts for ZK and uberserver. Essentially moving the wrapper classes here
  • Make the current interface ZK and interface uber classes inherit from this class and add protocol-specific implementation to it.

Notifications when message directed to us has been received

We need to make the program flash/set the alarm state,and preferably also send an OS message (e.g. notify-send on Linux).
The type of thing to send depends on whether the program is opened or not, as well as whether the channel/private chat is focused(selected).

Automatically initiate downloads for missing maps and games in battlerooms

Required engine changes are split to a different issue now. This just includes the Lua stuff.

  • Maybe show current download percentage, current/total size in MBs,
    eta, and similar
  • Abstract the download panel outside of battleroom. It's really not
    specific to BRs and could be used as a chili component.
  • Check for possible new download by invoking MaybeDownloadGame(battle) and
    MaybeDownloadMap(battle) when map/game changes.

Rapid game and map search

Add ability to search for rapid games and maps based on either name and/or rapidname.
VFS.SearchArchives(searchString, archiveType)
with callins
OnSearchStart(searchID, searchString, archiveType)
OnSearchComplete(searchID, results)
OnSearchFailed(searchID, errorID)

Join/leave channels using buttons

There should be a + button somewhere in the chat panel, and clicking on it should make it possible to join a channel.
Also, channels should be closed when clicking on a corresponding X button.

Spring Subprocess tracking - basic functionality

We need to be able to know whether the started Spring subprocess has terminated or not.
A simple Spring.IsSubProcessAlive(subprocessPID) -> boolean isAlive, where subprocessPID is only valid if it's a previously started (from this instance) Spring subprocess

Allow Chili skins to be loaded from specific folder

This should allow us to create skins outside of the Chili folder and make it easier to use the library while keeping all project-specific stuff out of the library folder.
It shouldn't be too hard to do, but requires some internal Chili knowledge.
Here are how some example functions could look like:
SkinUtils:AddSkinFolder(folderPath)
SkinUtils:RemoveSkinFolder(folderPath)

Create Settings Screen

The settings screen should be in a tab on the right panel. It should include settings for ingame and settings for the lobby. These settings will need to be stored in a config and applied either just before Spring.Start or when the lobby is closed (to make the lobby have the right settings next time).

Persist currently joined channels in configuration and rejoin them on login

Modal windows and click-through

Sometimes it's possible to click through chili windows to select components underneath. This is particularly annoying when the chili theme isn't transparent.
Modal windows should also enforce that no other window/component can be clicked while the current one is being interacted with, essentially like dialogues should work.

Report and monitor Chili RTT bug

Chili Render To Texture can cause bugs with unresponsive controls. This has been disabled to remove the confusion during other development. Ideally RTT would be fixed upstream and reenabled. https://github.com/Spring-Chobby/Chobby

To reproduce:

  • Create a list_window which has a scrollbar.
  • Scroll to the bottom of the list.
  • Modify the children of an item near the top of the list. One that is not visible.
  • Scroll back up the list and notice that the modification has not visibly taken effect.
    The modified child will now be unresponsive. The visuals of the window are stuck on one state. Buttons are still clickable.

Rapid tag and update games

Tagging games should download and install them and also save this information so that they can be updated.
VFS.TagGame()
VFS.UntagGame()
VFS.UpdateGames()
VFS.ListTaggedGames()

Channel + Private chat history

Most recent history (10-50 lines) should be displayed on join, but maybe also make it possible to see a larger amount of history (we don't want too much bloat though).

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.