Added Chocolatiering.
This commit is contained in:
parent
af093655bc
commit
a2e5f1ffd8
7 changed files with 389 additions and 16 deletions
|
|
@ -122,7 +122,7 @@ namespace Server.Engines.Craft
|
||||||
{
|
{
|
||||||
Type type = m_CraftItem.ItemType;
|
Type type = m_CraftItem.ItemType;
|
||||||
|
|
||||||
AddItem( 20, 50, CraftItem.ItemIDOf( type ) );
|
AddItem( 20, 50, CraftItem.ItemIDOf( type ), m_CraftItem.ItemHue );
|
||||||
|
|
||||||
if ( m_CraftItem.IsMarkable( type ) )
|
if ( m_CraftItem.IsMarkable( type ) )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,14 @@ namespace Server.Engines.Craft
|
||||||
private string m_NameString;
|
private string m_NameString;
|
||||||
private int m_NameNumber;
|
private int m_NameNumber;
|
||||||
|
|
||||||
|
private int m_ItemHue;
|
||||||
|
|
||||||
private int m_Mana;
|
private int m_Mana;
|
||||||
private int m_Hits;
|
private int m_Hits;
|
||||||
private int m_Stam;
|
private int m_Stam;
|
||||||
|
|
||||||
|
private BeverageType m_RequiredBeverage;
|
||||||
|
|
||||||
private bool m_UseAllRes;
|
private bool m_UseAllRes;
|
||||||
|
|
||||||
private bool m_NeedHeat;
|
private bool m_NeedHeat;
|
||||||
|
|
@ -51,7 +55,6 @@ namespace Server.Engines.Craft
|
||||||
set { m_ForceNonExceptional = value; }
|
set { m_ForceNonExceptional = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Expansion m_RequiredExpansion;
|
private Expansion m_RequiredExpansion;
|
||||||
|
|
||||||
public Expansion RequiredExpansion
|
public Expansion RequiredExpansion
|
||||||
|
|
@ -133,6 +136,14 @@ namespace Server.Engines.Craft
|
||||||
|
|
||||||
m_GroupNameNumber = groupName;
|
m_GroupNameNumber = groupName;
|
||||||
m_NameNumber = name;
|
m_NameNumber = name;
|
||||||
|
|
||||||
|
m_RequiredBeverage = BeverageType.Water;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BeverageType RequiredBeverage
|
||||||
|
{
|
||||||
|
get { return m_RequiredBeverage; }
|
||||||
|
set { m_RequiredBeverage = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRes( Type type, TextDefinition name, int amount )
|
public void AddRes( Type type, TextDefinition name, int amount )
|
||||||
|
|
@ -206,6 +217,12 @@ namespace Server.Engines.Craft
|
||||||
get { return m_Type; }
|
get { return m_Type; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int ItemHue
|
||||||
|
{
|
||||||
|
get { return m_ItemHue; }
|
||||||
|
set { m_ItemHue = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public string GroupNameString
|
public string GroupNameString
|
||||||
{
|
{
|
||||||
get { return m_GroupNameString; }
|
get { return m_GroupNameString; }
|
||||||
|
|
@ -489,7 +506,7 @@ namespace Server.Engines.Craft
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water )
|
if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != m_RequiredBeverage )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
totals[i] += hq.Quantity;
|
totals[i] += hq.Quantity;
|
||||||
|
|
@ -526,7 +543,7 @@ namespace Server.Engines.Craft
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water )
|
if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != m_RequiredBeverage )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int theirAmount = hq.Quantity;
|
int theirAmount = hq.Quantity;
|
||||||
|
|
@ -564,7 +581,7 @@ namespace Server.Engines.Craft
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != BeverageType.Water )
|
if ( hq is BaseBeverage && ((BaseBeverage)hq).Content != m_RequiredBeverage )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
amount += hq.Quantity;
|
amount += hq.Quantity;
|
||||||
|
|
|
||||||
|
|
@ -179,6 +179,12 @@ namespace Server.Engines.Craft
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void SetItemHue( int index, int hue )
|
||||||
|
{
|
||||||
|
CraftItem craftItem = m_CraftItems.GetAt( index );
|
||||||
|
craftItem.ItemHue = hue;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetManaReq( int index, int mana )
|
public void SetManaReq( int index, int mana )
|
||||||
{
|
{
|
||||||
CraftItem craftItem = m_CraftItems.GetAt( index );
|
CraftItem craftItem = m_CraftItems.GetAt( index );
|
||||||
|
|
@ -215,6 +221,12 @@ namespace Server.Engines.Craft
|
||||||
craftItem.NeedOven = needOven;
|
craftItem.NeedOven = needOven;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetBeverageType( int index, BeverageType requiredBeverage )
|
||||||
|
{
|
||||||
|
CraftItem craftItem = m_CraftItems.GetAt( index );
|
||||||
|
craftItem.RequiredBeverage = requiredBeverage;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetNeedMill( int index, bool needMill )
|
public void SetNeedMill( int index, bool needMill )
|
||||||
{
|
{
|
||||||
CraftItem craftItem = m_CraftItems.GetAt( index );
|
CraftItem craftItem = m_CraftItems.GetAt( index );
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,20 @@ namespace Server.Engines.Craft
|
||||||
|
|
||||||
index = AddCraft( typeof( CookieMix ), 1044495, 1024159, 0.0, 100.0, typeof( JarHoney ), 1044472, 1, 1044253 );
|
index = AddCraft( typeof( CookieMix ), 1044495, 1024159, 0.0, 100.0, typeof( JarHoney ), 1044472, 1, 1044253 );
|
||||||
AddRes( index, typeof( SweetDough ), 1044475, 1, 1044253 );
|
AddRes( index, typeof( SweetDough ), 1044475, 1, 1044253 );
|
||||||
|
|
||||||
|
if ( Core.ML )
|
||||||
|
{
|
||||||
|
index = AddCraft( typeof( CocoaButter ), 1044495, 1079998, 0.0, 100.0, typeof( CocoaPulp ), 1080530, 1, 1044253 );
|
||||||
|
SetItemHue( index, 0x457 );
|
||||||
|
SetNeededExpansion( index, Expansion.ML );
|
||||||
|
SetNeedOven( index, true );
|
||||||
|
|
||||||
|
index = AddCraft( typeof( CocoaLiquor ), 1044495, 1079999, 0.0, 100.0, typeof( CocoaPulp ), 1080530, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( EmptyPewterBowl ), 1025629, 1, 1044253 );
|
||||||
|
SetItemHue( index, 0x46A );
|
||||||
|
SetNeededExpansion( index, Expansion.ML );
|
||||||
|
SetNeedOven( index, true );
|
||||||
|
}
|
||||||
/* End Ingredients */
|
/* End Ingredients */
|
||||||
|
|
||||||
/* Begin Preparations */
|
/* Begin Preparations */
|
||||||
|
|
@ -242,6 +256,33 @@ namespace Server.Engines.Craft
|
||||||
SetNeedHeat( index, true );
|
SetNeedHeat( index, true );
|
||||||
SetUseAllRes( index, true );
|
SetUseAllRes( index, true );
|
||||||
/* End Barbecue */
|
/* End Barbecue */
|
||||||
|
|
||||||
|
/* Begin Chocolatiering */
|
||||||
|
if ( Core.ML )
|
||||||
|
{
|
||||||
|
index = AddCraft( typeof( DarkChocolate ), 1080001, 1079994, 15.0, 100.0, typeof( SackOfSugar ), 1079997, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( CocoaButter ), 1079998, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( CocoaLiquor ), 1079999, 1, 1044253 );
|
||||||
|
SetItemHue( index, 0x465 );
|
||||||
|
SetNeededExpansion( index, Expansion.ML );
|
||||||
|
|
||||||
|
index = AddCraft( typeof( MilkChocolate ), 1080001, 1079995, 32.5, 107.5, typeof( SackOfSugar ), 1079997, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( CocoaButter ), 1079998, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( CocoaLiquor ), 1079999, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( BaseBeverage ), 1022544, 1, 1044253 );
|
||||||
|
SetBeverageType( index, BeverageType.Milk );
|
||||||
|
SetItemHue( index, 0x461 );
|
||||||
|
SetNeededExpansion( index, Expansion.ML );
|
||||||
|
|
||||||
|
index = AddCraft( typeof( WhiteChocolate ), 1080001, 1079996, 52.5, 127.5, typeof( SackOfSugar ), 1079997, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( CocoaButter ), 1079998, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( Vanilla ), 1080000, 1, 1044253 );
|
||||||
|
AddRes( index, typeof( BaseBeverage ), 1022544, 1, 1044253 );
|
||||||
|
SetBeverageType( index, BeverageType.Milk );
|
||||||
|
SetItemHue( index, 0x47E );
|
||||||
|
SetNeededExpansion( index, Expansion.ML );
|
||||||
|
}
|
||||||
|
/* End Chocolatiering */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
288
Scripts/Items/Food/Chocolatiering.cs
Normal file
288
Scripts/Items/Food/Chocolatiering.cs
Normal file
|
|
@ -0,0 +1,288 @@
|
||||||
|
using System;
|
||||||
|
using Server;
|
||||||
|
|
||||||
|
namespace Server.Items
|
||||||
|
{
|
||||||
|
public class CocoaLiquor : Item
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1080007; } } // Cocoa liquor
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public CocoaLiquor()
|
||||||
|
: base( 0x103F )
|
||||||
|
{
|
||||||
|
Hue = 0x46A;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CocoaLiquor( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 ); // version
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize( GenericReader reader )
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SackOfSugar : Item
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1080003; } } // Sack of sugar
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public SackOfSugar()
|
||||||
|
: this( 1 )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public SackOfSugar( int amount )
|
||||||
|
: base( 0x1039 )
|
||||||
|
{
|
||||||
|
Hue = 0x461;
|
||||||
|
Stackable = true;
|
||||||
|
Amount = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SackOfSugar( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 ); // version
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize( GenericReader reader )
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CocoaButter : Item
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1080005; } } // Cocoa butter
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public CocoaButter()
|
||||||
|
: base( 0x1044 )
|
||||||
|
{
|
||||||
|
Hue = 0x457;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CocoaButter( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 ); // version
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize( GenericReader reader )
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Vanilla : Item
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1080009; } } // Vanilla
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public Vanilla()
|
||||||
|
: this( 1 )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public Vanilla( int amount )
|
||||||
|
: base( 0xE2A )
|
||||||
|
{
|
||||||
|
Hue = 0x462;
|
||||||
|
Stackable = true;
|
||||||
|
Amount = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vanilla( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 ); // version
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize( GenericReader reader )
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CocoaPulp : Item
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1080530; } } // cocoa pulp
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public CocoaPulp()
|
||||||
|
: this( 1 )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public CocoaPulp( int amount )
|
||||||
|
: base( 0xF7C )
|
||||||
|
{
|
||||||
|
Hue = 0x219;
|
||||||
|
Stackable = true;
|
||||||
|
Amount = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CocoaPulp( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 ); // version
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize( GenericReader reader )
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DarkChocolate : CandyCane
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1079994; } } // Dark chocolate
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public DarkChocolate()
|
||||||
|
: base( 0xF10 )
|
||||||
|
{
|
||||||
|
Hue = 0x465;
|
||||||
|
LootType = LootType.Regular;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DarkChocolate( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize(GenericReader reader)
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MilkChocolate : CandyCane
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1079995; } } // Milk chocolate
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public MilkChocolate()
|
||||||
|
: base( 0xF18 )
|
||||||
|
{
|
||||||
|
Hue = 0x461;
|
||||||
|
LootType = LootType.Regular;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MilkChocolate( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize(GenericReader reader)
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WhiteChocolate : CandyCane
|
||||||
|
{
|
||||||
|
public override int LabelNumber { get { return 1079996; } } // White chocolate
|
||||||
|
public override double DefaultWeight { get { return 1.0; } }
|
||||||
|
|
||||||
|
[Constructable]
|
||||||
|
public WhiteChocolate()
|
||||||
|
: base( 0xF11 )
|
||||||
|
{
|
||||||
|
Hue = 0x47E;
|
||||||
|
LootType = LootType.Regular;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WhiteChocolate( Serial serial )
|
||||||
|
: base( serial )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize( GenericWriter writer )
|
||||||
|
{
|
||||||
|
base.Serialize( writer );
|
||||||
|
|
||||||
|
writer.Write( (int) 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Deserialize(GenericReader reader)
|
||||||
|
{
|
||||||
|
base.Deserialize( reader );
|
||||||
|
|
||||||
|
int version = reader.ReadInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4310,12 +4310,26 @@ namespace Server.Mobiles
|
||||||
treasureLevel = 0;
|
treasureLevel = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !Summoned && !NoKillAwards && !IsBonded && treasureLevel >= 0 )
|
if ( !Summoned && !NoKillAwards && !IsBonded )
|
||||||
{
|
{
|
||||||
if ( m_Paragon && Paragon.ChestChance > Utility.RandomDouble() )
|
if ( treasureLevel >= 0 )
|
||||||
PackItem( new ParagonChest( this.Name, treasureLevel ) );
|
{
|
||||||
else if ( (Map == Map.Felucca || Map == Map.Trammel) && TreasureMap.LootChance >= Utility.RandomDouble() )
|
if ( m_Paragon && Paragon.ChestChance > Utility.RandomDouble() )
|
||||||
PackItem( new TreasureMap( treasureLevel, Map ) );
|
PackItem( new ParagonChest( this.Name, treasureLevel ) );
|
||||||
|
else if ( (Map == Map.Felucca || Map == Map.Trammel) && TreasureMap.LootChance >= Utility.RandomDouble() )
|
||||||
|
PackItem( new TreasureMap( treasureLevel, Map ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_Paragon && Paragon.ChocolateIngredientChance > Utility.RandomDouble() )
|
||||||
|
{
|
||||||
|
switch ( Utility.Random( 4 ) )
|
||||||
|
{
|
||||||
|
case 0: PackItem( new CocoaButter() ); break;
|
||||||
|
case 1: PackItem( new CocoaLiquor() ); break;
|
||||||
|
case 2: PackItem( new SackOfSugar() ); break;
|
||||||
|
case 3: PackItem( new Vanilla() ); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !Summoned && !NoKillAwards && !m_HasGeneratedLoot )
|
if ( !Summoned && !NoKillAwards && !m_HasGeneratedLoot )
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,9 @@ namespace Server.Mobiles
|
||||||
{
|
{
|
||||||
public class Paragon
|
public class Paragon
|
||||||
{
|
{
|
||||||
public static double ChestChance = .10; // Chance that a paragon will carry a paragon chest
|
public static double ChestChance = .10; // Chance that a paragon will carry a paragon chest
|
||||||
public static Map[] Maps = new Map[] // Maps that paragons will spawn on
|
public static double ChocolateIngredientChance = .20; // Chance that a paragon will drop a chocolatiering ingredient
|
||||||
|
public static Map[] Maps = new Map[] // Maps that paragons will spawn on
|
||||||
{
|
{
|
||||||
Map.Ilshenar
|
Map.Ilshenar
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue