Git Product home page Git Product logo

ot-monster-converter's People

Contributors

epuncker avatar nekiro avatar ramon-bernardo avatar soul4soul avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ot-monster-converter's Issues

Somes bugs

When converting the monsters, the "type" variable of the attack is being created only with "COMBAT_FIRE" and not "COMBAT_FIREDAMAGE"

Another observation is that the attack "melee" is being converted without "type" variable (in this case "COMBAT_PHYSICALDAMAGE")

PS: great tool. It was a great help. Congratulations.

https://github.com/opentibiabr/otservbr-global/pull/1676

Several TFS XML attributes for summons are not parsed

  • Max for the individual create is not yet supported.
<summons maxSummons="2">
    <summon name="Poison Spider" interval="2000" chance="10" max="2" />
</summons>
  • The use of the attribute “speed” which is the same as internal is not parsed.
  • The “force” attribute

The wiki media template deserializer needs improvements

Overall the parser is okay, it's able to parse 1664 of the 1666 monsters listed on tibia wiki. Still, there are multiple issues with the deserializer logic that needs to be fixed. Here are all the known issues using the template parser with tibiawiki. Ideally the deserializer would be able to support any wiki media template. It'd be smart to look at the code wikimedia uses themselves for reference.

  1. When there is a param like |look_direction=| this will incorrectly set the field as that value instead of skipping the field or setting the value as an empty string. The reg expression used seems to work on regexr but not in c#
  2. When parameter names are used out of order before parameters which come earlier the parser gets confused. An example is an ability from "Bloom of Doom"Fixed in #79
    • "Value cannot be null. (Parameter 'input')" -- parsing ability "{{melee|name=melee (random interval)|9600+}}"
      • The problem is name is normally the 3rd param but it's set first here, then the damage is next which default to index 0 since it's first unnamed param
  3. Extra data at the start or end of a template has the potential to cause the parse to fail when the extra data has templates itself. Two examples are "Ascending_Ferumbras" and "Destabilized Ferumbras"
    • Extra text at end of creature template that is inside noinclude html tags. Inside the tags is more templates {{}} which we don't want to match.
  4. Files names used in galleries or on the page could include bracing symbols. An example is "Crystal Wolf"
    • One of the file names in the gallery includes "=)" to make a smiley face
  5. Nearly the same as 4, galleries use the | symbol to separate the file name with an optional image description. An example is "crystal wolf", "Deathling scout", and "yakchal"
  6. Templates with "arrays" aren't parsed correctly when the parameters are named.
    • The example is parsing mimic outfit templates
  7. BONUS: Parser should support parsing into basic value types in addition to the string type
  8. BONUS: Parser should support parsing of nested template when the target property is attributed as a template

Cache TW pages

When developing the converter I hit the wiki thousands of times a day. Each run of the program is over 2000 network requests. These requests are slow, waste bandwidth, and appear to cause throttling. One technique I use between runs is using a hard coded list of monsters to avoid all the network requests. A better solution would be to locally cache the wiki pages next to the executable to make them easy to manage and clear.

Expectations:

  • Cache TW pages in plain text
  • Store cache files local to executable in a folder
  • Skip network request when file is found in local cache
  • Optional: TTL for cache to go to network when files are over 24 hours old

The improvement is a nice to have, it mainly helps developers. For end users, that use TW as an input source there is no reason to run the tool more then once a day, even once a week is enough in most cases as the data on the wiki is updated slowly.

Add [revscriptsys][input] support

Add support for revscriptsys input. I have received two requests from people wishing to convert from the revscriptsys lua format back to XML.

condition problem at conversion in revscripts and xml

condition is not being properly converted

