Giter Club home page Giter Club logo

ror2-vstwitch's Introduction

Vs Twitch

This is a server-side mod! Only the host needs this mod installed!

Tired of having your Twitch audience watch run after run after run without them being able to meaningful interact with you in-game? Look no further, as this mod allows your audience to become the "randomness", the "aggressor", and... Mithrix.

Will your chat help you along your journey, or try to stop your run early? Chat can influence what drops you get from chests, as well as donating Twitch Bits to create random events you must fight through to survive.

First Time Setup

  1. Launch the game so that the configuration file is created for the first time. Exit the game.
  2. Edit the configuration file to suite your needs. See the Configuration tables below for more info.
    • Currently, Channel, and ImplicitOAuth need to be filled out at a minimum (if you use nothing but the default values for the mod) from the "Twitch" section.
    • ImplicitOAuth is a password and SHOULD NOT be shown on stream!
  3. Launch the game (hint: you might want to watch the intro scene one more time...)

Configurations

In game editting (via RiskOfOptions)

This mod has a dependency on RiskOfOptions and so many values can be dynamically updated while you are in the game. Note that some options need a restart for changes to be fully applied; the options menu will mark this accordingly when needed. Below you'll see a column for what configurations can be modified in game via the ✔️ marking; otherwise it'll have a ❌.

Twitch

WARNING: If the mod continues failing to connect to Twitch, check and/or update your ImplicitOAuth token!

Important note for modpack creators: Ensure your configuration files DO NOT INCLUDE ImplicitOAuth!

Config Type Default RiskOfOptions Notes
Channel text ✔️ The channel to monitor Twitch chat
Username text ✔️ The username to use when calling Twitch APIs. If you aren't using a secondary account, this should be the same as Channel
ImplicitOAuth text The "password" to access Twitch APIs. Please visit twitchapps.com to get the password to put here. Note that this password is not sent to any servers other than Twitch to authenticate. DO NOT GIVE THIS TO ANYONE. To revoke this password, go to Twitch Connections Settings and Disconnect the app named "Twitch Chat OAuth Token Generator".
DebugLogs true/false false ✔️ Enable debug logging for Twitch - will spam to the console!
ClientID text q6batx0epp608isickayubi39itsckt The client ID of the app that you used to populate the ImplicitOAuth field. If you used twitchapps.com this would be the default value. If you used another Twitch app, this needs to be changed accordingly.
EnableItemVoting true/false true ✔️ Enables the main feature of this mod. Disable it if you only want to enable bit interactions.
VoteDurationdSec number (secs) 20 ✔️ How long to allow Twitch to vote on items. Increase this value if viewers think the voting is going too "fast" - they might have their video delay too great.
VoteStrategy string MaxVote ✔️ How to tabulate votes. See "Voting Strategies" below for the various values this setting may have.
BitsThreshold number 1500 ✔️ The number of bits needed to cause an in-game event.
CurrentBits number 0 Do not edit this field. Used as storage whenever someone donates bits so that restarting the game doesn't clear the donation count.
PublishToChat true/false true ✔️ Publish events (like voting) to Twitch chat.

Help, I accidentally gave someone my ImplicitOAuth token!

To revoke this password, go to Twitch Connections Settings and Disconnect the app named "Twitch Chat OAuth Token Generator". You can then regenerate a new token via twitchapps.com and put it in the config; but, keep it safe this time!

Tiltify

This mod supports basic integration for Tiltify campaigns. Donations cause a random "Bit Event", following the weightings in the "Event" section of the configuration.

How do I find my Campaign ID? Once your campaign is created, navigate to your Campaign Dashboard --> Detail tab and find your campaign ID. It should be a six to seven digit number.

Config Type Default RiskOfOptions Notes
CampaignId string ✔️ The Campaign ID to track donations; put a 0 to disable Tiltify integration

Vote Strategies

These are the various voting strategies you can use for the VoteStrategy setting.

MaxVote

Item with the most votes wins. Ties are broken by choosing the first item that got the most votes.

