webapp
Build / build (push) Has been cancelled

This commit is contained in:
gpatruno
2026-06-06 21:59:51 +02:00
parent 02d2af0993
commit 48a1b900c7
279 changed files with 7488 additions and 238 deletions
@@ -0,0 +1,198 @@
@HealthBarFill = PatchStyle(Color: #e74c3c);
@HealthBarBg = PatchStyle(Color: #2a1515);
@StaminaBarFill = PatchStyle(Color: #2ecc71);
@StaminaBarBg = PatchStyle(Color: #152a1c);
@XpBarFill = PatchStyle(Color: #4a9eff);
@XpBarBg = PatchStyle(Color: #152030);
@VitalsPanelWidth = 260;
@VitalsBarWidth = 244;
@VitalsBarHeight = 16;
@AbilitySlotSize = 68;
@AbilityPanelPad = 3;
@AbilityPanelWidth = @AbilitySlotSize + (@AbilityPanelPad * 2);
Group {
LayoutMode: Top;
Anchor: (Left: 16, Top: 16, Width: @VitalsPanelWidth);
Label #HeaderLabel {
Style: (FontSize: 14, RenderBold: true, TextColor: #f5c842);
Text: "Nv.1 — Classe";
Anchor: (Left: 0, Bottom: 8);
}
Group #VitalsPanel {
LayoutMode: Top;
Padding: (Full: 8);
Background: #0d0f14(0.92);
Anchor: (Left: 0, Width: @VitalsPanelWidth, Bottom: 8);
Group #HealthRow {
LayoutMode: Top;
Anchor: (Bottom: 6);
Label #HealthTitle {
Style: (FontSize: 10, RenderBold: true, TextColor: #ff7b7b);
Text: "Vie";
Anchor: (Bottom: 2);
}
Group #HealthBarTrack {
LayoutMode: Full;
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
ProgressBar #HealthBar {
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
Bar: @HealthBarFill;
Background: @HealthBarBg;
Value: 1.0;
Direction: End;
}
Group {
LayoutMode: CenterMiddle;
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
Label #HealthValue {
Style: (FontSize: 9, RenderBold: true, TextColor: #ffffff);
Text: "0 / 0";
}
}
}
}
Group #StaminaRow {
LayoutMode: Top;
Anchor: (Bottom: 6);
Label #StaminaTitle {
Style: (FontSize: 10, RenderBold: true, TextColor: #7bdc9a);
Text: "Endurance";
Anchor: (Bottom: 2);
}
Group #StaminaBarTrack {
LayoutMode: Full;
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
ProgressBar #StaminaBar {
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
Bar: @StaminaBarFill;
Background: @StaminaBarBg;
Value: 1.0;
Direction: End;
}
Group {
LayoutMode: CenterMiddle;
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
Label #StaminaValue {
Style: (FontSize: 9, RenderBold: true, TextColor: #ffffff);
Text: "0 / 0";
}
}
}
}
Group #XpRow {
LayoutMode: Top;
Label #XpTitle {
Style: (FontSize: 10, RenderBold: true, TextColor: #8eb6ff);
Text: "Expérience";
Anchor: (Bottom: 2);
}
Group #XpBarTrack {
LayoutMode: Full;
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
ProgressBar #XpBar {
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
Bar: @XpBarFill;
Background: @XpBarBg;
Value: 0.0;
Direction: End;
}
Group {
LayoutMode: CenterMiddle;
Anchor: (Width: @VitalsBarWidth, Height: @VitalsBarHeight);
Label #XpValue {
Style: (FontSize: 9, RenderBold: true, TextColor: #ffffff);
Text: "0 / 0";
}
}
}
}
}
Label #BarTitle {
Style: (FontSize: 12, RenderBold: true, TextColor: #f5c842);
Text: "CAPACITÉS";
Anchor: (Left: 0, Bottom: 4);
}
Group #AbilityBarPanel {
LayoutMode: Top;
Padding: (Full: @AbilityPanelPad);
Background: #0d0f14(0.92);
Anchor: (Left: 0, Width: @AbilityPanelWidth);
Group #AbilitySlot1 {
Anchor: (Width: @AbilitySlotSize, Height: @AbilitySlotSize, Bottom: 5);
Background: #2a3140;
LayoutMode: Top;
Padding: (Full: 4);
Label #Slot1Key {
Style: (FontSize: 12, RenderBold: true, TextColor: #f5c842);
Text: "[Q]";
Anchor: (Bottom: 2);
}
Label #Slot1Name {
Style: (FontSize: 10, TextColor: #ffffff, Wrap: true);
Text: "Capacité 1";
}
}
Group #AbilitySlot2 {
Anchor: (Width: @AbilitySlotSize, Height: @AbilitySlotSize, Bottom: 5);
Background: #2a3140;
LayoutMode: Top;
Padding: (Full: 4);
Label #Slot2Key {
Style: (FontSize: 12, RenderBold: true, TextColor: #f5c842);
Text: "[E]";
Anchor: (Bottom: 2);
}
Label #Slot2Name {
Style: (FontSize: 10, TextColor: #ffffff, Wrap: true);
Text: "Capacité 2";
}
}
Group #AbilitySlot3 {
Anchor: (Width: @AbilitySlotSize, Height: @AbilitySlotSize);
Background: #2a3140;
LayoutMode: Top;
Padding: (Full: 4);
Label #Slot3Key {
Style: (FontSize: 12, RenderBold: true, TextColor: #f5c842);
Text: "[R]";
Anchor: (Bottom: 2);
}
Label #Slot3Name {
Style: (FontSize: 10, TextColor: #ffffff, Wrap: true);
Text: "Capacité 3";
}
}
}
}
@@ -0,0 +1,206 @@
@MmorpgAccent = #f5c842;
@MmorpgText = #e8e8ec;
@MmorpgMuted = #878e9c;
@MmorpgBorder = #3a3f4a;
@HealthFill = PatchStyle(Color: #e74c3c);
@HealthBg = PatchStyle(Color: #2a1515);
@StaminaFill = PatchStyle(Color: #2ecc71);
@StaminaBg = PatchStyle(Color: #152a1c);
@XpFill = PatchStyle(Color: #4a9eff);
@XpBg = PatchStyle(Color: #152030);
Group {
LayoutMode: Left;
Group #LeftColumn {
LayoutMode: Top;
Anchor: (Width: 400, Right: 16);
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "IDENTITÉ";
Anchor: (Bottom: 6);
}
Label #IdentityName {
Style: (FontSize: 18, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Joueur";
Anchor: (Bottom: 4);
}
Label #RaceLabel {
Style: (FontSize: 13, TextColor: @MmorpgText);
Text: "Race : Humain";
Anchor: (Bottom: 2);
}
Label #ClassLabel {
Style: (FontSize: 13, TextColor: @MmorpgText);
Text: "Classe : —";
Anchor: (Bottom: 10);
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "PROGRESSION";
Anchor: (Bottom: 6);
}
Label #XpValue {
Style: (FontSize: 11, TextColor: @MmorpgText);
Text: "0 / 100 XP";
Anchor: (Bottom: 4);
}
ProgressBar #XpBar {
Anchor: (Width: 360, Height: 14, Bottom: 10);
Bar: @XpFill;
Background: @XpBg;
Value: 0.0;
Direction: End;
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "VITALITÉ";
Anchor: (Bottom: 6);
}
Label #HealthValue {
Style: (FontSize: 10, TextColor: @MmorpgText);
Text: "Vie : —";
Anchor: (Bottom: 2);
}
ProgressBar #HealthBar {
Anchor: (Width: 360, Height: 12, Bottom: 6);
Bar: @HealthFill;
Background: @HealthBg;
Value: 1.0;
Direction: End;
}
Label #StaminaValue {
Style: (FontSize: 10, TextColor: @MmorpgText);
Text: "Endurance : —";
Anchor: (Bottom: 2);
}
ProgressBar #StaminaBar {
Anchor: (Width: 360, Height: 12, Bottom: 10);
Bar: @StaminaFill;
Background: @StaminaBg;
Value: 1.0;
Direction: End;
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "ATTRIBUTS";
Anchor: (Bottom: 6);
}
Group {
LayoutMode: Left;
Anchor: (Bottom: 4);
Label #StatStr {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "FOR 10";
Padding: (Horizontal: 10, Vertical: 4);
Background: #2a3140;
Anchor: (Right: 6);
}
Label #StatAgi {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "AGI 10";
Padding: (Horizontal: 10, Vertical: 4);
Background: #2a3140;
Anchor: (Right: 6);
}
Label #StatInt {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "INT 10";
Padding: (Horizontal: 10, Vertical: 4);
Background: #2a3140;
}
}
Label #StatsHint {
Style: (FontSize: 9, TextColor: @MmorpgMuted);
Text: "Attributs dérivés du niveau (système M1 à venir)";
}
}
Group #RightColumn {
LayoutMode: Top;
FlexWeight: 1;
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "POUVOIRS PASSIFS";
Anchor: (Bottom: 4);
}
Label #PowersList {
Style: (FontSize: 12, TextColor: @MmorpgText, Wrap: true);
Text: "Aucun";
Anchor: (Bottom: 10);
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "MÉTIERS";
Anchor: (Bottom: 4);
}
Label #JobsList {
Style: (FontSize: 12, TextColor: @MmorpgText, Wrap: true);
Text: "Aucun";
Anchor: (Bottom: 10);
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "SOCIAL";
Anchor: (Bottom: 4);
}
Label #GroupLabel {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "Groupe : Aucun";
Anchor: (Bottom: 2);
}
Label #GuildLabel {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "Guilde : Aucune";
Anchor: (Bottom: 10);
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "STATISTIQUES";
Anchor: (Bottom: 4);
}
Label #PlayTimeLabel {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "Temps de jeu : 0 min";
Anchor: (Bottom: 2);
}
Label #LastLoginLabel {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "Dernière connexion : —";
Anchor: (Bottom: 2);
}
Label #CreatedLabel {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "Création : —";
}
}
}
@@ -0,0 +1,260 @@
@MmorpgBg = #0d0f14(0.96);
@MmorpgPanel = #1a1c20;
@MmorpgAccent = #f5c842;
@MmorpgText = #e8e8ec;
@MmorpgMuted = #878e9c;
@MmorpgBorder = #3a3f4a;
@SlotSize = 52;
@SlotGap = 4;
@SlotColWidth = @SlotSize + @SlotGap;
@SlotRowHeight = @SlotSize + @SlotGap;
@StorageGridWidth = (@SlotColWidth * 9) - @SlotGap;
@StorageGridHeight = (@SlotRowHeight * 4) - @SlotGap;
@HotbarWidth = (@SlotColWidth * 9) - @SlotGap;
@ColumnHeight = (@SlotRowHeight * 4) - @SlotGap;
@ShellWidth = 920;
@ShellHeight = 660;
Group {
LayoutMode: Center;
Group #MmorpgShell {
LayoutMode: Top;
Anchor: (Width: @ShellWidth, Height: @ShellHeight);
Background: @MmorpgBg;
Padding: (Full: 16);
Group #Header {
LayoutMode: Left;
Anchor: (Bottom: 12);
Group {
LayoutMode: Top;
FlexWeight: 1;
Label #PlayerName {
Style: (FontSize: 20, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Joueur";
Anchor: (Bottom: 2);
}
Label #ClassLabel {
Style: (FontSize: 13, TextColor: @MmorpgText);
Text: "Classe";
}
}
Group {
LayoutMode: Top;
Anchor: (Right: 24);
Label #LevelLabel {
Style: (FontSize: 14, RenderBold: true, TextColor: @MmorpgText);
Text: "Nv. 1";
Anchor: (Bottom: 2);
}
Label #MoneyLabel {
Style: (FontSize: 13, TextColor: @MmorpgAccent);
Text: "0 pièces";
}
}
}
Group #TabBar {
LayoutMode: Left;
Padding: (Bottom: 10);
Anchor: (Bottom: 8);
Group #TabCharacterWrap {
LayoutMode: Top;
Padding: (Horizontal: 12, Vertical: 4);
Anchor: (Right: 6);
Background: PatchStyle(Color: #00000000);
TextButton #TabCharacter {
Text: "Personnage";
}
Group #TabCharacterIndicator {
Anchor: (Height: 2, Top: 4);
Background: PatchStyle(Color: @MmorpgAccent);
Visible: false;
}
}
Group #TabInventoryWrap {
LayoutMode: Top;
Padding: (Horizontal: 12, Vertical: 4);
Anchor: (Right: 6);
Background: PatchStyle(Color: #00000000);
TextButton #TabInventory {
Text: "Inventaire";
}
Group #TabInventoryIndicator {
Anchor: (Height: 2, Top: 4);
Background: PatchStyle(Color: @MmorpgAccent);
Visible: false;
}
}
Group #TabSkillsWrap {
LayoutMode: Top;
Padding: (Horizontal: 12, Vertical: 4);
Anchor: (Right: 6);
Background: PatchStyle(Color: #00000000);
TextButton #TabSkills {
Text: "Compétences";
}
Group #TabSkillsIndicator {
Anchor: (Height: 2, Top: 4);
Background: PatchStyle(Color: @MmorpgAccent);
Visible: false;
}
}
}
Group #TabContent {
LayoutMode: Left;
FlexWeight: 1;
Group #EquipmentPanel {
LayoutMode: Top;
Anchor: (Width: 88, Right: 12);
Padding: (Full: 8);
Background: @MmorpgPanel;
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "ARMURE";
Anchor: (Bottom: 4);
}
Label #ArmorSummary {
Style: (FontSize: 9, TextColor: @MmorpgMuted);
Text: "Armure : 0 / 4";
Anchor: (Bottom: 6);
}
Group #ArmorSlots {
LayoutMode: Top;
Anchor: (Width: @SlotSize, Height: @ColumnHeight, Bottom: 10);
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "UTILITAIRE";
Anchor: (Bottom: 4);
}
Label #UtilitySummary {
Style: (FontSize: 9, TextColor: @MmorpgMuted);
Text: "Utilitaire : 0 / 4";
Anchor: (Bottom: 6);
}
Group #UtilitySlots {
LayoutMode: Top;
Anchor: (Width: @SlotSize, Height: @ColumnHeight);
}
}
Group #InventoryCenter {
LayoutMode: Top;
FlexWeight: 1;
Padding: (Full: 8);
Background: @MmorpgPanel;
Label #StorageSummary {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Sac : 0 / 36";
Anchor: (Bottom: 6);
}
Group #StorageSlots {
LayoutMode: Top;
Anchor: (Width: @StorageGridWidth, Height: @StorageGridHeight, Bottom: 10);
}
Label #HotbarSummary {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Barre rapide : 0 / 9";
Anchor: (Bottom: 6);
}
Group #HotbarSlots {
LayoutMode: Top;
Anchor: (Width: @HotbarWidth, Height: @SlotSize);
}
}
Group #ItemDetails {
LayoutMode: Top;
Anchor: (Width: 260, Left: 12);
Padding: (Full: 10);
Background: @MmorpgPanel;
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "DÉTAILS";
Anchor: (Bottom: 8);
}
Label #ItemName {
Style: (FontSize: 15, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Aucun objet";
Anchor: (Bottom: 6);
}
Label #ItemRarity {
Style: (FontSize: 11, TextColor: @MmorpgMuted);
Text: "Sélectionnez un emplacement";
Anchor: (Bottom: 8);
}
Label #ItemDescription {
Style: (FontSize: 12, TextColor: @MmorpgText, Wrap: true);
Text: "Cliquez un objet pour afficher ses informations.";
Anchor: (Bottom: 12);
}
Group #WeightTrack {
LayoutMode: Top;
Anchor: (Bottom: 4);
Label {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Remplissage du sac";
Anchor: (Bottom: 4);
}
ProgressBar #WeightBar {
Anchor: (Width: 220, Height: 10);
Bar: PatchStyle(Color: @MmorpgAccent);
Background: PatchStyle(Color: @MmorpgBorder);
Value: 0.0;
Direction: End;
}
Label #WeightValue {
Style: (FontSize: 9, TextColor: @MmorpgMuted);
Text: "0 piles";
Anchor: (Top: 4);
}
}
}
}
Label #FooterHint {
Style: (FontSize: 11, TextColor: @MmorpgMuted);
Text: "Échap pour fermer — clic source puis destination pour déplacer, survol pour les détails";
Anchor: (Top: 10);
}
}
}
@@ -0,0 +1,161 @@
@MmorpgPanel = #1a1c20;
@MmorpgAccent = #f5c842;
@MmorpgText = #e8e8ec;
@MmorpgMuted = #878e9c;
@MmorpgBorder = #3a3f4a;
@GridStyle = ItemGridStyle(
SlotSpacing: 4,
SlotSize: 52,
SlotIconSize: 44
);
Group {
LayoutMode: Left;
Group #EquipmentPanel {
LayoutMode: Top;
Anchor: (Width: 88, Right: 12);
Padding: (Full: 8);
Background: @MmorpgPanel;
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "ARMURE";
Anchor: (Bottom: 4);
}
Label #ArmorSummary {
Style: (FontSize: 9, TextColor: @MmorpgMuted);
Text: "Armure : 0 / 4";
Anchor: (Bottom: 6);
}
ItemGrid #ArmorGrid {
Anchor: (Width: 56, Height: 232, Bottom: 10);
SlotsPerRow: 1;
InventorySectionId: -3;
AreItemsDraggable: true;
DisplayItemQuantity: true;
RenderItemQualityBackground: true;
Style: @GridStyle;
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "UTILITAIRE";
Anchor: (Bottom: 4);
}
Label #UtilitySummary {
Style: (FontSize: 9, TextColor: @MmorpgMuted);
Text: "Utilitaire : 0 / 4";
Anchor: (Bottom: 6);
}
ItemGrid #UtilityGrid {
Anchor: (Width: 56, Height: 232);
SlotsPerRow: 1;
InventorySectionId: -5;
AreItemsDraggable: true;
DisplayItemQuantity: true;
RenderItemQualityBackground: true;
Style: @GridStyle;
}
}
Group #InventoryCenter {
LayoutMode: Top;
FlexWeight: 1;
Padding: (Full: 8);
Background: @MmorpgPanel;
Label #StorageSummary {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Sac : 0 / 36";
Anchor: (Bottom: 6);
}
ItemGrid #StorageGrid {
Anchor: (Width: 500, Height: 232, Bottom: 10);
SlotsPerRow: 9;
InventorySectionId: -2;
AreItemsDraggable: true;
DisplayItemQuantity: true;
RenderItemQualityBackground: true;
Style: @GridStyle;
}
Label #HotbarSummary {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Barre rapide : 0 / 9";
Anchor: (Bottom: 6);
}
ItemGrid #HotbarGrid {
Anchor: (Width: 500, Height: 60);
SlotsPerRow: 9;
InventorySectionId: -1;
AreItemsDraggable: true;
DisplayItemQuantity: true;
RenderItemQualityBackground: true;
Style: @GridStyle;
}
}
Group #ItemDetails {
LayoutMode: Top;
Anchor: (Width: 260, Left: 12);
Padding: (Full: 10);
Background: @MmorpgPanel;
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "DÉTAILS";
Anchor: (Bottom: 8);
}
Label #ItemName {
Style: (FontSize: 15, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Aucun objet";
Anchor: (Bottom: 6);
}
Label #ItemRarity {
Style: (FontSize: 11, TextColor: @MmorpgMuted);
Text: "Sélectionnez un emplacement";
Anchor: (Bottom: 8);
}
Label #ItemDescription {
Style: (FontSize: 12, TextColor: @MmorpgText, Wrap: true);
Text: "Cliquez un objet pour afficher ses informations.";
Anchor: (Bottom: 12);
}
Group #WeightTrack {
LayoutMode: Top;
Anchor: (Bottom: 4);
Label {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Remplissage du sac";
Anchor: (Bottom: 4);
}
ProgressBar #WeightBar {
Anchor: (Width: 220, Height: 10);
Bar: PatchStyle(Color: @MmorpgAccent);
Background: PatchStyle(Color: @MmorpgBorder);
Value: 0.0;
Direction: End;
}
Label #WeightValue {
Style: (FontSize: 9, TextColor: @MmorpgMuted);
Text: "0 piles";
Anchor: (Top: 4);
}
}
}
}
@@ -0,0 +1,29 @@
$C = "../Common.ui";
$C.@PageOverlay {}
$C.@Container {
Anchor: (Width: 600, Height: 700);
#Title {
Group {
$C.@Title {
@Text = %server.customUI.warpListPage.warps;
}
$C.@HeaderSearch {}
}
}
#Content {
LayoutMode: Left;
Group #ProfileList {
FlexWeight: 1;
LayoutMode: TopScrolling;
ScrollbarStyle: $C.@DefaultScrollbarStyle;
}
}
}
$C.@BackButton {}
@@ -0,0 +1,131 @@
@MmorpgBg = #0d0f14(0.96);
@MmorpgPanel = #1a1c20;
@MmorpgAccent = #f5c842;
@MmorpgText = #e8e8ec;
@MmorpgMuted = #878e9c;
@ShellWidth = 920;
@ShellHeight = 660;
Group {
LayoutMode: Center;
Group #MmorpgShell {
LayoutMode: Top;
Anchor: (Width: @ShellWidth, Height: @ShellHeight);
Background: @MmorpgBg;
Padding: (Full: 16);
Group #Header {
LayoutMode: Left;
Anchor: (Bottom: 12);
Group {
LayoutMode: Top;
FlexWeight: 1;
Label #PlayerName {
Style: (FontSize: 20, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Joueur";
Anchor: (Bottom: 2);
}
Label #HeaderSubtitle {
Style: (FontSize: 13, TextColor: @MmorpgText);
Text: "Profil MMORPG";
}
}
Group {
LayoutMode: Top;
Anchor: (Right: 24);
Label #LevelLabel {
Style: (FontSize: 14, RenderBold: true, TextColor: @MmorpgText);
Text: "Nv. 1";
Anchor: (Bottom: 2);
}
Label #MoneyLabel {
Style: (FontSize: 13, TextColor: @MmorpgAccent);
Text: "0 pièces";
}
}
}
Group #TabBar {
LayoutMode: Left;
Padding: (Bottom: 10);
Anchor: (Bottom: 8);
Group #TabCharacterWrap {
LayoutMode: Top;
Padding: (Horizontal: 12, Vertical: 4);
Anchor: (Right: 6);
Background: PatchStyle(Color: #00000000);
TextButton #TabCharacter {
Text: "Personnage";
}
Group #TabCharacterIndicator {
Anchor: (Height: 2, Top: 4);
Background: PatchStyle(Color: @MmorpgAccent);
Visible: false;
}
}
Group #TabInventoryWrap {
LayoutMode: Top;
Padding: (Horizontal: 12, Vertical: 4);
Anchor: (Right: 6);
Background: PatchStyle(Color: #00000000);
TextButton #TabInventory {
Text: "Inventaire";
}
Group #TabInventoryIndicator {
Anchor: (Height: 2, Top: 4);
Background: PatchStyle(Color: @MmorpgAccent);
Visible: false;
}
}
Group #TabSkillsWrap {
LayoutMode: Top;
Padding: (Horizontal: 12, Vertical: 4);
Anchor: (Right: 6);
Background: PatchStyle(Color: #00000000);
TextButton #TabSkills {
Text: "Compétences";
}
Group #TabSkillsIndicator {
Anchor: (Height: 2, Top: 4);
Background: PatchStyle(Color: @MmorpgAccent);
Visible: false;
}
}
}
Group #TabContent {
LayoutMode: Top;
FlexWeight: 1;
Group #DynamicTabHost {
LayoutMode: Top;
FlexWeight: 1;
Background: @MmorpgPanel;
Padding: (Full: 10);
}
}
Label #FooterHint {
Style: (FontSize: 11, TextColor: @MmorpgMuted);
Text: "Échap pour fermer";
Anchor: (Top: 10);
}
}
}
@@ -0,0 +1,198 @@
@MmorpgAccent = #f5c842;
@MmorpgText = #e8e8ec;
@MmorpgMuted = #878e9c;
@MmorpgSlot = #2a3140;
@MmorpgLocked = #1e2228;
Group {
LayoutMode: Top;
Label #ClassTitle {
Style: (FontSize: 16, RenderBold: true, TextColor: @MmorpgAccent);
Text: "Classe";
Anchor: (Bottom: 2);
}
Label #WeaponsLabel {
Style: (FontSize: 11, TextColor: @MmorpgMuted);
Text: "Armes : —";
Anchor: (Bottom: 6);
}
Label #PointsLabel {
Style: (FontSize: 12, TextColor: @MmorpgText);
Text: "Points de compétence : 0";
Anchor: (Bottom: 10);
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "CAPACITÉS DE CLASSE";
Anchor: (Bottom: 6);
}
Group {
LayoutMode: Left;
Anchor: (Bottom: 14);
Group #AbilityPanel1 {
LayoutMode: Top;
Padding: (Full: 8);
Background: @MmorpgSlot;
Anchor: (Width: 250, Right: 10);
Label #Ability1Key {
Style: (FontSize: 12, RenderBold: true, TextColor: @MmorpgAccent);
Text: "[Q]";
Anchor: (Bottom: 4);
}
Label #Ability1Name {
Style: (FontSize: 14, RenderBold: true, TextColor: @MmorpgText);
Text: "Capacité 1";
Anchor: (Bottom: 4);
}
Label #Ability1Cooldown {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Prêt";
Anchor: (Bottom: 6);
}
Label #Ability1Desc {
Style: (FontSize: 11, TextColor: @MmorpgMuted, Wrap: true);
Text: "—";
}
}
Group #AbilityPanel2 {
LayoutMode: Top;
Padding: (Full: 8);
Background: @MmorpgSlot;
Anchor: (Width: 250, Right: 10);
Label #Ability2Key {
Style: (FontSize: 12, RenderBold: true, TextColor: @MmorpgAccent);
Text: "[E]";
Anchor: (Bottom: 4);
}
Label #Ability2Name {
Style: (FontSize: 14, RenderBold: true, TextColor: @MmorpgText);
Text: "Capacité 2";
Anchor: (Bottom: 4);
}
Label #Ability2Cooldown {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Prêt";
Anchor: (Bottom: 6);
}
Label #Ability2Desc {
Style: (FontSize: 11, TextColor: @MmorpgMuted, Wrap: true);
Text: "—";
}
}
Group #AbilityPanel3 {
LayoutMode: Top;
Padding: (Full: 8);
Background: @MmorpgSlot;
Anchor: (Width: 250);
Label #Ability3Key {
Style: (FontSize: 12, RenderBold: true, TextColor: @MmorpgAccent);
Text: "[R]";
Anchor: (Bottom: 4);
}
Label #Ability3Name {
Style: (FontSize: 14, RenderBold: true, TextColor: @MmorpgText);
Text: "Capacité 3";
Anchor: (Bottom: 4);
}
Label #Ability3Cooldown {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Prêt";
Anchor: (Bottom: 6);
}
Label #Ability3Desc {
Style: (FontSize: 11, TextColor: @MmorpgMuted, Wrap: true);
Text: "—";
}
}
}
Label {
Style: (FontSize: 11, RenderBold: true, TextColor: @MmorpgMuted);
Text: "BRANCHES DE COMPÉTENCES";
Anchor: (Bottom: 6);
}
Group {
LayoutMode: Left;
Anchor: (Bottom: 8);
Group #Branch1 {
LayoutMode: Top;
Padding: (Full: 8);
Background: @MmorpgLocked;
Anchor: (Width: 180, Right: 10);
Label #Branch1Title {
Style: (FontSize: 12, RenderBold: true, TextColor: @MmorpgMuted);
Text: "Offensive";
Anchor: (Bottom: 4);
}
Label #Branch1Status {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Verrouillé — M1";
}
}
Group #Branch2 {
LayoutMode: Top;
Padding: (Full: 8);
Background: @MmorpgLocked;
Anchor: (Width: 180, Right: 10);
Label #Branch2Title {
Style: (FontSize: 12, RenderBold: true, TextColor: @MmorpgMuted);
Text: "Défensive";
Anchor: (Bottom: 4);
}
Label #Branch2Status {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Verrouillé — M1";
}
}
Group #Branch3 {
LayoutMode: Top;
Padding: (Full: 8);
Background: @MmorpgLocked;
Anchor: (Width: 180);
Label #Branch3Title {
Style: (FontSize: 12, RenderBold: true, TextColor: @MmorpgMuted);
Text: "Utilitaire";
Anchor: (Bottom: 4);
}
Label #Branch3Status {
Style: (FontSize: 10, TextColor: @MmorpgMuted);
Text: "Verrouillé — M1";
}
}
}
Label #SkillsHint {
Style: (FontSize: 10, TextColor: @MmorpgMuted, Wrap: true);
Text: "Utilisez [Q] [E] [R] (Use Ability 1/2/3) en jeu. L'arbre de talents complet arrive en M1.";
}
}
@@ -0,0 +1,167 @@
{
"Parent": "Template_Weapon_Battleaxe",
"TranslationProperties": {
"Name": "server.items.Weapon_Battleaxe_Mithril.name"
},
"Model": "Items/Weapons/Battleaxe/Mithril.blockymodel",
"Texture": "Items/Weapons/Battleaxe/Mithril_Texture.png",
"Icon": "Icons/ItemsGenerated/Weapon_Battleaxe_Mithril.png",
"Recipe": {
"TimeSeconds": 5,
"KnowledgeRequired": false,
"Input": [
{
"ItemId": "Ingredient_Bar_Mithril",
"Quantity": 10
},
{
"ItemId": "Ingredient_Leather_Storm",
"Quantity": 4
},
{
"ItemId": "Ingredient_Voidheart",
"Quantity": 1
}
],
"BenchRequirement": [
{
"Type": "Crafting",
"Categories": [
"Weapon_Battleaxe"
],
"Id": "Weapon_Bench",
"RequiredTierLevel": 3
}
]
},
"Quality": "Epic",
"ItemLevel": 50,
"InteractionVars": {
"Swing_Down_Damage": {
"Interactions": [
{
"Parent": "Weapon_Battleaxe_Primary_Swing_Down_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 73
}
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Battleaxe_T2_Impact",
"LocalSoundEventId": "SFX_Battleaxe_T2_Impact"
}
}
]
},
"Swing_Down_Left_Damage": {
"Interactions": [
{
"Parent": "Weapon_Battleaxe_Primary_Swing_Down_Left_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 36
}
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Battleaxe_T2_Impact",
"LocalSoundEventId": "SFX_Battleaxe_T2_Impact"
}
}
]
},
"Swing_Down_Right_Damage": {
"Interactions": [
{
"Parent": "Weapon_Battleaxe_Primary_Swing_Down_Right_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 44
}
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Battleaxe_T2_Impact",
"LocalSoundEventId": "SFX_Battleaxe_T2_Impact"
}
}
]
},
"Downstrike_Damage": {
"Interactions": [
{
"Parent": "Weapon_Battleaxe_Primary_Downstrike_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 57
}
},
"EntityStatsOnHit": [
{
"EntityStatId": "SignatureEnergy",
"Amount": 2
}
],
"DamageEffects": {
"WorldSoundEventId": "SFX_Battleaxe_T2_Impact",
"LocalSoundEventId": "SFX_Battleaxe_T2_Impact"
}
}
]
},
"Signature_Whirlwind_Damage": {
"Interactions": [
{
"Parent": "Weapon_Battleaxe_Signature_Whirlwind_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 29
}
},
"EntityStatsOnHit": [],
"DamageEffects": {
"WorldSoundEventId": "SFX_Battleaxe_T2_Impact",
"LocalSoundEventId": "SFX_Battleaxe_T2_Impact"
}
}
]
},
"Guard_Wield": {
"Interactions": [
{
"Parent": "Weapon_Battleaxe_Secondary_Guard_Wield",
"StaminaCost": {
"Value": 20,
"CostType": "Damage"
}
}
]
}
},
"MaxDurability": 220,
"DurabilityLossOnHit": 0.45,
"Interactions": {
"Ability1": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 1
}
]
},
"Ability2": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 2
}
]
},
"Ability3": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 3
}
]
}
}
}
@@ -0,0 +1,88 @@
{
"Parent": "Template_Weapon_Crossbow",
"TranslationProperties": {
"Name": "server.items.Weapon_Crossbow_Ancient_Steel.name"
},
"Model": "Items/Weapons/Crossbow/Iron.blockymodel",
"Texture": "Items/Weapons/Crossbow/Iron_Rusty_Texture.png",
"Icon": "Icons/ItemsGenerated/Weapon_Crossbow_Iron_Rusty.png",
"Quality": "Rare",
"ItemLevel": 30,
"InteractionVars": {
"Standard_Projectile_Damage": {
"Interactions": [
{
"Parent": "Weapon_Crossbow_Damage_Standard_Projectile",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 16
}
}
}
]
},
"Combo_Projectile_Damage": {
"Interactions": [
{
"Parent": "Weapon_Crossbow_Damage_Combo_Projectile",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 42
}
}
}
]
},
"Signature_BigArrow_Damage": {
"Interactions": [
{
"Parent": "Weapon_Crossbow_Damage_Signature_Projectile",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 123
}
}
}
]
},
"Guard_Wield": {
"Interactions": [
{
"Parent": "Weapon_Crossbow_Secondary_Guard_Wield",
"StaminaCost": {
"Value": 15.56,
"CostType": "Damage"
}
}
]
}
},
"MaxDurability": 180,
"DurabilityLossOnHit": 0.28,
"Interactions": {
"Ability1": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 1
}
]
},
"Ability2": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 2
}
]
},
"Ability3": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 3
}
]
}
}
}
@@ -0,0 +1,463 @@
{
"Parent": "Template_Weapon_Daggers",
"TranslationProperties": {
"Name": "server.items.Weapon_Daggers_Mithril.name"
},
"Model": "Items/Weapons/Dagger/Mithril.blockymodel",
"Texture": "Items/Weapons/Dagger/Mithril_Texture.png",
"Icon": "Icons/ItemsGenerated/Weapon_Daggers_Mithril.png",
"Recipe": {
"TimeSeconds": 5,
"KnowledgeRequired": false,
"Input": [
{
"ItemId": "Ingredient_Bar_Mithril",
"Quantity": 10
},
{
"ItemId": "Ingredient_Leather_Storm",
"Quantity": 3
},
{
"ItemId": "Ingredient_Voidheart",
"Quantity": 1
}
],
"BenchRequirement": [
{
"Type": "Crafting",
"Categories": [
"Weapon_Daggers"
],
"Id": "Weapon_Bench",
"RequiredTierLevel": 3
}
]
},
"Quality": "Epic",
"ItemLevel": 50,
"InteractionVars": {
"Swing_Left_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Primary_Swing_Left_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 8
}
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"AngledDamage": []
}
]
},
"Swing_Right_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Primary_Swing_Right_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 8
}
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"AngledDamage": []
}
]
},
"Stab_Left_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Primary_Stab_Left_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 15
}
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Stab_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Stab_Impact"
},
"AngledDamage": []
}
]
},
"Stab_Right_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Primary_Stab_Right_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 25
}
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Stab_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Stab_Impact"
},
"AngledDamage": []
}
]
},
"Pounce_Sweep_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Primary_Pounce_Sweep_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 61
}
},
"EntityStatsOnHit": [
{
"EntityStatId": "SignatureEnergy",
"Amount": 1
}
],
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"AngledDamage": [
{
"Angle": 180,
"AngleDistance": 80,
"DamageEffects": {
"Knockback": {
"Direction": {
"X": 0,
"Y": 2,
"Z": -3
},
"Type": "Force",
"Force": 6,
"VelocityType": "Set",
"VelocityConfig": {
"AirResistance": 0.99,
"AirResistanceMax": 0.98,
"GroundResistance": 0.94,
"GroundResistanceMax": 0.3,
"Threshold": 3.0,
"Style": "Linear"
}
},
"WorldParticles": [
{
"SystemId": "Impact_Critical",
"Scale": 1,
"RotationOffset": {
"Yaw": 180,
"Pitch": 0,
"Roll": 0
}
}
],
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"DamageCalculator": {
"BaseDamage": {
"Physical": 92
}
}
}
]
}
]
},
"Pounce_Stab_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Primary_Pounce_Stab_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 76
}
},
"EntityStatsOnHit": [
{
"EntityStatId": "SignatureEnergy",
"Amount": 6
}
],
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Stab_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Stab_Impact"
},
"AngledDamage": [
{
"Angle": 180,
"AngleDistance": 80,
"DamageEffects": {
"Knockback": {
"Direction": {
"X": 0,
"Y": 1,
"Z": -2
},
"Type": "Force",
"Force": 5,
"VelocityType": "Set",
"VelocityConfig": {
"AirResistance": 0.99,
"AirResistanceMax": 0.98,
"GroundResistance": 0.94,
"GroundResistanceMax": 0.3,
"Threshold": 3.0,
"Style": "Linear"
}
},
"WorldParticles": [
{
"SystemId": "Impact_Critical",
"Scale": 1,
"RotationOffset": {
"Yaw": 180,
"Pitch": 0,
"Roll": 0
}
}
],
"LocalSoundEventId": "SFX_Daggers_T2_Stab_Impact",
"WorldSoundEventId": "SFX_Daggers_T2_Stab_Impact"
},
"DamageCalculator": {
"BaseDamage": {
"Physical": 114
}
}
}
]
}
]
},
"Razorstrike_Slash_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Signature_Razorstrike_Slash_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 49
}
},
"EntityStatsOnHit": [],
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"AngledDamage": [
{
"Angle": 180,
"AngleDistance": 80,
"DamageEffects": {
"Knockback": {
"Direction": {
"X": 0,
"Y": 1,
"Z": -2
},
"Type": "Force",
"Force": 7,
"VelocityType": "Add",
"VelocityConfig": {
"AirResistance": 0.99,
"AirResistanceMax": 0.98,
"GroundResistance": 0.94,
"GroundResistanceMax": 0.3,
"Threshold": 3.0,
"Style": "Linear"
}
},
"WorldParticles": [
{
"SystemId": "Impact_Critical",
"Scale": 1,
"RotationOffset": {
"Yaw": 180,
"Pitch": 0,
"Roll": 0
}
}
],
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"DamageCalculator": {
"BaseDamage": {
"Physical": 74
}
}
}
]
}
]
},
"Razorstrike_Sweep_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Signature_Razorstrike_Sweep_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 61
}
},
"EntityStatsOnHit": [],
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"AngledDamage": [
{
"Angle": 180,
"AngleDistance": 80,
"DamageEffects": {
"Knockback": {
"Direction": {
"X": 0,
"Y": 1,
"Z": -1
},
"Type": "Force",
"Force": 7,
"VelocityType": "Add",
"VelocityConfig": {
"AirResistance": 0.99,
"AirResistanceMax": 0.98,
"GroundResistance": 0.94,
"GroundResistanceMax": 0.3,
"Threshold": 3.0,
"Style": "Linear"
}
},
"WorldParticles": [
{
"SystemId": "Impact_Critical",
"Scale": 1,
"RotationOffset": {
"Yaw": 180,
"Pitch": 0,
"Roll": 0
}
}
],
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"DamageCalculator": {
"BaseDamage": {
"Physical": 92
}
}
}
]
}
]
},
"Razorstrike_Lunge_Damage": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Signature_Razorstrike_Lunge_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 73
}
},
"EntityStatsOnHit": [],
"DamageEffects": {
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"AngledDamage": [
{
"Angle": 180,
"AngleDistance": 80,
"DamageEffects": {
"Knockback": {
"Direction": {
"X": 0,
"Y": 2,
"Z": -3
},
"Type": "Force",
"Force": 12,
"VelocityType": "Set",
"VelocityConfig": {
"AirResistance": 0.99,
"AirResistanceMax": 0.98,
"GroundResistance": 0.94,
"GroundResistanceMax": 0.3,
"Threshold": 3.0,
"Style": "Linear"
}
},
"WorldParticles": [
{
"SystemId": "Impact_Critical",
"Scale": 1,
"RotationOffset": {
"Yaw": 180,
"Pitch": 0,
"Roll": 0
}
}
],
"LocalSoundEventId": "SFX_Daggers_T2_Slash_Impact",
"WorldSoundEventId": "SFX_Daggers_T2_Slash_Impact"
},
"DamageCalculator": {
"BaseDamage": {
"Physical": 110
}
}
}
]
}
]
},
"Guard_Wield": {
"Interactions": [
{
"Parent": "Weapon_Daggers_Secondary_Guard_Wield",
"StaminaCost": {
"Value": 20,
"CostType": "Damage"
}
}
]
}
},
"MaxDurability": 220,
"DurabilityLossOnHit": 0.1,
"Interactions": {
"Ability1": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 1
}
]
},
"Ability2": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 2
}
]
},
"Ability3": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 3
}
]
}
}
}
@@ -0,0 +1,167 @@
{
"TranslationProperties": {
"Name": "server.items.Weapon_Longsword_Mithril.name"
},
"Categories": [
"Items.Weapons"
],
"Quality": "Epic",
"ItemLevel": 50,
"Model": "Items/Weapons/Longsword/Mithril.blockymodel",
"Texture": "Items/Weapons/Longsword/Mithril_Texture.png",
"PlayerAnimationsId": "Longsword",
"Interactions": {
"Primary": "Longsword_Attack",
"Ability1": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 1
}
]
},
"Ability2": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 2
}
]
},
"Ability3": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 3
}
]
}
},
"InteractionVars": {
"Longsword_Swing_Left_Effect": {
"Interactions": [
{
"Parent": "Longsword_Swing_Left_Effect",
"Effects": {
"WorldSoundEventId": "SFX_Longsword_Special_Swing"
}
}
]
},
"Longsword_Swing_Left_Damage": {
"Interactions": [
{
"Parent": "Longsword_Swing_Left_Damage",
"DamageCalculator": {
"Type": "Absolute",
"BaseDamage": {
"Physical": 70
},
"RandomPercentageModifier": 0.15
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Longsword_Special_Impact"
}
}
]
},
"Longsword_Swing_Right_Effect": {
"Interactions": [
{
"Parent": "Longsword_Swing_Left_Effect",
"Effects": {
"WorldSoundEventId": "SFX_Longsword_Special_Swing"
}
}
]
},
"Longsword_Swing_Right_Damage": {
"Interactions": [
{
"Parent": "Longsword_Swing_Right_Damage",
"DamageCalculator": {
"Type": "Absolute",
"BaseDamage": {
"Physical": 70
},
"RandomPercentageModifier": 0.15
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Longsword_Special_Impact"
}
}
]
},
"Longsword_Swing_Up_Left_Effect": {
"Interactions": [
{
"Parent": "Longsword_Swing_Left_Effect",
"Effects": {
"WorldSoundEventId": "SFX_Longsword_Special_Swing"
}
}
]
},
"Longsword_Swing_Up_Left_Damage": {
"Interactions": [
{
"Parent": "Longsword_Swing_Up_Left_Damage",
"DamageCalculator": {
"Type": "Absolute",
"BaseDamage": {
"Physical": 70
},
"RandomPercentageModifier": 0.15
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Longsword_Special_Impact"
}
}
]
},
"Longsword_Stab_Charged_Effect": "Longsword_Stab_Charged_Effect",
"Longsword_Stab_Charged_Damage": {
"Interactions": [
{
"Parent": "Longsword_Stab_Charged_Damage",
"DamageCalculator": {
"BaseDamage": {
"Physical": 210
},
"Type": "Absolute",
"RandomPercentageModifier": 0.15
},
"DamageEffects": {
"WorldSoundEventId": "SFX_Longsword_Special_Impact"
}
}
]
}
},
"DroppedItemAnimation": "Items/Animations/Dropped/Dropped_Diagonal_Left.blockyanim",
"IconProperties": {
"Scale": 0.31,
"Translation": [
-47,
-47
],
"Rotation": [
45,
90,
0
]
},
"Icon": "Icons/ItemsGenerated/Weapon_Longsword_Mithril.png",
"Tags": {
"Type": [
"Weapon"
],
"Family": [
"Longsword"
]
},
"MaxDurability": 160,
"DurabilityLossOnHit": 0.52,
"Weapon": {},
"ItemSoundSetId": "ISS_Weapons_Blade_Large"
}
@@ -0,0 +1,314 @@
{
"TranslationProperties": {
"Name": "server.items.Weapon_Shortbow_Cobalt.name"
},
"Parent": "Template_Weapon_Shortbow",
"Quality": "Rare",
"Model": "Items/Weapons/Bow/Cobalt.blockymodel",
"Texture": "Items/Weapons/Bow/Cobalt_Texture.png",
"Icon": "Icons/ItemsGenerated/Weapon_Bow_Cobalt.png",
"ItemLevel": 35,
"Recipe": {
"TimeSeconds": 4,
"KnowledgeRequired": false,
"Input": [
{
"ItemId": "Ingredient_Bar_Cobalt",
"Quantity": 10
},
{
"ItemId": "Ingredient_Leather_Heavy",
"Quantity": 2
},
{
"ItemId": "Ingredient_Fabric_Scrap_Shadoweave",
"Quantity": 3
}
],
"BenchRequirement": [
{
"Type": "Crafting",
"Categories": [
"Weapon_Bow"
],
"Id": "Weapon_Bench",
"RequiredTierLevel": 2
},
{
"Type": "DiagramCrafting",
"Categories": [
"Weapons.Bow"
],
"Id": "Armory"
}
]
},
"InteractionVars": {
"Primary_Shoot_Damage_Strength_0": {
"Interactions": [
{
"Parent": "Weapon_Shortbow_Primary_Shoot_Damage_Strength_0",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 7
}
}
}
]
},
"Primary_Shoot_Damage_Strength_1": {
"Interactions": [
{
"Parent": "Weapon_Shortbow_Primary_Shoot_Damage_Strength_1",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 11
}
}
}
]
},
"Primary_Shoot_Damage_Strength_2": {
"Interactions": [
{
"Parent": "Weapon_Shortbow_Primary_Shoot_Damage_Strength_2",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 15
}
}
}
]
},
"Primary_Shoot_Damage_Strength_3": {
"Interactions": [
{
"Parent": "Weapon_Shortbow_Primary_Shoot_Damage_Strength_3",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 20
}
}
}
]
},
"Primary_Shoot_Damage_Strength_4": {
"Interactions": [
{
"Parent": "Weapon_Shortbow_Primary_Shoot_Damage_Strength_4",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 23
}
},
"TargetedDamage": {
"Head": {
"DamageCalculator": {
"BaseDamage": {
"Projectile": 30
}
},
"DamageEffects": {
"Knockback": {
"Type": "Force",
"VelocityConfig": {
"AirResistance": 0.99,
"AirResistanceMax": 0.98,
"GroundResistance": 0.94,
"GroundResistanceMax": 0.3,
"Threshold": 3.0,
"Style": "Linear"
},
"Direction": {
"X": 0.0,
"Y": 0.5,
"Z": -1
},
"Force": 8,
"VelocityType": "Set"
},
"WorldParticles": [
{
"SystemId": "Impact_Critical",
"Scale": 1,
"RotationOffset": {
"Yaw": 180,
"Pitch": 0,
"Roll": 0
}
}
]
}
}
}
}
]
},
"Signature_Volley_Damage": {
"Interactions": [
{
"Parent": "Weapon_Shortbow_Signature_Volley_Damage",
"DamageCalculator": {
"BaseDamage": {
"Projectile": 17
}
}
}
]
},
"Guard_Wield": {
"Interactions": [
{
"Parent": "Weapon_Shortbow_Secondary_Guard_Wield",
"StaminaCost": {
"Value": 12.22,
"CostType": "Damage"
}
}
]
}
},
"ItemAppearanceConditions": {
"SignatureCharges": [
{
"Condition": [
1,
100
],
"ConditionValueType": "Percent",
"Model": "Items/Weapons/Bow/Cobalt_Triple.blockymodel",
"Texture": "Items/Weapons/Bow/Cobalt_Texture.png",
"LocalSoundEventId": "SFX_Bow_T2_Signature_Loop_Local",
"WorldSoundEventId": "SFX_Bow_T2_Signature_Loop",
"Particles": [
{
"SystemId": "Bow_Signature_Charge",
"TargetNodeName": "ARROW-PLACEHOLDER",
"PositionOffset": {
"X": 0.5,
"Y": 0.25,
"Z": 0
},
"Scale": 0.5,
"TargetEntityPart": "PrimaryItem"
},
{
"SystemId": "Bow_Signature_Charge",
"TargetNodeName": "ARROW-PLACEHOLDER",
"PositionOffset": {
"X": 0.5,
"Y": 0,
"Z": 0
},
"Scale": 0.5,
"TargetEntityPart": "PrimaryItem"
},
{
"SystemId": "Bow_Signature_Charge",
"TargetNodeName": "ARROW-PLACEHOLDER",
"PositionOffset": {
"X": 0.5,
"Y": -0.25,
"Z": 0
},
"Scale": 0.5,
"TargetEntityPart": "PrimaryItem"
}
],
"ModelVFXId": "Bow_Signature_Status"
}
],
"SignatureEnergy": [
{
"Condition": [
100,
100
],
"ConditionValueType": "Percent",
"Particles": [
{
"SystemId": "Sword_Signature_Ready",
"TargetNodeName": "Handle",
"PositionOffset": {
"X": 0.8
},
"TargetEntityPart": "PrimaryItem"
},
{
"SystemId": "Sword_Signature_Status_Spawn",
"TargetEntityPart": "PrimaryItem"
},
{
"SystemId": "Bow_Signature_Status",
"TargetNodeName": "Bow-Top",
"PositionOffset": {
"X": 0.55
},
"TargetEntityPart": "PrimaryItem",
"Scale": 1.3
},
{
"SystemId": "Bow_Signature_Status",
"TargetNodeName": "Bow-Bot",
"TargetEntityPart": "PrimaryItem",
"Scale": 1.3
}
],
"FirstPersonParticles": [
{
"SystemId": "Sword_Signature_Ready",
"TargetNodeName": "Handle",
"PositionOffset": {
"X": 0.8
},
"TargetEntityPart": "PrimaryItem"
},
{
"SystemId": "Sword_Signature_Status_Spawn",
"TargetNodeName": "Handle",
"TargetEntityPart": "PrimaryItem",
"PositionOffset": {
"Y": 0
}
},
{
"SystemId": "Bow_Signature_Status_FP",
"TargetNodeName": "Bow-Top",
"PositionOffset": {
"X": 0.5
},
"TargetEntityPart": "PrimaryItem"
}
]
}
]
},
"MaxDurability": 150,
"DurabilityLossOnHit": 0.58,
"Interactions": {
"Ability1": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 1
}
]
},
"Ability2": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 2
}
]
},
"Ability3": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 3
}
]
}
}
}
@@ -0,0 +1,94 @@
{
"TranslationProperties": {
"Name": "server.items.Weapon_Staff_Mithril.name"
},
"Categories": [
"Items.Weapons"
],
"Quality": "Epic",
"ItemLevel": 50,
"Model": "Items/Weapons/Staff/Mithril.blockymodel",
"Texture": "Items/Weapons/Staff/Mithril_Texture.png",
"PlayerAnimationsId": "Staff",
"Interactions": {
"Primary": "Staff_Primary",
"Secondary": "Staff_Primary",
"Ability1": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 1
}
]
},
"Ability2": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 2
}
]
},
"Ability3": {
"Interactions": [
{
"Type": "mmorpg_cast_ability",
"Slot": 3
}
]
}
},
"InteractionVars": {
"Staff_Cast_Summon_Charged": {
"Interactions": [
{
"Parent": "Staff_Cast_Summon_Charged",
"Costs": {
"Mana": 50
}
}
]
},
"Staff_Cast_Summon_Cost": {
"Interactions": [
{
"Parent": "Staff_Cast_Cost",
"StatModifiers": {
"Mana": -50
}
}
]
},
"Staff_Cast_Summon_Launch": "Staff_Cast_Launch",
"Staff_Cast_Summon_Effect": "Staff_Cast_Effect",
"Staff_Cast_Summon_Fail": "Staff_Cast_Fail",
"Spear_Swing_Left_Damage": "Spear_Swing_Left_Damage",
"Spear_Swing_Right_Damage": "Spear_Swing_Right_Damage",
"Spear_Swing_Left_Effect": "Spear_Swing_Left_Effect",
"Spear_Swing_Right_Effect": "Spear_Swing_Right_Effect"
},
"IconProperties": {
"Scale": 0.28,
"Translation": [
-52,
-52
],
"Rotation": [
22.5,
45,
315
]
},
"DroppedItemAnimation": "Items/Animations/Dropped/Dropped_Diagonal_Left.blockyanim",
"Icon": "Icons/ItemsGenerated/Weapon_Staff_Mithril.png",
"Tags": {
"Type": [
"Weapon"
],
"Family": [
"Staff"
]
},
"Weapon": {},
"ItemSoundSetId": "ISS_Weapons_Wood"
}
@@ -0,0 +1,15 @@
{
"Debug": false,
"DefaultLevel": 1,
"MaxPlayers": 500,
"BaseXpPerLevel": 100,
"KillExperience": 10,
"Database": {
"FileName": "mmorpg.db"
},
"Features": {
"Economy": true,
"Quests": false,
"Guilds": false
}
}
@@ -0,0 +1,8 @@
CREATE TABLE IF NOT EXISTS player_profiles (
uuid TEXT PRIMARY KEY,
display_name TEXT NOT NULL,
level INTEGER NOT NULL DEFAULT 1,
experience INTEGER NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
@@ -0,0 +1,63 @@
-- MMORPG progression schema: classes, powers, jobs, races, groups.
-- New columns on player_profiles. SQLite ignores duplicate ADD COLUMN guarded by
-- the migration runner (each migration is applied at most once via schema_migrations).
ALTER TABLE player_profiles ADD COLUMN class_id TEXT;
ALTER TABLE player_profiles ADD COLUMN powers TEXT NOT NULL DEFAULT '[]';
ALTER TABLE player_profiles ADD COLUMN jobs TEXT NOT NULL DEFAULT '[]';
ALTER TABLE player_profiles ADD COLUMN guild_id TEXT;
ALTER TABLE player_profiles ADD COLUMN group_id TEXT;
ALTER TABLE player_profiles ADD COLUMN is_connected INTEGER NOT NULL DEFAULT 0;
ALTER TABLE player_profiles ADD COLUMN total_time_play INTEGER NOT NULL DEFAULT 0;
ALTER TABLE player_profiles ADD COLUMN last_date_connected INTEGER NOT NULL DEFAULT 0;
ALTER TABLE player_profiles ADD COLUMN date_creation INTEGER NOT NULL DEFAULT 0;
ALTER TABLE player_profiles ADD COLUMN money INTEGER NOT NULL DEFAULT 0;
ALTER TABLE player_profiles ADD COLUMN race_id TEXT NOT NULL DEFAULT 'human';
-- Backfill creation date for profiles that predate this migration.
UPDATE player_profiles SET date_creation = created_at WHERE date_creation = 0;
-- Reference tables (definitions persisted for inspection / future editing).
CREATE TABLE IF NOT EXISTS classes (
id TEXT PRIMARY KEY,
display_name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
weapons TEXT NOT NULL DEFAULT '[]'
);
CREATE TABLE IF NOT EXISTS powers (
id TEXT PRIMARY KEY,
display_name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
passive INTEGER NOT NULL DEFAULT 1
);
CREATE TABLE IF NOT EXISTS jobs (
id TEXT PRIMARY KEY,
display_name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT ''
);
CREATE TABLE IF NOT EXISTS races (
id TEXT PRIMARY KEY,
display_name TEXT NOT NULL,
description TEXT NOT NULL DEFAULT '',
xp_multiplier REAL NOT NULL DEFAULT 1.0
);
-- Groups (parties): shared XP between members.
CREATE TABLE IF NOT EXISTS groups (
id TEXT PRIMARY KEY,
owner_uuid TEXT NOT NULL,
created_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS group_members (
group_id TEXT NOT NULL,
player_uuid TEXT NOT NULL,
joined_at INTEGER NOT NULL,
PRIMARY KEY (group_id, player_uuid),
FOREIGN KEY (group_id) REFERENCES groups(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_group_members_player ON group_members(player_uuid);
@@ -0,0 +1,18 @@
{
"Group": "com.disklexar",
"Name": "MMORPG",
"Version": "0.4.7",
"Description": "Serveur MMORPG Hytale — progression, persistance et systèmes sociaux",
"Authors": [
{
"Name": "Disklexar"
}
],
"Website": "https://github.com/disklexar/hytale-mmorpg",
"DisabledByDefault": false,
"IncludesAssetPack": true,
"Dependencies": {},
"OptionalDependencies": {},
"ServerVersion": "*",
"Main": "com.disklexar.mmorpg.MmorpgPlugin"
}