[Error - Monsters::deserializeSpell] - bonebeast - Condition is not set for: condition
> bonebeast.lua [loaded]
> bug.lua [loaded]
> butterflyblue.lua [loaded]
> butterflypurple.lua [loaded]
> butterflyred.lua [loaded]
> butterflyyellow.lua [loaded]
> carniphila.lua [loaded]
> caverat.lua [loaded]
> centipede.lua [loaded]
> chicken.lua [loaded]
[Error - Monsters::deserializeSpell] - cobra - Condition is not set for: condition
> cobra.lua [loaded]
> crab.lua [loaded]
> crocodile.lua [loaded]
> cryptshambler.lua [loaded]
> cyclops.lua [loaded]
> darkmonk.lua [loaded]
> deathslicer.lua [loaded]
> deer.lua [loaded]
> demodras.lua [loaded]
> demon.lua [loaded]
> demonskeleton.lua [loaded]
> dharalion.lua [loaded]
> dog.lua [loaded]
> dragon.lua [loaded]
> dragonlord.lua [loaded]
> dwarf.lua [loaded]
> dwarfgeomancer.lua [loaded]
> dwarfguard.lua [loaded]
> dwarfsoldier.lua [loaded]
> dworcfleshhunter.lua [loaded]
[Error - Monsters::deserializeSpell] - dworcvenomsniper - Condition is not set for: condition
> dworcvenomsniper.lua [loaded]
> dworcvoodoomaster.lua [loaded]
[Error - Monsters::deserializeSpell] - efreet - Condition is not set for: condition
> efreet.lua [loaded]
> elderbeholder.lua [loaded]
> elephant.lua [loaded]
> elf.lua [loaded]
> elfarcanist.lua [loaded]
> elfscout.lua [loaded]
> evileye.lua [loaded]
> fernfang.lua [loaded]
[Error - Monsters::deserializeSpell] - ferumbras - Condition is not set for: condition
[Error - Monsters::deserializeSpell] - ferumbras - Condition is not set for: condition
[Error - Monsters::deserializeSpell] - ferumbras - Condition is not set for: condition
> ferumbras.lua [loaded]
> firedevil.lua [loaded]
> fireelemental.lua [loaded]
> flamethrower.lua [loaded]
> flamingo.lua [loaded]
> frosttroll.lua [loaded]
> gamemaster.lua [loaded]
> gargoyle.lua [loaded]
> gazer.lua [loaded]
> ghost.lua [loaded]
> ghoul.lua [loaded]
> giantspider.lua [loaded]
> goblin.lua [loaded]
[Error - Monsters::deserializeSpell] - greendjinn - Condition is not set for: condition
> greendjinn.lua [loaded]
> grorlam.lua [loaded]
> halloweenhare.lua [loaded]
> hero.lua [loaded]
[Error - Monsters::deserializeSpell] - hornedfox - Condition is not set for: condition
> hornedfox.lua [loaded]
> human.lua [loaded]
> hunter.lua [loaded]
> hyaena.lua [loaded]
> hydra.lua [loaded]
> illusion.lua [loaded]
[Error - Monsters::deserializeSpell] - infernatil - Condition is not set for: condition
> infernatil.lua [loaded]
> kongra.lua [loaded]
> larva.lua [loaded]
[Error - Monsters::deserializeSpell] - lich - Condition is not set for: condition
> lich.lua [loaded]
> lion.lua [loaded]
> lizardsentinel.lua [loaded]
[Error - Monsters::deserializeSpell] - lizardsnakecharmer - Condition is not set for: condition
> lizardsnakecharmer.lua [loaded]
> lizardtemplar.lua [loaded]
> magicthrower.lua [loaded]
[Error - Monsters::deserializeSpell] - marid - Condition is not set for: condition
> marid.lua [loaded]
> merlkin.lua [loaded]

Add support for parsing bestiary information

This is low priority as of today this information can only be parsed from TibiaWiki.

Only otservbr uses this information and the variation of RevScriptSys format they use is not supported at this time.

[opentibiabr revscriptsys][output] Add support for this format

https://github.com/opentibiabr/canary has used this tool in the past, it was used to aid in convertering the creatures in their repo from XML to revscriptsys. They used a fork of the v2.0~ release which had many issues. Since then the program has under gone extensive changes which would make rebasing difficult.

Support for this format can be added with minimal effort since it's a derivative of the tfs revscriptsys format.

Tech implementation:
Not sure how I want to handle it yet, so far all converters have been in separate binaries. Due to the similarity with tfs revscriptsys format I'm thinking of adding it to the same binary. The current class can be changed to an abstract base class, which tfs and otserverbr classes can inherit. The base class can accept an enum to indicate TFS or otserv and have conditional checks as necessary. Instead of passing a enum to the baseclass the giant function to output the lua file can be split up into sub functions for general info, attacks, defensives, loot, immunities, etc.. and the inherited classes can override those when there are differences.