MaxVoteRandomTie

Item with the most votes wins. Ties are broken by choosing randomly from the highest votes items.

Percentile

Item is chosen by a weighted random selection. If item 1 has 3 votes, item 2 has 4 votes, and item 3 has 1 vote (making a total of 8 votes), then the probabilites for choosing the item are as follows:

  • Item 1: 3 / 8 = 37.50% chance
  • Item 2: 4 / 8 = 50.00% chance
  • Item 3: 1 / 8 = 12.50% chance

ChannelPoints

WARNING: Not typing the Channel Points title in exactly will cause the specific feature not to work! You should see a warning in the console if this happens.

See the Twitch Channel Points Guide (section "Custom Rewards") for how to create custom rewards. The Reward Name/Channel Points Title needs to be pasted into the configuration exactly as entered (case sensitive).

Config Type Default RiskOfOptions Notes
Enable true/false true ✔️ Enable all Channel Point features
AllyBeetle text ✔️ (Case Sensitive!) Channel Points Title to spawn Ally Elite Beetle. Leave empty to disable.
AllyLemurian text ✔️ (Case Sensitive!) Channel Points Title to spawn Ally Elite Lemurian. Leave empty to disable.
AllyElderLemurian text ✔️ (Case Sensitive!) Channel Points Title to spawn Ally Elite Elder Lemurian. Leave empty to disable.
RustedKey text ✔️ (Case Sensitive!) Channel Points Title to give everyone a Rusted Key. Leave empty to disable.
BitStorm text ✔️ (Case Sensitive!) Channel Points Title for the bit storm bit event.
Bounty text ✔️ (Case Sensitive!) Channel Points Title for the doppleganger bit event.
ShrineOfOrder text ✔️ (Case Sensitive!) Channel Points Title for the Shrine of Order bit event.
ShrineOfTheMountain text ✔️ (Case Sensitive!) Channel Points Title for the Shrine of the Mountain bit event.
Titan text ✔️ (Case Sensitive!) Channel Points Title for the Aurelionite bit event.
LunarWisp text ✔️ (Case Sensitive!) Channel Points Title for the Lunar Chimera (Wisp) bit event.
Mithrix text ✔️ (Case Sensitive!) Channel Points Title for the Mithrix bit event.
ElderLemurian text ✔️ (Case Sensitive!) Channel Points Title for the Elder Lemurian bit event.

Event

When your channel hits the defined bit goal (via the BitsThreshold config setting), a random in-game event will occur. If enough bits are donated to trigger the goal more than once, the event's will continue to trigger until the bits are reduced under the given goal. For example, if the bit goal is 500 and someone donates 1040 bits, there will be two bit events and the current bit count will reset to 40 bits (1040 - 500 - 500 = 40).

To disable an event, simply set the weight to 0. Giving a higher weight increases the probability that the event will occur.

Config Type Default RiskOfOptions Notes
BitStormWeight number 1 ✔️ Weight for the bit storm bit event. Dodge the meteors while trying to move ahead in the stage!
BountyWeight number 1 ✔️ Weight for the doppleganger bit event. Your Doppleganger has come to try to stop you!
ShrineOfOrderWeight number 1 ✔️ Weight for the Shrine of Order bit event. What's this? You see a Shrine that looks rare, and seems to emit a purple hue. You can't help yourself, but you offer a Lunar coin to it...
ShrineOfTheMountainWeight number 1 ✔️ Weight for the Shrine of the Mountain bit event. You have angered the Twitch Chat gods. Prepare for your final battle at the teleporter.
TitanWeight number 1 ✔️ Weight for the Aurelionite bit event. Aurelionite comes from the void to try to stop you! (Until this monster is killed, the teleporter will not fully charge)
LunarWispWeight number 1 ✔️ Weight for the Lunar Chimera (Wisp) bit event. Lunar Chimera's come from the void to try to stop you! (Until these monsters are killed, the teleporter will not fully charge)
MithrixWeight number 1 ✔️ Weight for the Mithrix bit event. Twitch Chat decides to enter your stage to stop you a little earlier in the run... (Until this monster is killed, the teleporter will not fully charge)
ElderLemurianWeight number 1 ✔️ Weight for the Elder Lemurian bit event. Elder Lumerian's come from the void to try to stop you! (Until these monsters are killed, the teleporter will not fully charge)

