mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-02-22 12:38:12 +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.scenes.scene2d.InputEvent;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.IntSet;
|
||||
|
||||
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.Pathfind;
|
||||
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.screen.panel.VendorPanel;
|
||||
import com.riiablo.widget.NpcDialogBox;
|
||||
@ -60,6 +63,8 @@ public class Npc extends AI {
|
||||
String name;
|
||||
MonStats.Entry monstats;
|
||||
|
||||
protected VendorGenerator vendors;
|
||||
|
||||
public Npc(int entityId) {
|
||||
super(entityId);
|
||||
}
|
||||
@ -116,7 +121,15 @@ public class Npc extends AI {
|
||||
menu.addItem(3334, new ClickListener() { // trade/repair
|
||||
@Override
|
||||
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);
|
||||
}
|
||||
});
|
||||
@ -124,7 +137,15 @@ public class Npc extends AI {
|
||||
menu.addItem(3396, new ClickListener() { // trade
|
||||
@Override
|
||||
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);
|
||||
}
|
||||
});
|
||||
@ -138,7 +159,8 @@ public class Npc extends AI {
|
||||
menu.addItem(3398, new ClickListener() { // gamble
|
||||
@Override
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
@ -7,17 +7,24 @@ import net.mostlyoriginal.api.system.core.PassiveSystem;
|
||||
import com.badlogic.gdx.math.MathUtils;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
|
||||
import com.riiablo.Riiablo;
|
||||
import com.riiablo.codec.excel.Excel;
|
||||
import com.riiablo.codec.excel.ItemEntry;
|
||||
|
||||
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 {
|
||||
Class<? extends ItemEntry> entryClass = excel.getEntryClass();
|
||||
Field field = entryClass.getField(vendor);
|
||||
|
||||
items.clear();
|
||||
for (ItemEntry base : excel) {
|
||||
int[] vendorData = (int[]) field.get(base);
|
||||
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.graphics.PaletteIndexedColorDrawable;
|
||||
import com.riiablo.item.Item;
|
||||
import com.riiablo.item.ItemGenerator;
|
||||
import com.riiablo.item.VendorGenerator;
|
||||
import com.riiablo.key.MappedKey;
|
||||
import com.riiablo.key.MappedKeyStateAdapter;
|
||||
import com.riiablo.map.Act1MapBuilder;
|
||||
@ -567,6 +569,8 @@ public class GameScreen extends ScreenAdapter implements GameLoadingScreen.Loada
|
||||
builder.with(new CursorMovementSystem());
|
||||
}
|
||||
if (socket == null) {
|
||||
builder.with(new ItemGenerator());
|
||||
builder.with(new VendorGenerator());
|
||||
builder.with(new AIStepper());
|
||||
}
|
||||
builder
|
||||
|
@ -20,9 +20,7 @@ import com.riiablo.codec.DC6;
|
||||
import com.riiablo.codec.excel.Inventory;
|
||||
import com.riiablo.graphics.BlendMode;
|
||||
import com.riiablo.item.Item;
|
||||
import com.riiablo.item.ItemGenerator;
|
||||
import com.riiablo.item.Stat;
|
||||
import com.riiablo.item.VendorGenerator;
|
||||
import com.riiablo.loader.DC6Loader;
|
||||
import com.riiablo.widget.Button;
|
||||
import com.riiablo.widget.Label;
|
||||
@ -242,35 +240,6 @@ public class VendorPanel extends WidgetGroup implements Disposable {
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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();
|
||||
btnBuy.setVisible((flags & BUY) == BUY);
|
||||
btnSell.setVisible((flags & SELL) == SELL);
|
||||
@ -315,6 +284,43 @@ public class VendorPanel extends WidgetGroup implements Disposable {
|
||||
for (int i = 0; i < btnBlank.length; i++) {
|
||||
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) {
|
||||
|
@ -69,6 +69,8 @@ import com.riiablo.engine.server.ServerNetworkIdManager;
|
||||
import com.riiablo.engine.server.VelocityAdder;
|
||||
import com.riiablo.engine.server.WarpInteractor;
|
||||
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.DS1;
|
||||
import com.riiablo.map.DS1Loader;
|
||||
@ -260,10 +262,12 @@ public class D2GS extends ApplicationAdapter {
|
||||
.with(new SerializationManager())
|
||||
.with(mapManager)
|
||||
.with(itemManager)
|
||||
.with(new ItemGenerator())
|
||||
.with(new CofManager())
|
||||
.with(new ObjectInitializer())
|
||||
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
||||
|
||||
.with(new VendorGenerator())
|
||||
.with(new AIStepper())
|
||||
.with(new Pathfinder())
|
||||
|
||||
|
@ -51,6 +51,8 @@ import com.riiablo.engine.server.ServerItemManager;
|
||||
import com.riiablo.engine.server.ServerNetworkIdManager;
|
||||
import com.riiablo.engine.server.VelocityAdder;
|
||||
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.DS1;
|
||||
import com.riiablo.map.DS1Loader;
|
||||
@ -207,10 +209,12 @@ public class Main extends ApplicationAdapter {
|
||||
.with(new SerializationManager())
|
||||
.with(mapManager)
|
||||
.with(itemManager)
|
||||
.with(new ItemGenerator())
|
||||
.with(new CofManager())
|
||||
.with(new ObjectInitializer())
|
||||
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
||||
|
||||
.with(new VendorGenerator())
|
||||
.with(new AIStepper())
|
||||
.with(new Pathfinder())
|
||||
|
||||
|
@ -79,6 +79,8 @@ import com.riiablo.engine.server.component.Classname;
|
||||
import com.riiablo.engine.server.component.Position;
|
||||
import com.riiablo.graphics.BlendMode;
|
||||
import com.riiablo.graphics.PaletteIndexedBatch;
|
||||
import com.riiablo.item.ItemGenerator;
|
||||
import com.riiablo.item.VendorGenerator;
|
||||
import com.riiablo.loader.BitmapFontLoader;
|
||||
import com.riiablo.loader.COFLoader;
|
||||
import com.riiablo.loader.DC6Loader;
|
||||
@ -207,6 +209,8 @@ public class MapViewer extends ApplicationAdapter {
|
||||
.with(new TagManager())
|
||||
.with(mapManager)
|
||||
.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 ObjectInitializer())
|
||||
.with(new ObjectInteractor(), new WarpInteractor(), new ItemInteractor())
|
||||
|
Loading…
Reference in New Issue
Block a user