TFS XML monster defense spellls are not being parsed

At the following code TFS XML defense spells are not parsed.

if (tfsMonster.defenses != null)
{
monster.TotalArmor = tfsMonster.defenses.armor;
monster.Shielding = tfsMonster.defenses.defense;
}

Within the conditional something along the lines of monster.Attacks = XmlSpellsToGeneric(tfsMonster.defenses.defense); needs to be added. XmlSpellsToGeneric might need updates to support defense spells such as healing.

After fixing this its possible tfs revscriptsys might need changes for writing out these new spells.

Convertion to TFS revscriptsys

If you try to convert a XML monster that have loot inside a bag, those are not converted to the new format.

Example of how it should be:

monster.loot = {
	{id = "gold coin", chance = 60000, maxCount = 100},
	{id = 1987, chance = 60000, -- bag
		child = {
			{id = "platinum coin", chance = 60000, maxCount = 100},
			{id = "crystal coin", chance = 60000, maxCount = 100}
		}
	}
}

Example of how it is right now:

monster.loot = {
	{id = 7393, chance = 600},
	{id = 7382, chance = 575},
	{id = 2472, chance = 575},
	{id = 2418, chance = 1900},
	{id = 2514, chance = 975},
	{id = 2520, chance = 1225},
	{id = 2470, chance = 900},
	{id = 2393, chance = 2125},
	{id = 2179, chance = 1575},
	{id = 5954, chance = 1050},
	{id = 2151, chance = 3625},
	{id = 2396, chance = 1050},
	{id = 2795, chance = 11425, maxCount = 6},
	{id = 2462, chance = 1600},
	{id = 2176, chance = 3225},
	{id = 2165, chance = 1850},
	{id = 1987, chance = 100000} --bag
}

Example of XML file:

<loot>
    <item id="7393" chance="600" /><!-- demon trophy -->
    <item id="7382" chance="575" /><!-- demonrage sword -->
    <item id="2472" chance="575" /><!-- magic plate armor -->
    <item id="2418" chance="1900" /><!-- golden sickle -->
    <item id="2514" chance="975" /><!-- mastermind shield -->
    <item id="2520" chance="1225" /><!-- demon shield -->
    <item id="2470" chance="900" /><!-- golden legs -->
    <item id="2393" chance="2125" /><!-- giant sword -->
    <item id="2179" chance="1575" /><!-- gold ring -->
    <item id="5954" chance="1050" /><!-- demon horn -->
    <item id="2151" chance="3625" /><!-- talon -->
    <item id="2396" chance="1050" /><!-- ice rapier -->
    <item id="2795" countmax="6" chance="11425" /><!-- fire mushroom -->
    <item id="2462" chance="1600" /><!-- devil helmet -->
    <item id="2176" chance="3225" /><!-- orb -->
    <item id="2165" chance="1850" /><!-- stealth ring -->
    <item id="1987" chance="100000"><!-- bag -->
        <item id="2164" chance="725" /><!-- might ring -->
        <item id="2171" chance="1150" /><!-- platinum amulet -->
        <item id="2432" chance="4325" /><!-- fire axe -->
        <item id="1982" chance="1725" /><!-- purple tome -->
        <item id="7368" countmax="5" chance="3375" /><!-- assassin star -->
        <item id="2387" chance="18750" /><!-- double axe -->
        <item id="7591" chance="700" /> <!-- great health potion -->
        <item id="2214" chance="925" /><!-- ring of healing -->
        <item id="2149" chance="9925" /><!-- small emerald -->
        <item id="8473" countmax="3" chance="11550" /> <!-- ultimate health potion -->
        <item id="2152" chance="66300" /><!-- platinum coin -->
        <item id="7590" countmax="3" chance="8825" /> <!-- great mana potion -->
        <item id="2148" countmax="100" chance="40800" /><!-- gold coin -->
        <item id="2148" countmax="100" chance="40800" /><!-- gold coin -->
    </item>
</loot>

