Starsector API
Loading...
Searching...
No Matches
AddAbility.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.List;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.InteractionDialogAPI;
8import com.fs.starfarer.api.campaign.PersistentUIDataAPI.AbilitySlotAPI;
9import com.fs.starfarer.api.campaign.PersistentUIDataAPI.AbilitySlotsAPI;
10import com.fs.starfarer.api.campaign.rules.MemoryAPI;
11import com.fs.starfarer.api.util.Misc.Token;
12
16public class AddAbility extends BaseCommandPlugin {
17
18 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
19 //if (dialog == null) return false;
20
21 // if the player already had the ability, calling this command ensures they don't lose it
22 // if they spec out of the skill that granted it, but this command will be "quiet"
23
24 String abilityId = params.get(0).getString(memoryMap);
25 if (abilityId == null) return false;
26
27 boolean hadAbilityAlready = Global.getSector().getPlayerFleet().hasAbility(abilityId);
28
29 boolean found = false;
30 AbilitySlotsAPI slots = Global.getSector().getUIData().getAbilitySlotsAPI();
31 int curr = slots.getCurrBarIndex();
32 OUTER: for (int i = 0; i < 5; i++) {
33 slots.setCurrBarIndex(i);
34 for (AbilitySlotAPI slot : slots.getCurrSlotsCopy()) {
35 if (abilityId.equals(slot.getAbilityId())) {
36 found = true;
37 break OUTER;
38 }
39 }
40 slots.setCurrBarIndex(curr);
41 }
42 if (!found) {
43 hadAbilityAlready = false;
44 }
45
46 Global.getSector().getCharacterData().addAbility(abilityId);
47 //Global.getSector().getUIData().getAbilitySlotsAPI().getCurrSlotsCopy().get(8).getAbilityId()
48
49 if (!hadAbilityAlready) {
50 boolean assignedToSlot = false;
51 boolean doNotAssign = false;
52 if (params.size() >= 2) {
53 int slotIndex = (int) params.get(1).getFloat(memoryMap);
54 if (slotIndex < 0) {
55 doNotAssign = true;
56 } else {
57 slots.setCurrBarIndex(0);
58 AbilitySlotAPI slot = slots.getCurrSlotsCopy().get(slotIndex);
59 if (slot.getAbilityId() == null) {
60 slot.setAbilityId(abilityId);
61 assignedToSlot = true;
62 }
63 }
64 }
65
66 if (!assignedToSlot && !doNotAssign) {
67 int currBarIndex = slots.getCurrBarIndex();
68 OUTER: for (int i = 0; i < 5; i++) {
69 slots.setCurrBarIndex(i);
70 for (int j = 0; j < 10; j++) {
71 AbilitySlotAPI slot = slots.getCurrSlotsCopy().get(j);
72 if (slot.getAbilityId() == null) {
73 slot.setAbilityId(abilityId);
74 assignedToSlot = true;
75 break OUTER;
76 }
77 }
78 }
79 slots.setCurrBarIndex(currBarIndex);
80 }
81
82 Global.getSector().getCharacterData().getMemoryWithoutUpdate().set("$ability:" + abilityId, true, 0);
83 if (dialog != null) {
84 AddRemoveCommodity.addAbilityGainText(abilityId, dialog.getTextPanel());
85 }
86 }
87
88 return true;
89 }
90
91
92}
93
94
95
static SectorAPI getSector()
Definition Global.java:59
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static void addAbilityGainText(String abilityId, TextPanelAPI text)