UI

Config Type Default RiskOfOptions Notes
SimpleUI true/false false ✔️ If enabled, simplifies the item vote UI by putting a single popup in the top-middle of the game screen. If you are playing with multiple people, or generally have a lot of drones, enabling this option can help with clutter on the left side of the game window.

Behaviour

Config Type Default RiskOfOptions Notes
EnableChoosingLunarItems true/false true ✔️ If enabled, Lunar Pod item/equipment drops will be decided by Twitch Chat.
ForceUniqueRolls true/false false ✔️ If enabled, all rolls will be guaranteed to be unique. No more rolls with three rusted keys!

Language

Config Type Default RiskOfOptions Notes
EnableLanguageEdits true/false true ✔️ If enabled, some in-game texts will get replaced with Twitch related texts.

Chat Commands

Chat commands can only be executed by Moderators or the Broadcaster of the channel. All other users will be ignored silently.

Bit Events

  • !roll - Forces a random bit event to occur.
  • !meteor - Force Meteor shower bit event.
  • !bounty - Force Doppleganger bit event.
  • !order - Force a Shrine of Order bit event.
  • !mountain - Force a Shrine of the Mountain bit event.
  • !titan - Force Aurelionite bit event.
  • !lunar - Force Lunar Chimera (Wisp) bit event.
  • !mithrix - Force Mithrix bit event.
  • !lemurian - Force Elder Lemurian bit event.
  • !grandparent - Force Grandparent bit event (not currently supported).

Ally Events

  • !allychip <name> - Spawn ally Beetle with the given name.
  • !allysuperchip <name> - Spawn random elite ally Beetle with the given name.
  • !allydino <name> - Spawn ally Lemurian with the given name.
  • !allysuperdino <name> - Spawn random elite ally Lemurian with the given name.
  • !allybigdino <name> - Spawn ally Elder Lemurian with the given name.
  • !allysuperbigdino <name> - Spawn random elite ally Elder Lemurian with the given name.

Other

  • !rustedkey <name> - Give all players a rusted key (with the given name being who gave it).

Console Commands

These console commands are generally for testing purposes. You should never need to use them during a run.

  • vs_connect_twitch <channel> <access_token> [username] - Connect to Twitch. Note that this automatically happens when starting a new run.
  • vs_add_bits <bits> - Force add bits to the game. Going over the bit goal will trigger an in-game event.
  • vs_set_bit_goal <bits> - Sets the bit goal and saves it to the config file.

Changelog

1.0.14

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/12?closed=1

  • Added new dependency: RiskOfOptions
  • Refactored configurations to hook into RiskOfOptions
  • Allowed ChannelPoints to be dynamically updated in game (previously they were coded that you needed a restart)
  • Unified the logging system. You should now be able to filter all of Vs Twitch logs easily via the mod launcher.

1.0.13

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/11?closed=1

  • Overall, minor bug fixes
  • Fixed items not being given to everyone in multiplayer when item voting turned on
  • Added maintainer chat command (to help me verify myself in a channel)
  • Updated the chat to show DisplayName instead of Username

1.0.12

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/10?closed=1

  • Added new option to disable language changes: EnableLanguageEdits
  • Added support for Tiltify campaigns
  • Fixed Void cradles always rolling Lunar items when opened. This was due to the Risk of Rain 2 DLC: Survivors of the Void migrating to a new drop table mechanism. Rolling for items now use this new mechanism.

1.0.11

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/9?closed=1

  • Removed R2API dependency
  • Update code to work with the new Risk of Rain 2 DLC: Survivors of the Void
  • Added a new Twitch configuration: PublishToChat