[question] Woud be posible to make a converter but for npcs?

Hi as title says.
i have converted cipsoft monster to lua with this tool and they are working pretty cool
i wonder if you will or would release a tool to convert npcs from cipsoft to lua tried with this tool if its possible and at the momment it's not :( would be great if it could convert npcs to tfs revscripts or similar
and thank you in advance for this great tool

regards

Empty loot tag to tfs xml output

it is writing an empty <loot /> to tfs xml output, for monsters that have no loot (Achad for example)

asddsa

btw can we have a new release? 😛

shootEffect key with uppercase first letter

The first letter of the shooteffect is being converted to uppercase. forgottenserver can't recognize the effect.
Tested with demon. (TFS XML to REVSCRIPT)
image

monster.attacks = {
    ...
    {name ="combat" ... ShootEffect = CONST_ANI_FIRE ... },
    ...
}

Correct:

shootEffect = ...

Add support for using OTB files to convert between server and client item ids

With the PR for cip monster format open, there is now an issue of differentiating between server and client item ids. Hard coding a mapping into the monster converter is not favorable, I don't want to maintain it and it is error prone. So far no mapping have been hard coded into the program.

OTB format is a used by the entire OT community as a means of mapping between server and client item ids. The converter should support OTB format as a means to define a mapping between the item ids.

OTB files will not be shipped with this program. It's the user's responsibility to provide the OTB file to use with the converter.

Goals:

  • Program will continue to work if no OTB file is provide but item mapping won't be available
  • Program will look for a file named items.otb next to the executable

Optional:

  • File path of items.otb file can be provided on command line or via GUI

Add a way to set default monster values

Often times information is missing from creature files. A new monster is created with some default values to fill in the gaps and make the conversion work better especially when moving between formats of different systems where values don't match exactly for example TibiaWiki to TFS. TibiaWiki has no concept of StaticAttack so a default value is needed.

Instead of hard coding these values they should be made available as input so they can be set by the user. See monsters.cs for the current hard coded values

public Monster()
{
Voices = new List<Voice>();
MaxSummons = 0;
Summons = new List<Summon>();
Items = new List<Loot>();
LookTypeDetails = new DetailedLookType();
Attacks = new List<Spell>();
SummonCost = 0;
Attackable = true;
Hostile = true;
Illusionable = false;
ConvinceCost = 0;
Pushable = false;
PushItems = false;
PushCreatures = false;
TargetDistance = 1;
StaticAttack = 95;
LightLevel = 0;
LightColor = 0;
RunOnHealth = 0;
IsBoss = false;
HideHealth = false;
AvoidFire = true;
AvoidEnergy = true;
AvoidPoison = true;
// Immunities
IgnoreParalyze = false;
IgnoreInvisible = false;
IgnoreDrunk = false;
IgnoreOutfit = false;
// Defences
TotalArmor = 10;
Shielding = 5;
// Elements
Fire = 1;
Earth = 1;
Energy = 1;
Ice = 1;
Holy = 1;
Death = 1;
Physical = 1;
Drown = 1;
LifeDrain = 1;
ManaDrain = 1;
}

Create a wiki media template serializer

The TibiaWiki output is hand generated string output that matches wiki media template format. A more efficient way would be to create a generic serializer. Having a serializer would make #48 less of a chore.

Suggestion to empty nameDescription=""

A few monsters aren't coming with nameDescription="" filled, so what about filling it with name but lowercase, or same as name if boss=true

edit, same for race, what about making it blood for everyone until we have proper info at wiki?

Reward chest loot is not handled properly

The monster converter has no concept of loot that is part of the reward chest. This feature is not yet in TFS otland/forgottenserver#1162 however its beginning to be included in TibiaWiki. For example on TibiaWiki Loot_Statistics:Ancient_Lion_Knight distinguishes between regular loot and reward chest loot. Because of this change in TibiaWiki Ancient_Lion_Knight loot is no longer parsed properly other monsters maybe be effected too.

Related to the reward chest is the cooperative loot system.

Otservbr doesn't have a tier system but loot items can be identified as unique drops.

Partial list of creatures using this system on TW:

[tibiawiki][input] Add support for pulling server ids in addition to the item name for the loot

