mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-22 20:48:55 +07:00
Added support for distinct vendor inventories
Added support for distinct vendor inventories No inventory component yet -- generated each time vendor loaded Moved VendorPanel inventory management to Npc for time being (from UI to a system) Modified VendorPanel#config signature to include inventory item list Created VendorGenerator#generate(String) to generate an inventory for a specified vendor Added ItemGenerator and VendorGenerator systems to various engines
This commit is contained in:
parent
bda2b7152b
commit
2e774fd953
@ -11,6 +11,7 @@ import com.badlogic.gdx.math.MathUtils;
|
|||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
||||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
||||||
|
import com.badlogic.gdx.utils.Array;
|
||||||
import com.badlogic.gdx.utils.IntSet;
|
import com.badlogic.gdx.utils.IntSet;
|
||||||
|
|
||||||
import com.riiablo.Riiablo;
|
import com.riiablo.Riiablo;
|
||||||
@ -23,6 +24,8 @@ import com.riiablo.engine.server.component.MenuWrapper;
|
|||||||
import com.riiablo.engine.server.component.PathWrapper;
|
import com.riiablo.engine.server.component.PathWrapper;
|
||||||
import com.riiablo.engine.server.component.Pathfind;
|
import com.riiablo.engine.server.component.Pathfind;
|
||||||
import com.riiablo.engine.server.event.NpcInteractionEvent;
|
import com.riiablo.engine.server.event.NpcInteractionEvent;
|
||||||
|
import com.riiablo.item.Item;
|
||||||
|
import com.riiablo.item.VendorGenerator;
|
||||||
import com.riiablo.map.DS1;
|
import com.riiablo.map.DS1;
|
||||||
import com.riiablo.screen.panel.VendorPanel;
|
import com.riiablo.screen.panel.VendorPanel;
|
||||||
import com.riiablo.widget.NpcDialogBox;
|
import com.riiablo.widget.NpcDialogBox;
|
||||||
@ -60,6 +63,8 @@ public class Npc extends AI {
|
|||||||
String name;
|
String name;
|
||||||
MonStats.Entry monstats;
|
MonStats.Entry monstats;
|
||||||
|
|
||||||
|
protected VendorGenerator vendors;
|
||||||
|
|
||||||
public Npc(int entityId) {
|
public Npc(int entityId) {
|
||||||
super(entityId);
|
super(entityId);
|
||||||
}
|
}
|
||||||
@ -116,7 +121,15 @@ public class Npc extends AI {
|
|||||||
menu.addItem(3334, new ClickListener() { // trade/repair
|
menu.addItem(3334, new ClickListener() { // trade/repair
|
||||||
@Override
|
@Override
|
||||||
public void clicked(InputEvent event, float x, float y) {
|
public void clicked(InputEvent event, float x, float y) {
|
||||||
Riiablo.game.vendorPanel.config(VendorPanel.SMITHY);
|
// TODO: create inventory component
|
||||||
|
Array<Item> items;
|
||||||
|
try {
|
||||||
|
items = vendors.generate(monstats.Id);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
items = new Array<>(false, 0, Item.class);
|
||||||
|
Gdx.app.error(TAG, t.getMessage(), t);
|
||||||
|
}
|
||||||
|
Riiablo.game.vendorPanel.config(VendorPanel.SMITHY, items);
|
||||||
Riiablo.game.setLeftPanel(Riiablo.game.vendorPanel);
|
Riiablo.game.setLeftPanel(Riiablo.game.vendorPanel);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -124,7 +137,15 @@ public class Npc extends AI {
|
|||||||
menu.addItem(3396, new ClickListener() { // trade
|
menu.addItem(3396, new ClickListener() { // trade
|
||||||
@Override
|
@Override
|
||||||
public void clicked(InputEvent event, float x, float y) {
|
public void clicked(InputEvent event, float x, float y) {
|
||||||
Riiablo.game.vendorPanel.config(VendorPanel.TRADER);
|
// TODO: create inventory component
|
||||||
|
Array<Item> items;
|
||||||
|
try {
|
||||||
|
items = vendors.generate(monstats.Id);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
items = new Array<>(false, 0, Item.class);
|
||||||
|
Gdx.app.error(TAG, t.getMessage(), t);
|
||||||
|
}
|
||||||
|
Riiablo.game.vendorPanel.config(VendorPanel.TRADER, items);
|
||||||
Riiablo.game.setLeftPanel(Riiablo.game.vendorPanel);
|
Riiablo.game.setLeftPanel(Riiablo.game.vendorPanel);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -138,7 +159,8 @@ public class Npc extends AI {
|
|||||||
menu.addItem(3398, new ClickListener() { // gamble
|
menu.addItem(3398, new ClickListener() { // gamble
|
||||||
@Override
|
@Override
|
||||||
public void clicked(InputEvent event, float x, float y) {
|
public void clicked(InputEvent event, float x, float y) {
|
||||||
Riiablo.game.vendorPanel.config(VendorPanel.GAMBLER);
|
// TODO: generate special gamble inventory each time
|
||||||
|
Riiablo.game.vendorPanel.config(VendorPanel.GAMBLER, new Array<Item>(false, 0, Item.class));
|
||||||
Riiablo.game.setLeftPanel(Riiablo.game.vendorPanel);
|
Riiablo.game.setLeftPanel(Riiablo.game.vendorPanel);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -7,17 +7,24 @@ import net.mostlyoriginal.api.system.core.PassiveSystem;
|
|||||||
import com.badlogic.gdx.math.MathUtils;
|
import com.badlogic.gdx.math.MathUtils;
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
|
|
||||||
|
import com.riiablo.Riiablo;
|
||||||
import com.riiablo.codec.excel.Excel;
|
import com.riiablo.codec.excel.Excel;
|
||||||
import com.riiablo.codec.excel.ItemEntry;
|
import com.riiablo.codec.excel.ItemEntry;
|
||||||
|
|
||||||
public class VendorGenerator extends PassiveSystem {
|
public class VendorGenerator extends PassiveSystem {
|
||||||
public ItemGenerator generator;
|
protected ItemGenerator generator;
|
||||||
|
|
||||||
|
public Array<Item> generate(String vendor) throws Exception {
|
||||||
|
Array<Item> items = new Array<>(true, 64, Item.class);
|
||||||
|
generate(vendor, items, Riiablo.files.armor);
|
||||||
|
generate(vendor, items, Riiablo.files.weapons);
|
||||||
|
generate(vendor, items, Riiablo.files.misc);
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
public void generate(String vendor, Array<Item> items, Excel<? extends ItemEntry> excel) throws Exception {
|
public void generate(String vendor, Array<Item> items, Excel<? extends ItemEntry> excel) throws Exception {
|
||||||
Class<? extends ItemEntry> entryClass = excel.getEntryClass();
|
Class<? extends ItemEntry> entryClass = excel.getEntryClass();
|
||||||
Field field = entryClass.getField(vendor);
|
Field field = entryClass.getField(vendor);
|
||||||
|
|
||||||
items.clear();
|
|
||||||
for (ItemEntry base : excel) {
|
for (ItemEntry base : excel) {
|
||||||
int[] vendorData = (int[]) field.get(base);
|
int[] vendorData = (int[]) field.get(base);
|
||||||
if (vendorData[1] > 0) {
|
if (vendorData[1] > 0) {
|
||||||
|
@ -103,6 +103,8 @@ import com.riiablo.engine.server.component.Velocity;
|
|||||||
import com.riiablo.engine.server.event.ZoneChangeEvent;
|
import com.riiablo.engine.server.event.ZoneChangeEvent;
|
||||||
import com.riiablo.graphics.PaletteIndexedColorDrawable;
|
import com.riiablo.graphics.PaletteIndexedColorDrawable;
|
||||||
import com.riiablo.item.Item;
|
import com.riiablo.item.Item;
|
||||||
|
import com.riiablo.item.ItemGenerator;
|
||||||
|
import com.riiablo.item.VendorGenerator;
|
||||||
import com.riiablo.key.MappedKey;
|
import com.riiablo.key.MappedKey;
|
||||||
import com.riiablo.key.MappedKeyStateAdapter;
|
import com.riiablo.key.MappedKeyStateAdapter;
|
||||||
import com.riiablo.map.Act1MapBuilder;
|
import com.riiablo.map.Act1MapBuilder;
|
||||||
@ -567,6 +569,8 @@ public class GameScreen extends ScreenAdapter implements GameLoadingScreen.Loada
|
|||||||
builder.with(new CursorMovementSystem());
|
builder.with(new CursorMovementSystem());
|
||||||
}
|
}
|
||||||
if (socket == null) {
|
if (socket == null) {
|
||||||
|
builder.with(new ItemGenerator());
|
||||||
|
builder.with(new VendorGenerator());
|
||||||
builder.with(new AIStepper());
|
builder.with(new AIStepper());
|
||||||
}
|
}
|
||||||
builder
|
builder
|
||||||
|
@ -20,9 +20,7 @@ import com.riiablo.codec.DC6;
|
|||||||
import com.riiablo.codec.excel.Inventory;
|
import com.riiablo.codec.excel.Inventory;
|
||||||
import com.riiablo.graphics.BlendMode;
|
import com.riiablo.graphics.BlendMode;
|
||||||
import com.riiablo.item.Item;
|
import com.riiablo.item.Item;
|
||||||
import com.riiablo.item.ItemGenerator;
|
|
||||||
import com.riiablo.item.Stat;
|
import com.riiablo.item.Stat;
|
||||||
import com.riiablo.item.VendorGenerator;
|
|
||||||
import com.riiablo.loader.DC6Loader;
|
import com.riiablo.loader.DC6Loader;
|
||||||
import com.riiablo.widget.Button;
|
import com.riiablo.widget.Button;
|
||||||
import com.riiablo.widget.Label;
|
import com.riiablo.widget.Label;
|
||||||
@ -242,35 +240,6 @@ public class VendorPanel extends WidgetGroup implements Disposable {
|
|||||||
addActor(grid);
|
addActor(grid);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemGenerator generator = new ItemGenerator();
|
|
||||||
VendorGenerator vendors = new VendorGenerator();
|
|
||||||
vendors.generator = generator;
|
|
||||||
|
|
||||||
Array<Item> items = new Array<>(Item.class);
|
|
||||||
try {
|
|
||||||
int count;
|
|
||||||
vendors.generate("akara", items, Riiablo.files.armor);
|
|
||||||
count = tabs[TAB_ARMOR].grid.drain(items);
|
|
||||||
if (count == 0) tabs[TAB_ARMOR].setVisible(false);
|
|
||||||
Gdx.app.debug(TAG, "Dropping " + items);
|
|
||||||
|
|
||||||
vendors.generate("akara", items, Riiablo.files.weapons);
|
|
||||||
count = tabs[TAB_WEAPONS].grid.drain(items);
|
|
||||||
if (count == 0) tabs[TAB_WEAPONS].setVisible(false);
|
|
||||||
|
|
||||||
count = tabs[TAB_WEAPONS2].grid.drain(items);
|
|
||||||
if (count == 0) tabs[TAB_WEAPONS2].setVisible(false);
|
|
||||||
Gdx.app.debug(TAG, "Dropping " + items);
|
|
||||||
|
|
||||||
vendors.generate("akara", items, Riiablo.files.misc);
|
|
||||||
count = tabs[TAB_MISC].grid.drain(items);
|
|
||||||
if (count == 0) tabs[TAB_MISC].setVisible(false);
|
|
||||||
Gdx.app.debug(TAG, "Dropping " + items);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
Gdx.app.error(TAG, t.getMessage(), t);
|
|
||||||
}
|
|
||||||
|
|
||||||
setTab(TAB_MISC);
|
|
||||||
setDebug(true, true);
|
setDebug(true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,7 +274,7 @@ public class VendorPanel extends WidgetGroup implements Disposable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void config(int flags) {
|
public void config(int flags, Array<Item> items) {
|
||||||
buttonGroup.uncheckAll();
|
buttonGroup.uncheckAll();
|
||||||
btnBuy.setVisible((flags & BUY) == BUY);
|
btnBuy.setVisible((flags & BUY) == BUY);
|
||||||
btnSell.setVisible((flags & SELL) == SELL);
|
btnSell.setVisible((flags & SELL) == SELL);
|
||||||
@ -315,6 +284,43 @@ public class VendorPanel extends WidgetGroup implements Disposable {
|
|||||||
for (int i = 0; i < btnBlank.length; i++) {
|
for (int i = 0; i < btnBlank.length; i++) {
|
||||||
btnBlank[i].setVisible((flags & BLANK_MASKS[i]) == 0);
|
btnBlank[i].setVisible((flags & BLANK_MASKS[i]) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: supply cleaner API grid.drain(items, "misc") or similar
|
||||||
|
Array<Item> tmp = new Array<>(true, items.size, Item.class);
|
||||||
|
try {
|
||||||
|
int count;
|
||||||
|
collect(items, tmp, "armo");
|
||||||
|
count = tabs[TAB_ARMOR].grid.drain(tmp);
|
||||||
|
tabs[TAB_ARMOR].setVisible(count > 0);
|
||||||
|
Gdx.app.debug(TAG, "Dropping " + tmp);
|
||||||
|
|
||||||
|
collect(items, tmp, "weap");
|
||||||
|
count = tabs[TAB_WEAPONS].grid.drain(tmp);
|
||||||
|
tabs[TAB_WEAPONS].setVisible(count > 0);
|
||||||
|
|
||||||
|
count = tabs[TAB_WEAPONS2].grid.drain(tmp);
|
||||||
|
tabs[TAB_WEAPONS2].setVisible(count > 0);
|
||||||
|
Gdx.app.debug(TAG, "Dropping " + tmp);
|
||||||
|
|
||||||
|
collect(items, tmp, "misc");
|
||||||
|
count = tabs[TAB_MISC].grid.drain(tmp);
|
||||||
|
tabs[TAB_MISC].setVisible(count > 0);
|
||||||
|
Gdx.app.debug(TAG, "Dropping " + tmp);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
Gdx.app.error(TAG, t.getMessage(), t);
|
||||||
|
}
|
||||||
|
|
||||||
|
setTab(TAB_MISC);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Array<Item> collect(Array<Item> items, Array<Item> to, String page) {
|
||||||
|
to.clear();
|
||||||
|
for (Item item : items) {
|
||||||
|
if (item.typeEntry.StorePage.equalsIgnoreCase(page)) {
|
||||||
|
to.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTab(Tab tab) {
|
void setTab(Tab tab) {
|
||||||
|
@ -69,6 +69,8 @@ import com.riiablo.engine.server.ServerNetworkIdManager;
|
|||||||
import com.riiablo.engine.server.VelocityAdder;
|
import com.riiablo.engine.server.VelocityAdder;
|
||||||
import com.riiablo.engine.server.WarpInteractor;
|
import com.riiablo.engine.server.WarpInteractor;
|
||||||
import com.riiablo.engine.server.component.Networked;
|
import com.riiablo.engine.server.component.Networked;
|
||||||
|
import com.riiablo.item.ItemGenerator;
|
||||||
|
import com.riiablo.item.VendorGenerator;
|
||||||
import com.riiablo.map.Act1MapBuilder;
|
import com.riiablo.map.Act1MapBuilder;
|
||||||
import com.riiablo.map.DS1;
|
import com.riiablo.map.DS1;
|
||||||
import com.riiablo.map.DS1Loader;
|
import com.riiablo.map.DS1Loader;
|
||||||
@ -260,10 +262,12 @@ public class D2GS extends ApplicationAdapter {
|
|||||||
.with(new SerializationManager())
|
.with(new SerializationManager())
|
||||||
.with(mapManager)
|
.with(mapManager)
|
||||||
.with(itemManager)
|
.with(itemManager)
|
||||||
|
.with(new ItemGenerator())
|
||||||
.with(new CofManager())
|
.with(new CofManager())
|
||||||
.with(new ObjectInitializer())
|
.with(new ObjectInitializer())
|
||||||
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
||||||
|
|
||||||
|
.with(new VendorGenerator())
|
||||||
.with(new AIStepper())
|
.with(new AIStepper())
|
||||||
.with(new Pathfinder())
|
.with(new Pathfinder())
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ import com.riiablo.engine.server.ServerItemManager;
|
|||||||
import com.riiablo.engine.server.ServerNetworkIdManager;
|
import com.riiablo.engine.server.ServerNetworkIdManager;
|
||||||
import com.riiablo.engine.server.VelocityAdder;
|
import com.riiablo.engine.server.VelocityAdder;
|
||||||
import com.riiablo.engine.server.WarpInteractor;
|
import com.riiablo.engine.server.WarpInteractor;
|
||||||
|
import com.riiablo.item.ItemGenerator;
|
||||||
|
import com.riiablo.item.VendorGenerator;
|
||||||
import com.riiablo.map.Act1MapBuilder;
|
import com.riiablo.map.Act1MapBuilder;
|
||||||
import com.riiablo.map.DS1;
|
import com.riiablo.map.DS1;
|
||||||
import com.riiablo.map.DS1Loader;
|
import com.riiablo.map.DS1Loader;
|
||||||
@ -207,10 +209,12 @@ public class Main extends ApplicationAdapter {
|
|||||||
.with(new SerializationManager())
|
.with(new SerializationManager())
|
||||||
.with(mapManager)
|
.with(mapManager)
|
||||||
.with(itemManager)
|
.with(itemManager)
|
||||||
|
.with(new ItemGenerator())
|
||||||
.with(new CofManager())
|
.with(new CofManager())
|
||||||
.with(new ObjectInitializer())
|
.with(new ObjectInitializer())
|
||||||
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
||||||
|
|
||||||
|
.with(new VendorGenerator())
|
||||||
.with(new AIStepper())
|
.with(new AIStepper())
|
||||||
.with(new Pathfinder())
|
.with(new Pathfinder())
|
||||||
|
|
||||||
|
@ -79,6 +79,8 @@ import com.riiablo.engine.server.component.Classname;
|
|||||||
import com.riiablo.engine.server.component.Position;
|
import com.riiablo.engine.server.component.Position;
|
||||||
import com.riiablo.graphics.BlendMode;
|
import com.riiablo.graphics.BlendMode;
|
||||||
import com.riiablo.graphics.PaletteIndexedBatch;
|
import com.riiablo.graphics.PaletteIndexedBatch;
|
||||||
|
import com.riiablo.item.ItemGenerator;
|
||||||
|
import com.riiablo.item.VendorGenerator;
|
||||||
import com.riiablo.loader.BitmapFontLoader;
|
import com.riiablo.loader.BitmapFontLoader;
|
||||||
import com.riiablo.loader.COFLoader;
|
import com.riiablo.loader.COFLoader;
|
||||||
import com.riiablo.loader.DC6Loader;
|
import com.riiablo.loader.DC6Loader;
|
||||||
@ -207,6 +209,8 @@ public class MapViewer extends ApplicationAdapter {
|
|||||||
.with(new TagManager())
|
.with(new TagManager())
|
||||||
.with(mapManager)
|
.with(mapManager)
|
||||||
.with(new ItemManager())
|
.with(new ItemManager())
|
||||||
|
.with(new ItemGenerator()) // TODO: remove when support for inventory component added
|
||||||
|
.with(new VendorGenerator()) // TODO: remove when support for inventory component added
|
||||||
.with(new CofManager())
|
.with(new CofManager())
|
||||||
.with(new ObjectInitializer())
|
.with(new ObjectInitializer())
|
||||||
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
||||||
|
Loading…
Reference in New Issue
Block a user