1.0.10

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/8?closed=1

  • Minor language updates
  • The Shrine of the Mountain events (bits or channel points) no longer scale according to Mountain Shrines = # of players. Each trigger will cause only one Mountain Shrine event to happen, regardless of how many players there are.

1.0.9

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/7?closed=1

  • Percentile voting strategy actually works now.
  • When chat is voting on Equipment and Artifact of Command is turned on, all players will immediatly recieve the equipment. It will no longer drop an orb (as if that happend, the orb would turn into a Command Essence).
  • MaxVoteRandomTie will correctly pick a random item if there are no votes.
  • Updated the ImplicitOAuth description to direct them to the README.md so they can easily click the link. People were trying to type the URL form the mod manager...
  • Fixed Rusted Key Channel Points integration.

1.0.6

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/6?closed=1

  • Updated library for new RoR2 release

1.0.5

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/5?closed=1

  • When someone spends Channel Points, their username will appear in the chat.
  • Event Director update: It now is created on startup and lives for the life of the game. This should help with events during the character select screen (as before they didn't work even when it seemed like they did).
  • Some text formatting around numbers.
  • Voting queue will be reset when a run ends. No more stacking the queue in the current run, ending the game, and getting them in the next run.
  • When events happen, the teleporter will now have a visual update (purple crystals). This should help for more visual queues that something is blocking the teleporter from charging.
  • The voting strategy is now configurable. (Config: VoteStrategy)

1.0.4

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/4?closed=1

  • Spawned monsters from Bit/Channel Point events will not be destroyed after Void Field waves or Mithrix waves.
  • Spawned monsters no longer die immediatly when hitting out of bounds/zone triggers. No more cheesing Mithrix.
  • Spawned monsters do not take fall damage (mainly to counter teleporting them back into the stage).
  • Twisted Scavenger should correctly drop Lunar Coins at the end instead of causing a roll
  • Shrine of the Mountain, on the last stage, is worthless; now it gives all alive enemies Dio's Best Friend and random items equivalent to the number of players in the run. If the monster already has a Dio's (consumed or not) they do not recieve this buff.

1.0.3

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/3?closed=1

  • All Bit Events can now be triggered via Channel Points (if configured).
  • Updated title menu text.
  • Update language to use they/them pronouns.
  • Added more debug logging around TwitchLib (this library...can be finicky for some people). (Config: DebugLogs)
  • Move the location of the vote notification to no longer be in the way of any allies. It's not positioning using the best calculation... but it's better than it was.'
  • Protect against mods that cause rolls to happen mutliple times, causing the same rolls one after the other. If this happens a warning will be printed to the console.
  • Allies get reduced items to hopefully be less "tanky"

1.0.2

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/2?closed=1

  • Added Channel Points integration (See ChannelPoints Configuration)
  • Updated how bit event bosses Health and HP scale over time. This should make them more difficult as the run progresses.

1.0.1

See more info: https://github.com/JustDerb/RoR2-VsTwitch/milestone/1?closed=1

  • VsTwitch should now only activate when hosting a game. This mod will not enable and connect to Twitch if you are joining a game as a client.
  • Lunar Pods have been added to the choices Twitch Chat can choose from (Config: EnableChoosingLunarItems)
  • Now rolls can be forced to always be unique (Config: ForceUniqueRolls)
  • Added new Bit Event: Shrine of Order (Config: ShrineOfOrderWeight)
  • Added new Bit Event: Shrine of the Mountain (Config: ShrineOfTheMountainWeight)

1.0.0

  • Initial release

ror2-vstwitch's People

Contributors

judgy53 avatar justderb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

ror2-vstwitch's Issues

DLC : Void cradle spawn lunar items

I'm a huge fan of your work, and was patiently waiting for the dlc update!
I've been streaming it this week and noticed that void cradles (chest that supposed to give you corrupted items) gives the opportunity to void for one or two void items as well as lunar items!
Thank you so much again for your mod!

Item Roller Duplicates

This is probably an issue that is already well known, but in case it isn't I thought I would make a point of posting this anyways. It's not uncommon for there to be two identical options, and during stream we actually got 3 identical options twice.
20201210171912_1

[Tiltify] Support Tiltify rewards as Channel Point rewards

https://info.tiltify.com/support/solutions/articles/43000011849-adding-incentives-rewards

["20","20","campaign.168110.reward","phx_join",{}]
["20","20","campaign.168110.reward","phx_reply",{"response":{},"status":"ok"}]
[null,null,"campaign.168110.donation","donation",{"amount":10.0,"challenge_id":null,"comment":"idk where to tell you but start next run with cherf","completedAt":1651273334000,"event_id":168110,"id":5871236,"name":"abadvideogamr","poll_option_id":null,"read_at":null,"reward_id":146009,"updatedAt":1651273334000}]

Looks like reward_id is the key here. But we'll need a way to easy grab that ID from the Tiltify UI.

Multishop Terminal

I was wondering if under the behavior for the rivals stuff if it really makes sense with multishop terminals? Perhaps have it a toggle where it randomizes like a normal chest, or if it can turn off similarly to how you have it for the lunar buds?

SUGGESTION: Add 'Events' as a timed randomizer as option

This mod is great, but it's a pity that the fun part of this mod is locked behind having to be a Twitch Affiliate/Partner, which already requires a bit of status on Twitch.

I'd love to suggest that this mod comes with an alternative, that instead of paying bits/channel points, Each 5 minutes in a game Twitch Chat can vote for a random event. In the config, you can then attune how much 'weight' each event has to determine how often it may appear.

An option to remove twitch-related ui changes

As it says in the title, I want to have an option to remove changing text like Mithrix dialogue or survivor ending words. There's no info on how to remove it, so I assume said feature does not exist

"Percentile" gives broken items

Hello,

When using the mod, the "Percentile" strategy doesn't work if there is more than one vote. The game gives a "Item AACANNON_NAME" item that does nothing and seems broken.

What I tried (with VsTwitch as my only active mod) :

  • Using the mod alone, offline, with Percentile. When I'm the only one voting, it picks the right item. 👍
  • Using the mod alone, offline, with Percentile. When I vote with two different Twitch account in the chat, the item is bugged. 👎
  • Using the mod online on stream, with Percentile. When people votes, the item is bugged. 👎

The other methods (Max Votes) does work.

You can see it in this clip : https://clips.twitch.tv/CreativeSuspiciousLlamaFailFish-JXIvtFU8UF8Nlblq

2021-08-26 05_02_03-Window

Chests Not Spawning Anything

Everything except the multistops are taking the money but then not dropping anything and not giving a choice to twitch, is there something that is messed up on my end?

Support for modded creatures and events

Hey, at the day of writing this I downloaded this mod to play with around 30-50 viewers, and it was one of the most intense streams I've ever experienced. We used about 80 mods or so, and I was wondering if you could make support for custom mobs such as Ancient and Archaic Wisps, Regigigas, Direseeker, Nemesis Enforcer, Nemesis Commando and Starstorm's Storm event.

I think giving the viewers a heckload of options to choose from, could keep up the stream's fast pace.

Also where can I buy you a coffee? haha

Issue loading mod

I have uninstalled and re-installed a few times and the mod still isn't connecting and I keep getting the same error. Was wondering if there's something I'm missing? I made sure to fill out all categories as instructed.

image

Update to RoR2 v1.2.1.0 with Survivors of the Void expansion

With new RoR2 patch and expansion installed the VsTwitch mod fails to load. Console shows an error relating to assembly RoR2.Networking.GameNetworkManager, which may be related to R2API being out of date as well.

[Error  : Unity Log] TypeLoadException: Could not resolve type with token 010000d6 (from typeref, class/assembly RoR2.Networking.GameNetworkManager, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)
Stack trace:
UnityEngine.GameObject:AddComponent(Type)
BepInEx.Bootstrap.Chainloader:Start()
UnityEngine.Application:.cctor()
RoR2.StreamingAssetsTextDataManager:.ctor()
RoR2.PlatformSystems:Init()```

Channel Points Not Working

I've been messing with this mod for the past day or 2, and I cannot get any of the Channel Points features to work. It seems like it's connected properly to my twitch, and it detects when I redeem a channel point reward, but then nothing happens in game. The console says "[Warning: Unity Log] Could not trigger event for Channel Points Redemption: AllyBeetle" If I use the !allychip command it summons a beetle just fine, but not through channel points. This might be some major user error but I just cannot seem to get this to work right. This is the only mod I have installed at the moment, and I tried to reinstall the game last night to no avail.

VsTwitch interaction with ShareSuite

A simple question. I want to use VsTwitch on stream with friends, while also using ShareSuite (so we're not arguing about drop distribution). Before I get them together and set up a stream just to test, I thought I would ask here and possibly save the trouble. What sort of interactions can I expect from a combo of these two mods?

mod doesn't work

Tried installing it today with r2modman and it appears to be broken. No config file is generated

Tied votes should be picked randomly

When a vote is tied, the system picks the first vote which is a bit less fun. Although this won't usually happen with larger streamers, it happens often with smaller creators.
My understanding is that the vote resolution happens in RoR2-VsTwitch/ItemRoller/VoteStrategy/MaxVoteStrategy.cs in this bit :

winner = default;
int highestVote = -1;
foreach (var tally in totalVotes)
{
if (tally.Value > highestVote)
{
winner = tally.Key;
highestVote = tally.Value;
}
}
return winner;

Instead of this a list should be created to store all the tied votes then a random element of this list picked. I found a solution to this for the previous version of this mod

public int Apply(List options)
{
Debug.Log("start apply strategy");
var votedValue = 0;
List voted = new List() { options.ElementAt(0) };
foreach (var item in voteCounter)
{
if (item.Value > votedValue)
{
votedValue = item.Value;
voted.Clear();
}
else
{
voted.Add(item.Key);
}
}
//Debug.Log("votedKey: " + votedKey);
var votedKey = voted.ElementAt(UnityEngine.Random.Range(0, voted.Count()));
return options.IndexOf(votedKey);
}

But this version seem a bit different, i don't know if it would work right away

A Way To Prevent Spamming My Twitch Chat

Loving this mod! Tried it out on my channel today. It makes the game like 100% more fun for the streamers and the viewers! So cool!
If I could make one suggestion, a way to disable it printing things like item voting and item voting results to chat would be nice. I don't want to miss actual viewers talking to me. We can all see what's happening on screen anyway.

Doesnt Load Channel Point Events

Hey i dont know going but when i launch in the cmd box i get warning for every channel point event that it is unable to load [Warning: Unity Log] Could not register Channel Points event: Ally Beetle
And i cant seem to find how to fix
log

Shipping Request Form Dupe

When interacting with Shipping Request Form shops on the map it will trigger the vote event but it still drops the item too. So you effectively get 2 items from these shops currently. The one that drops normally, and the one chat then votes on after the timer expires.

Edit: Link to video clip showing that it gives 2 items. https://www.xbox.com/play/media/2VPMSPA9

Question

Not an issue but a question, does Item Voting work for Modded Items?

Channel points not working despite same name.

Mod is connected to the channel.
Chat commands like "!roll" work and so does the Item Voting.
didnt had the opportunity to test bits yet. dont want to waste ppls money until i know everything works.

the log doesnt tell me anything either when using channel point rewards.

and yes. they are the same name. copy pasted and double checked

Update Oauth token description

Update it to point to the REAME.md for a clickable URL. People are trying to hand type the non-clickable URL and it's causing bad config set ups.

No votes default to first item in list (MaxVoteRandomTie)

When testing the mod to see if it worked properly, I noticed that if there was no vote for a chest item, it would default the dropped item to be the first one in list.

Pretty niche bug, but still worth mentioning in my opinion.

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.