TibiaWiki is great, most items include an itemid. The itemids should be fetched and stored along with the item name when building the loot list. The implementation should continue to be as respectful as possible to tibiawiki resources. Making a request for every item page would be very slow and would require over 6000 requests. Instead we should make a new page on the wiki which includes all items and lists their names and itemids in a single table. The DPL_Table template has a parameter to cache the table.

WIP DPL_Table

{{DPL Table|
| headers= !Name!!Id!!pickupable!
| table_class = wikitable sortable
| table_style = text-align:center;
| caption_style = text-align:center;
| tablerow = [[%TITLE%]]¦¦%%,%%
| no_results = There are no results.
| categories = Objects
| notcategorymatch= Deprecated¦Lists
| order_method = title
| sortcol = 0
| not_category = *
| uses_template = Template:Infobox Object
| includes= {Infobox Object}:itemid:pickupable
}}

spells question

so i have a few questions regarding some spells that didn't seem to work

using the CipMon > TfsRev for 1.5

currently it will make you invisible instead of monster / item
{name = "outfit", interval = 2000, chance = 17, monster = "rabbit", duration = 20000, range = 7, target = true, effect = CONST_ME_MAGIC_BLUE}

was it intentional that "min" should be higher than "max" or an error?
also i'm not sure how it should be working for paralyze/haste values, do i need to double the values or do you know the formula, coz it feels very weak right now using them on higher version than original 7.7
{name = "speed", interval = 2000, chance = 13, speed = {min = -100, max = -80}, duration = 25000, range = 7, target = true, shootEffect = CONST_ANI_POISON, effect = CONST_ME_POISONAREA},

i know this converter warned that it wasn't supporting it yet, but do you knw any other workaround?
{name = "drunk", interval = 2000, chance = 20, drunkenness = 60, duration = 30000, range = 7, target = true, shootEffect = CONST_ANI_ENERGY, effect = CONST_ME_TELEPORT},

also good job on the converter besides this i haven't had any issues, much appreciated!

[tibiawiki][output] Add abilities (attack/defense) to the output

Add output of abilities and specifically include scene templates. The scene template would be helpful in contributing back to TibiaWiki

The scenario is that tgs monster could be converted to the tibiawiki format. Those files could be inspected and the ability and scene templates can be added back to TibiaWiki to improve the wiki for the entire community.

Add support for parsing and writing of nested loot

Support needs to be added for nested loot. Not all formats support nested loot. When converting from a format with nested loot to a format which doesn't support nested loot the loot will be changed to a flat loot format.

Formats which support nested loot: TFS XML, TFS revscript sys,
Formats which DONT support nested loot: TibiaWiki
Formats whose support is unknown: tibia 7.7 format, pyOT

This is a low priority issue as cipbia removed nested loot and its no longer commonly found in OT servers.

Two minor suggestions regarding xml files

  • add new line at end of file
  • make it utf-8 without BOM

just to keep a little of consistency with tfs files

an optional thing:

  • make file names like_this.xml instead of Like This.xml (but this one can be easily done by anyone)

missing things and suggestion to improve the "cipsoft" converter

imo dont adapt to TFS, it should adapt to your converter! for example use cipsoft chance values for everything, that means base speed, loot, spells etc. makes more sense to change the formula in tfs based on the correct values instead.

  • monsters have some of their "outfit" and "invisible" spells converted to attacks rather than defense and vice versa

  • haste/paralyze speed spells should use "base" and "variation"

  • demon/illusion name for register

  • missing space in some summon names

  • voice should not convert "interval" and "chance" instead use a formula in tfs, also minotaur mage "#W" should be yell = true

  • flamethrower, magicthrower, plaguethrower, shredderthrower should have item lookTypeEx = 0

  • monsters that are convincable is missing summonCost value

  • monster melee condition auto attacks

  • target strategy values (closest, weakest, strongest, random)

  • monster training https://otland.net/threads/7-7-realots-7-7-cipsoft-files-virgin.244562/page-57#post-2685321

TFS XML parsing of attacks and defenses which call lua scripts is not supported

Some creatures spells are too complex for the TFS XML spell system. In order to support complex spells TFS XML monsters supports calling spells written in lua. This is accomplished by adding a spell element with the attribute name "script" and a attribute file which is a path to a lua file. OT monster converter skips parsing these spells.

Adding generic support for these spells would be more difficult then the spells which use the XML spell system. What would be feasible is to parse the information and use it when converting to another TFS monster format that could use lua spells. This would means the spells would be parsed and written in a TFS XML to TFS revscriptsys conversion. The spells would be dropped when converting to non TFS formats.

Support Linux by default

Today, to run this project on Linux one must fork the code, remove the WPF UI classes, change the target from net5.0-windows to net5.0, and finally compile.

Compiling on Linux should be made easier by conditional including the files to compile based on the runtime environment available on the system. A blog post from MS mentions the ability here. A sample project can be found here.

Work with TibiaWiki to resolve inconsistencies and enhance site data

  • Split up all effects that have shared ids. There are currently 6~ or so effects that have shared ids. See https://tibia.fandom.com/wiki/User:Soul4Soul/List_Of_Effects for a list
    • Demon Mirror, Spooky Face, Scratching Effect, Flitter Effect all have east and south facing effects
    • Thunderstorm and Stone Shower have duplicates to let them work on single spaces Fixed
  • Add monster blood type data to tibiawiki.
  • Add monster look type data to tibiawiki. There are two reasonable approaches for adding outfit data
    • Option 1: A very ambitious idea is to work with TibiaWiki to update the creatureinfo_box template to support looktype data to render the creature image instead of using a gif. Technically speaking its possible for them to support such a concept, they already have the outfitter tool that does 99% of the work. The remaining work is to add the missing creature looktypes and to update all 1600+ monsters to use looktype data.
    • Option 2: A page of look types similar to https://tibia.fandom.com/wiki/Effects. The page could contain a gif of the look type, update implemented, common outfit name, outfit id, and optional list of monsters in game using the outfit. This is less ambitious and the information wouldn't be as complete but it will still help to set many monster look types.
  • Improve ability templates. While they are significantly better then free form text there are still gaps.
    • conditions and buffs continue to remain difficult to parse. Creating custom templates for these attacks would greatly improve the chance the information can be parsed.
    • Other short comings include no chance, no frequency, no range, no duration, and no strengths of abilities. While it would be great to have this information on the wiki its often harder to gather this information and is unlikely to ever exist on the wiki.
  • Damage reflection information is not standardized
    • Some mobs include it as an ability, many don't list it at all, some is manually maintained at https://tibia.fandom.com/wiki/Damage_Reflection
    • This information should be moved to a parameter in the creature_infobox, a less desirable solution is to make a new ability template for damage reflection {{reflection|element|%}}

[TibiaWiki -> TFX XML] max summon issue

Lich output example:

	<summons maxSummons="4">
		<voice name="Bonebeast" interval="2000" chance="15" max="1" />
	</summons>

its confusing to have two max summons with different values (4 and 1)

Add ignore spawn block flag

  • Support for this feature has recently been added in TFS otland/forgottenserver#3601
  • otservbr already supports this feature
  • TibiaWiki provides this information in the spawntype parameter | spawntype = Regular, Unique, Unblockable

Formats that require updates to support this flag

  • TFS XML Input and Output
  • TFS Revscriptsys Output (since we don't support input at this time)
  • TibiaWiki Input and Output

TFS revscriptsys writing attacks which cause conditions is not working

The logic for attacks which cause elemental damages is not working. Below is the only research that went into fixing the problem. This example was take from a Lich poison beam attack which causes poison condition.

This was initially used but fails to load.

{name ="poisoncondition", interval = 2000, chance = 10, length = 7, spread = 3, effect = CONST_ME_HITBYPOISON, target = false}

This is used now but doesn't make much sense since the condition to cause is not included. At least the fail to load problem went away.

{name ="condition", interval = 2000, chance = 10, length = 7, spread = 3, effect = CONST_ME_HITBYPOISON, target = false}

Add support for cip monster format

cipbia monsters from 7.7 have been readily available on the web for sometime. OT monster converter could support converting from this format to common OT formats. There is not much reason to add support for writing out to this format as it has nearly no use in the community.

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.