mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-08-27 16:56:48 -04:00
Space rare loot system functioning. Pending testing.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package script.space.rare_loot;
|
||||
|
||||
import script.library.luck;
|
||||
import script.library.static_item;
|
||||
import script.library.space_flags;
|
||||
import script.library.space_utils;
|
||||
@@ -16,6 +17,10 @@ public class space_rare_loot extends script.base_script
|
||||
public static final String VAR_LAST_CHEST_AWARD_TIME = "loot.space_rare.lastChestAwardTime";
|
||||
public static final String VAR_CHEST_REWARD_QUALITY = "loot.space_rare.rewardQuality";
|
||||
public static final String VAR_CHEST_REWARD_TIER = "loot.space_rare.rewardTier";
|
||||
public static final String VAR_ITEM_IS_RARE_SPACE_LOOT = "loot.space_rare.item.isRareSpaceLoot";
|
||||
public static final String VAR_ITEM_REWARD_QUALITY = "loot.space_rare.item.rewardQuality";
|
||||
public static final String VAR_ITEM_REWARD_QUALITY_NAME = "loot.space_rare.item.rewardQualityName";
|
||||
public static final String VAR_ITEM_REWARD_TIER = "loot.space_rare.item.rewardTier";
|
||||
public static final String SPACE_RLS_TABLE_LOCATION = "datatables/space_loot/space_rls";
|
||||
public static final String REWARD_TABLE_BASE = SPACE_RLS_TABLE_LOCATION + "/rewards_tier_";
|
||||
public static final String REWARD_TABLE_SUFFIX = ".iff";
|
||||
@@ -29,6 +34,7 @@ public class space_rare_loot extends script.base_script
|
||||
public static final String SCRIPT_SPACE_RARE_LOOT_CHEST = "space.rare_loot.space_rare_loot_chest";
|
||||
public static final int MIN_REWARD_TIER = 1;
|
||||
public static final int MAX_REWARD_TIER = 5;
|
||||
public static final float LUCK_QUALITY_UPGRADE_MODIFIER = 0.10f;
|
||||
|
||||
public static boolean checkAwardEligibility(obj_id playerShip, obj_id targetShip) throws InterruptedException
|
||||
{
|
||||
@@ -107,9 +113,15 @@ public class space_rare_loot extends script.base_script
|
||||
double rewardChanceTotal = adjustedRareChance + adjustedExceptionalChance + adjustedLegendaryChance;
|
||||
double rewardRoll = rewardChanceTotal > 0.0d ? Math.random() * rewardChanceTotal : 0.0d;
|
||||
int rewardQuality = determineRewardQuality(rewardRoll, adjustedRareChance, adjustedExceptionalChance, adjustedLegendaryChance);
|
||||
int originalRewardQuality = rewardQuality;
|
||||
boolean luckyQualityUpgrade = luck.isLucky(player, LUCK_QUALITY_UPGRADE_MODIFIER);
|
||||
if (luckyQualityUpgrade)
|
||||
{
|
||||
rewardQuality = upgradeRewardQuality(rewardQuality);
|
||||
}
|
||||
String rewardQualityName = getRewardQualityName(rewardQuality);
|
||||
float rewardQualityModifier = getRewardQualityModifier(rewardQuality);
|
||||
int rewardTier = getRewardTier(effectivePlayerTier, targetTier);
|
||||
int rewardTier = getRewardTier(targetTier);
|
||||
obj_id lootContainer = getLootContainer(playerShip, player);
|
||||
if (!isIdValid(lootContainer))
|
||||
{
|
||||
@@ -125,10 +137,23 @@ public class space_rare_loot extends script.base_script
|
||||
}
|
||||
setObjVar(player, VAR_LAST_CHEST_AWARD_TIME, getGameTime());
|
||||
debug(player, "eligible, roll " + roll + " <= chance " + adjustedChance + " succeeded. Created " + rewardQualityName + " chest " + chest + ".");
|
||||
CustomerServiceLog(LOG_CHANNEL, "Space rare loot award success. Player=" + player + " playerTier=" + playerTier + " effectivePlayerTier=" + effectivePlayerTier + " playerShip=" + playerShip + " targetShip=" + targetShip + " targetTier=" + targetTier + " lootContainer=" + lootContainer + " chest=" + chest + " rewardTier=" + rewardTier + " higherTierDelta=" + higherTierDelta + " chance=" + adjustedChance + " roll=" + roll + " rewardQuality=" + rewardQualityName + "(" + rewardQuality + ")" + " rewardQualityModifier=" + rewardQualityModifier + " rewardRoll=" + rewardRoll + " rewardChanceTotal=" + rewardChanceTotal + " baseRareChance=" + rareChance + " baseExceptionalChance=" + exceptionalChance + " baseLegendaryChance=" + legendaryChance + " adjustedRareChance=" + adjustedRareChance + " adjustedExceptionalChance=" + adjustedExceptionalChance + " adjustedLegendaryChance=" + adjustedLegendaryChance + " shiftedChance=" + shiftedChance);
|
||||
CustomerServiceLog(LOG_CHANNEL, "Space rare loot award success. Player=" + player + " playerTier=" + playerTier + " effectivePlayerTier=" + effectivePlayerTier + " playerShip=" + playerShip + " targetShip=" + targetShip + " targetTier=" + targetTier + " lootContainer=" + lootContainer + " chest=" + chest + " rewardTier=" + rewardTier + " higherTierDelta=" + higherTierDelta + " chance=" + adjustedChance + " roll=" + roll + " rewardQuality=" + rewardQualityName + "(" + rewardQuality + ")" + " originalRewardQuality=" + getRewardQualityName(originalRewardQuality) + "(" + originalRewardQuality + ")" + " luckyQualityUpgrade=" + luckyQualityUpgrade + " rewardQualityModifier=" + rewardQualityModifier + " rewardRoll=" + rewardRoll + " rewardChanceTotal=" + rewardChanceTotal + " baseRareChance=" + rareChance + " baseExceptionalChance=" + exceptionalChance + " baseLegendaryChance=" + legendaryChance + " adjustedRareChance=" + adjustedRareChance + " adjustedExceptionalChance=" + adjustedExceptionalChance + " adjustedLegendaryChance=" + adjustedLegendaryChance + " shiftedChance=" + shiftedChance);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int upgradeRewardQuality(int rewardQuality)
|
||||
{
|
||||
if (rewardQuality == space_rare_loot_config.QUALITY_RARE)
|
||||
{
|
||||
return space_rare_loot_config.QUALITY_EXCEPTIONAL;
|
||||
}
|
||||
if (rewardQuality == space_rare_loot_config.QUALITY_EXCEPTIONAL)
|
||||
{
|
||||
return space_rare_loot_config.QUALITY_LEGENDARY;
|
||||
}
|
||||
return rewardQuality;
|
||||
}
|
||||
|
||||
public static int getEffectivePilotTier(int playerTier, int targetTier)
|
||||
{
|
||||
if (targetTier > 0 && targetTier < playerTier)
|
||||
@@ -230,22 +255,39 @@ public class space_rare_loot extends script.base_script
|
||||
return parseTier(difficulty);
|
||||
}
|
||||
|
||||
public static int getRewardTier(int playerTier, int targetTier)
|
||||
public static int getRewardTier(int targetTier) throws InterruptedException
|
||||
{
|
||||
int rewardTier = playerTier;
|
||||
if (targetTier < rewardTier)
|
||||
{
|
||||
rewardTier = targetTier;
|
||||
}
|
||||
if (rewardTier < MIN_REWARD_TIER)
|
||||
int maxRewardTier = getClampedRewardTier(targetTier);
|
||||
if (maxRewardTier <= MIN_REWARD_TIER)
|
||||
{
|
||||
return MIN_REWARD_TIER;
|
||||
}
|
||||
if (rewardTier > MAX_REWARD_TIER)
|
||||
int totalWeight = 0;
|
||||
int overCapTierCount = targetTier - MAX_REWARD_TIER;
|
||||
if (overCapTierCount < 0)
|
||||
{
|
||||
return MAX_REWARD_TIER;
|
||||
overCapTierCount = 0;
|
||||
}
|
||||
return rewardTier;
|
||||
for (int rewardTier = MIN_REWARD_TIER; rewardTier <= maxRewardTier; rewardTier++)
|
||||
{
|
||||
totalWeight += getRewardTierWeight(rewardTier, overCapTierCount);
|
||||
}
|
||||
int roll = rand(1, totalWeight);
|
||||
int currentWeight = 0;
|
||||
for (int rewardTier = MIN_REWARD_TIER; rewardTier <= maxRewardTier; rewardTier++)
|
||||
{
|
||||
currentWeight += getRewardTierWeight(rewardTier, overCapTierCount);
|
||||
if (roll <= currentWeight)
|
||||
{
|
||||
return rewardTier;
|
||||
}
|
||||
}
|
||||
return maxRewardTier;
|
||||
}
|
||||
|
||||
public static int getRewardTierWeight(int rewardTier, int overCapTierCount)
|
||||
{
|
||||
return rewardTier + (overCapTierCount * rewardTier * rewardTier);
|
||||
}
|
||||
|
||||
public static String getRewardTable(int rewardTier)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package script.space.rare_loot;
|
||||
|
||||
import script.dictionary;
|
||||
import script.library.create;
|
||||
import script.library.space_crafting;
|
||||
import script.library.utils;
|
||||
import script.menu_info;
|
||||
import script.menu_info_types;
|
||||
@@ -16,6 +19,19 @@ public class space_rare_loot_chest extends script.base_script
|
||||
public static final String ITEM_TYPE_CAPACITOR = "capacitor";
|
||||
public static final String ITEM_TYPE_ARMOR = "armor";
|
||||
public static final String ITEM_TYPE_DROID_INTERFACE = "droid_interface";
|
||||
public static final String ARMOR_TABLE = "datatables/ship/components/armor.iff";
|
||||
public static final String BOOSTER_TABLE = "datatables/ship/components/booster.iff";
|
||||
public static final String CAPACITOR_TABLE = "datatables/ship/components/capacitor.iff";
|
||||
public static final String DROID_INTERFACE_TABLE = "datatables/ship/components/droid_interface.iff";
|
||||
public static final String DROID_INTERFACE_OVERRIDE_TABLE = space_rare_loot.SPACE_RLS_TABLE_LOCATION + "/droid_interface_override.iff";
|
||||
public static final String ENGINE_TABLE = "datatables/ship/components/engine.iff";
|
||||
public static final String REACTOR_TABLE = "datatables/ship/components/reactor.iff";
|
||||
public static final String SHIELD_TABLE = "datatables/ship/components/shield.iff";
|
||||
public static final String OVERRIDE_COLUMN_COMMAND_SPEED_MODIFIER = "commandSpeedModifier";
|
||||
public static final String OVERRIDE_COLUMN_HITPOINTS_MODIFIER = "hitpointsModifier";
|
||||
public static final String OVERRIDE_COLUMN_ARMOR_HITPOINTS_MODIFIER = "armorHitpointsModifier";
|
||||
public static final String OVERRIDE_COLUMN_ENERGY_MAINTENANCE_MODIFIER = "energyMaintenanceModifier";
|
||||
public static final String OVERRIDE_COLUMN_MASS_MODIFIER = "massModifier";
|
||||
|
||||
public space_rare_loot_chest()
|
||||
{
|
||||
@@ -62,9 +78,20 @@ public class space_rare_loot_chest extends script.base_script
|
||||
}
|
||||
String itemName = dataTableGetString(rewardTable, rewardRow, space_rare_loot.REWARD_TABLE_COLUMN_ITEM_NAME);
|
||||
String itemType = dataTableGetString(rewardTable, rewardRow, space_rare_loot.REWARD_TABLE_COLUMN_ITEM_TYPE);
|
||||
obj_id rewardItem = createSpaceRareLootItem(player, itemName, itemType, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
if (!isIdValid(rewardItem))
|
||||
{
|
||||
space_rare_loot.debug(player, "opened chest " + self + " but failed to create item " + itemName + " of type " + itemType + ".");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot chest open failed, item creation failed. Player=" + player + " chest=" + self + " rewardTier=" + rewardTier + " rewardTable=" + rewardTable + " rewardRow=" + rewardRow + " itemName=" + itemName + " itemType=" + itemType + " rewardQuality=" + rewardQualityName + "(" + rewardQuality + ")");
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
space_rare_loot.debug(player, "opened chest " + self + " with reward tier " + rewardTier + ", quality " + rewardQualityName + ", row " + rewardRow + ", item " + itemName + ".");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot chest opened. Player=" + player + " chest=" + self + " rewardTier=" + rewardTier + " rewardTable=" + rewardTable + " rewardRow=" + rewardRow + " itemName=" + itemName + " itemType=" + itemType + " rewardQuality=" + rewardQualityName + "(" + rewardQuality + ")" + " rewardQualityModifier=" + rewardQualityModifier);
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot chest opened. Player=" + player + " chest=" + self + " rewardItem=" + rewardItem + " rewardTier=" + rewardTier + " rewardTable=" + rewardTable + " rewardRow=" + rewardRow + " itemName=" + itemName + " itemType=" + itemType + " rewardQuality=" + rewardQualityName + "(" + rewardQuality + ")" + " rewardQualityModifier=" + rewardQualityModifier);
|
||||
obj_id[] lootedItems = new obj_id[1];
|
||||
lootedItems[0] = rewardItem;
|
||||
showLootBox(player, lootedItems);
|
||||
destroyObject(self);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
@@ -76,77 +103,321 @@ public class space_rare_loot_chest extends script.base_script
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_WEAPON))
|
||||
{
|
||||
return createWeaponReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createWeaponReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_ENGINE))
|
||||
{
|
||||
return createEngineReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createEngineReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_BOOSTER))
|
||||
{
|
||||
return createBoosterReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createBoosterReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_REACTOR))
|
||||
{
|
||||
return createReactorReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createReactorReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_SHIELD))
|
||||
{
|
||||
return createShieldReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createShieldReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_CAPACITOR))
|
||||
{
|
||||
return createCapacitorReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createCapacitorReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_ARMOR))
|
||||
{
|
||||
return createArmorReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createArmorReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
if (itemType.equalsIgnoreCase(ITEM_TYPE_DROID_INTERFACE))
|
||||
{
|
||||
return createDroidInterfaceReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier);
|
||||
return stampRareSpaceLootItem(createDroidInterfaceReward(player, itemName, rewardQuality, rewardTier, rewardQualityModifier), rewardQuality, rewardTier);
|
||||
}
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot chest open failed, unknown item type. Player=" + player + " itemName=" + itemName + " itemType=" + itemType + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
return null;
|
||||
}
|
||||
|
||||
public obj_id stampRareSpaceLootItem(obj_id item, int rewardQuality, int rewardTier) throws InterruptedException
|
||||
{
|
||||
if (!isIdValid(item))
|
||||
{
|
||||
return item;
|
||||
}
|
||||
setObjVar(item, space_rare_loot.VAR_ITEM_IS_RARE_SPACE_LOOT, true);
|
||||
setObjVar(item, space_rare_loot.VAR_ITEM_REWARD_QUALITY, rewardQuality);
|
||||
setObjVar(item, space_rare_loot.VAR_ITEM_REWARD_QUALITY_NAME, space_rare_loot.getRewardQualityName(rewardQuality));
|
||||
setObjVar(item, space_rare_loot.VAR_ITEM_REWARD_TIER, rewardTier);
|
||||
return item;
|
||||
}
|
||||
|
||||
public obj_id createWeaponReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id inventory = utils.getInventoryContainer(player);
|
||||
if (!isIdValid(inventory) || getVolumeFree(inventory) <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
obj_id weapon = create.object(itemName, inventory, false, false);
|
||||
if (!isIdValid(weapon))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary weaponData = dataTableGetRow(space_crafting.SHIP_WEAPON_TABLE, itemName);
|
||||
if (weaponData == null)
|
||||
{
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot weapon creation failed, missing weapon data. Player=" + player + " weapon=" + weapon + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
destroyObject(weapon);
|
||||
return null;
|
||||
}
|
||||
applyStandardComponentStats(weapon, weaponData, rewardQuality);
|
||||
|
||||
float minDamage = getDirectedValue(weaponData.getFloat("fltMinDamage"), weaponData.getFloat("fltMinDamageModifier"), rewardQuality, false);
|
||||
float maxDamage = getDirectedValue(weaponData.getFloat("fltMaxDamage"), weaponData.getFloat("fltMaxDamageModifier"), rewardQuality, false);
|
||||
if (maxDamage < minDamage)
|
||||
{
|
||||
maxDamage = minDamage;
|
||||
}
|
||||
space_crafting.setWeaponMinimumDamage(weapon, minDamage);
|
||||
space_crafting.setWeaponMaximumDamage(weapon, maxDamage);
|
||||
space_crafting.setWeaponShieldEffectiveness(weapon, getDirectedValue(weaponData.getFloat("fltShieldEffectiveness"), weaponData.getFloat("fltShieldEffectivenessModifier"), rewardQuality, false));
|
||||
space_crafting.setWeaponArmorEffectiveness(weapon, getDirectedValue(weaponData.getFloat("fltArmorEffectiveness"), weaponData.getFloat("fltArmorEffectivenessModifier"), rewardQuality, false));
|
||||
space_crafting.setWeaponEnergyPerShot(weapon, getDirectedValue(weaponData.getFloat("fltEnergyPerShot"), weaponData.getFloat("fltEnergyPerShotModifier"), rewardQuality, true));
|
||||
space_crafting.setWeaponRefireRate(weapon, getDirectedValue(weaponData.getFloat("fltRefireRate"), weaponData.getFloat("fltRefireRateModifier"), rewardQuality, true));
|
||||
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot weapon created. Player=" + player + " weapon=" + weapon + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier + " minDamage=" + minDamage + " maxDamage=" + maxDamage);
|
||||
return weapon;
|
||||
}
|
||||
|
||||
public void applyStandardComponentStats(obj_id component, dictionary componentData, int rewardQuality) throws InterruptedException
|
||||
{
|
||||
float energyMaintenance = getDirectedValue(componentData.getFloat("fltEnergyMaintenance"), componentData.getFloat("fltEnergyMaintenanceModifier"), rewardQuality, true);
|
||||
float mass = getDirectedValue(componentData.getFloat("fltMass"), componentData.getFloat("fltMassModifier"), rewardQuality, true);
|
||||
float armorHitpoints = getDirectedValue(componentData.getFloat("fltMaximumArmorHitpoints"), componentData.getFloat("fltMaximumArmorHitpointsMod"), rewardQuality, false);
|
||||
float hitpoints = getDirectedValue(componentData.getFloat("fltMaximumHitpoints"), componentData.getFloat("fltMaximumArmorHitpointsMod"), rewardQuality, false);
|
||||
float efficiency = componentData.getFloat("fltEfficiency");
|
||||
|
||||
space_crafting.setComponentCurrentArmorHitpoints(component, armorHitpoints);
|
||||
space_crafting.setComponentMaximumArmorHitpoints(component, armorHitpoints);
|
||||
space_crafting.setComponentCurrentConduitHitpoints(component, hitpoints);
|
||||
space_crafting.setComponentMaximumConduitHitpoints(component, hitpoints);
|
||||
space_crafting.setComponentCurrentHitpoints(component, hitpoints);
|
||||
space_crafting.setComponentMaximumHitpoints(component, hitpoints);
|
||||
space_crafting.setComponentMass(component, mass);
|
||||
space_crafting.setComponentEnergyMaintenance(component, energyMaintenance);
|
||||
space_crafting.setComponentEnergyEfficiency(component, efficiency);
|
||||
space_crafting.setComponentGeneralEfficiency(component, efficiency);
|
||||
}
|
||||
|
||||
public float getDirectedValue(float baseValue, float statModifier, int rewardQuality, boolean lowerIsBetter) throws InterruptedException
|
||||
{
|
||||
float effectiveModifier = space_rare_loot.getEffectiveStatModifier(statModifier, rewardQuality);
|
||||
return space_crafting.getDirectedBellValue(baseValue, effectiveModifier, space_crafting.getRandomBellDeviation(), lowerIsBetter);
|
||||
}
|
||||
|
||||
public obj_id createEngineReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id engine = createComponentFromTable(player, itemName, ENGINE_TABLE, rewardQuality, rewardTier);
|
||||
if (!isIdValid(engine))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary engineData = dataTableGetRow(ENGINE_TABLE, itemName);
|
||||
space_crafting.setEngineMaximumSpeed(engine, getDirectedValue(engineData.getFloat("fltMaxSpeed"), engineData.getFloat("fltMaxSpeedModifier"), rewardQuality, false));
|
||||
space_crafting.setEngineMaximumPitch(engine, getDirectedValue(engineData.getFloat("fltMaxPitch"), engineData.getFloat("fltMaxPitchModifier"), rewardQuality, false));
|
||||
space_crafting.setEngineMaximumRoll(engine, getDirectedValue(engineData.getFloat("fltMaxRoll"), engineData.getFloat("fltMaxRollModifier"), rewardQuality, false));
|
||||
space_crafting.setEngineMaximumYaw(engine, getDirectedValue(engineData.getFloat("fltMaxYaw"), engineData.getFloat("fltMaxYawModifier"), rewardQuality, false));
|
||||
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot engine created. Player=" + player + " engine=" + engine + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier);
|
||||
return engine;
|
||||
}
|
||||
|
||||
public obj_id createBoosterReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id booster = createComponentFromTable(player, itemName, BOOSTER_TABLE, rewardQuality, rewardTier);
|
||||
if (!isIdValid(booster))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary boosterData = dataTableGetRow(BOOSTER_TABLE, itemName);
|
||||
float maxEnergy = getDirectedValue(boosterData.getFloat("fltMaximumEnergy"), boosterData.getFloat("fltMaximumEnergyModifier"), rewardQuality, false);
|
||||
space_crafting.setBoosterMaximumEnergy(booster, maxEnergy);
|
||||
space_crafting.setBoosterCurrentEnergy(booster, maxEnergy);
|
||||
space_crafting.setBoosterEnergyRechargeRate(booster, getDirectedValue(boosterData.getFloat("fltRechargeRate"), boosterData.getFloat("fltRechargeRateModifier"), rewardQuality, false));
|
||||
space_crafting.setBoosterEnergyConsumptionRate(booster, getDirectedValue(boosterData.getFloat("fltConsumptionRate"), boosterData.getFloat("fltConsumptionRateModifier"), rewardQuality, true));
|
||||
space_crafting.setBoosterAcceleration(booster, getDirectedValue(boosterData.getFloat("fltAcceleration"), boosterData.getFloat("fltAccelerationModifier"), rewardQuality, false));
|
||||
space_crafting.setBoosterMaximumSpeed(booster, getDirectedValue(boosterData.getFloat("fltMaxSpeed"), boosterData.getFloat("fltMaxSpeedModifier"), rewardQuality, false));
|
||||
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot booster created. Player=" + player + " booster=" + booster + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier + " maxEnergy=" + maxEnergy);
|
||||
return booster;
|
||||
}
|
||||
|
||||
public obj_id createReactorReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id reactor = createComponentFromTable(player, itemName, REACTOR_TABLE, rewardQuality, rewardTier);
|
||||
if (!isIdValid(reactor))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary reactorData = dataTableGetRow(REACTOR_TABLE, itemName);
|
||||
float energyGeneration = getDirectedValue(reactorData.getFloat("fltEnergyGeneration"), reactorData.getFloat("fltEnergyGenerationModifier"), rewardQuality, false);
|
||||
space_crafting.setReactorEnergyGeneration(reactor, energyGeneration);
|
||||
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot reactor created. Player=" + player + " reactor=" + reactor + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier + " energyGeneration=" + energyGeneration);
|
||||
return reactor;
|
||||
}
|
||||
|
||||
public obj_id createShieldReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id shield = createComponentFromTable(player, itemName, SHIELD_TABLE, rewardQuality, rewardTier);
|
||||
if (!isIdValid(shield))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary shieldData = dataTableGetRow(SHIELD_TABLE, itemName);
|
||||
float frontHitpoints = getDirectedValue(shieldData.getFloat("fltShieldHitpointsMaximumFront"), shieldData.getFloat("fltShieldHitpointsMaximumFrontModifier"), rewardQuality, false);
|
||||
float backHitpoints = getDirectedValue(shieldData.getFloat("fltShieldHitpointsMaximumBack"), shieldData.getFloat("fltShieldHitpointsMaximumBackModifier"), rewardQuality, false);
|
||||
float rechargeRate = getDirectedValue(shieldData.getFloat("fltShieldRechargeRate"), shieldData.getFloat("fltShieldRechargeRateModifier"), rewardQuality, false);
|
||||
space_crafting.setShieldGeneratorCurrentFrontHitpoints(shield, 0.0f);
|
||||
space_crafting.setShieldGeneratorCurrentBackHitpoints(shield, 0.0f);
|
||||
space_crafting.setShieldGeneratorMaximumFrontHitpoints(shield, frontHitpoints);
|
||||
space_crafting.setShieldGeneratorMaximumBackHitpoints(shield, backHitpoints);
|
||||
space_crafting.setShieldGeneratorRechargeRate(shield, rechargeRate);
|
||||
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot shield created. Player=" + player + " shield=" + shield + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier + " frontHitpoints=" + frontHitpoints + " backHitpoints=" + backHitpoints + " rechargeRate=" + rechargeRate);
|
||||
return shield;
|
||||
}
|
||||
|
||||
public obj_id createCapacitorReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id capacitor = createComponentFromTable(player, itemName, CAPACITOR_TABLE, rewardQuality, rewardTier);
|
||||
if (!isIdValid(capacitor))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary capacitorData = dataTableGetRow(CAPACITOR_TABLE, itemName);
|
||||
float maxEnergy = getDirectedValue(capacitorData.getFloat("fltMaxEnergy"), capacitorData.getFloat("fltMaxEnergyModifier"), rewardQuality, false);
|
||||
float rechargeRate = getDirectedValue(capacitorData.getFloat("fltRechargeRate"), capacitorData.getFloat("fltRechargeRateModifier"), rewardQuality, false);
|
||||
space_crafting.setWeaponCapacitorMaximumEnergy(capacitor, maxEnergy);
|
||||
space_crafting.setWeaponCapacitorCurrentEnergy(capacitor, maxEnergy);
|
||||
space_crafting.setWeaponCapacitorRechargeRate(capacitor, rechargeRate);
|
||||
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot capacitor created. Player=" + player + " capacitor=" + capacitor + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier + " maxEnergy=" + maxEnergy + " rechargeRate=" + rechargeRate);
|
||||
return capacitor;
|
||||
}
|
||||
|
||||
public obj_id createArmorReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id armor = createComponentFromTable(player, itemName, ARMOR_TABLE, rewardQuality, rewardTier);
|
||||
if (isIdValid(armor))
|
||||
{
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot armor created. Player=" + player + " armor=" + armor + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier);
|
||||
}
|
||||
return armor;
|
||||
}
|
||||
|
||||
public obj_id createDroidInterfaceReward(obj_id player, String itemName, int rewardQuality, int rewardTier, float rewardQualityModifier) throws InterruptedException
|
||||
{
|
||||
return null;
|
||||
obj_id inventory = utils.getInventoryContainer(player);
|
||||
if (!isIdValid(inventory) || getVolumeFree(inventory) <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
obj_id droidInterface = create.object(itemName, inventory, false, false);
|
||||
if (!isIdValid(droidInterface))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary droidData = dataTableGetRow(DROID_INTERFACE_TABLE, itemName);
|
||||
if (droidData == null)
|
||||
{
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot droid interface creation failed, missing droid interface data. Player=" + player + " droidInterface=" + droidInterface + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
destroyObject(droidInterface);
|
||||
return null;
|
||||
}
|
||||
|
||||
String rewardQualityName = space_rare_loot.getRewardQualityName(rewardQuality);
|
||||
int overrideRow = getDroidInterfaceOverrideRow(itemName, rewardQualityName);
|
||||
float commandSpeedModifier = getDroidInterfaceModifier(overrideRow, OVERRIDE_COLUMN_COMMAND_SPEED_MODIFIER, droidData.getFloat("fltCommandSpeedModifier"));
|
||||
float hitpointsModifier = getDroidInterfaceModifier(overrideRow, OVERRIDE_COLUMN_HITPOINTS_MODIFIER, droidData.getFloat("fltMaximumArmorHitpointsMod"));
|
||||
float armorHitpointsModifier = getDroidInterfaceModifier(overrideRow, OVERRIDE_COLUMN_ARMOR_HITPOINTS_MODIFIER, droidData.getFloat("fltMaximumArmorHitpointsMod"));
|
||||
float energyMaintenanceModifier = getDroidInterfaceModifier(overrideRow, OVERRIDE_COLUMN_ENERGY_MAINTENANCE_MODIFIER, droidData.getFloat("fltEnergyMaintenanceModifier"));
|
||||
float massModifier = getDroidInterfaceModifier(overrideRow, OVERRIDE_COLUMN_MASS_MODIFIER, droidData.getFloat("fltMassModifier"));
|
||||
|
||||
float hitpoints = getDirectedValue(droidData.getFloat("fltMaximumHitpoints"), hitpointsModifier, rewardQuality, false);
|
||||
float armorHitpoints = getDirectedValue(droidData.getFloat("fltMaximumArmorHitpoints"), armorHitpointsModifier, rewardQuality, false);
|
||||
float energyMaintenance = getDirectedValue(droidData.getFloat("fltEnergyMaintenance"), energyMaintenanceModifier, rewardQuality, true);
|
||||
float mass = getDirectedValue(droidData.getFloat("fltMass"), massModifier, rewardQuality, true);
|
||||
float commandSpeed = getDirectedValue(droidData.getFloat("fltCommandSpeed"), commandSpeedModifier, rewardQuality, true);
|
||||
float efficiency = droidData.getFloat("fltEfficiency");
|
||||
|
||||
space_crafting.setComponentCurrentArmorHitpoints(droidInterface, armorHitpoints);
|
||||
space_crafting.setComponentMaximumArmorHitpoints(droidInterface, armorHitpoints);
|
||||
space_crafting.setComponentCurrentConduitHitpoints(droidInterface, hitpoints);
|
||||
space_crafting.setComponentMaximumConduitHitpoints(droidInterface, hitpoints);
|
||||
space_crafting.setComponentCurrentHitpoints(droidInterface, hitpoints);
|
||||
space_crafting.setComponentMaximumHitpoints(droidInterface, hitpoints);
|
||||
space_crafting.setComponentMass(droidInterface, mass);
|
||||
space_crafting.setComponentEnergyMaintenance(droidInterface, energyMaintenance);
|
||||
space_crafting.setComponentEnergyEfficiency(droidInterface, efficiency);
|
||||
space_crafting.setComponentGeneralEfficiency(droidInterface, efficiency);
|
||||
space_crafting.setDroidInterfaceCommandSpeed(droidInterface, commandSpeed);
|
||||
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot droid interface created. Player=" + player + " droidInterface=" + droidInterface + " itemName=" + itemName + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardQualityModifier=" + rewardQualityModifier + " overrideRow=" + overrideRow + " commandSpeed=" + commandSpeed + " hitpoints=" + hitpoints + " armorHitpoints=" + armorHitpoints + " energyMaintenance=" + energyMaintenance + " mass=" + mass);
|
||||
return droidInterface;
|
||||
}
|
||||
|
||||
public int getDroidInterfaceOverrideRow(String itemName, String rewardQuality) throws InterruptedException
|
||||
{
|
||||
int rowCount = dataTableGetNumRows(DROID_INTERFACE_OVERRIDE_TABLE);
|
||||
for (int row = 0; row < rowCount; row++)
|
||||
{
|
||||
if (dataTableGetInt(DROID_INTERFACE_OVERRIDE_TABLE, row, space_rare_loot.REWARD_TABLE_COLUMN_ENABLED) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
String overrideItemName = dataTableGetString(DROID_INTERFACE_OVERRIDE_TABLE, row, space_rare_loot.REWARD_TABLE_COLUMN_ITEM_NAME);
|
||||
if (overrideItemName == null || !overrideItemName.equals(itemName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
String overrideQuality = dataTableGetString(DROID_INTERFACE_OVERRIDE_TABLE, row, space_rare_loot.REWARD_TABLE_COLUMN_QUALITY);
|
||||
if (space_rare_loot.isRewardQualityMatch(overrideQuality, rewardQuality))
|
||||
{
|
||||
return row;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public float getDroidInterfaceModifier(int overrideRow, String modifierColumn, float defaultModifier) throws InterruptedException
|
||||
{
|
||||
if (overrideRow < 0)
|
||||
{
|
||||
return defaultModifier;
|
||||
}
|
||||
return dataTableGetFloat(DROID_INTERFACE_OVERRIDE_TABLE, overrideRow, modifierColumn);
|
||||
}
|
||||
|
||||
public obj_id createComponentFromTable(obj_id player, String itemName, String componentTable, int rewardQuality, int rewardTier) throws InterruptedException
|
||||
{
|
||||
obj_id inventory = utils.getInventoryContainer(player);
|
||||
if (!isIdValid(inventory) || getVolumeFree(inventory) <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
obj_id component = create.object(itemName, inventory, false, false);
|
||||
if (!isIdValid(component))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
dictionary componentData = dataTableGetRow(componentTable, itemName);
|
||||
if (componentData == null)
|
||||
{
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot component creation failed, missing component data. Player=" + player + " component=" + component + " itemName=" + itemName + " componentTable=" + componentTable + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
destroyObject(component);
|
||||
return null;
|
||||
}
|
||||
applyStandardComponentStats(component, componentData, rewardQuality);
|
||||
return component;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
package script.space.rare_loot;
|
||||
|
||||
import script.library.utils;
|
||||
import script.obj_id;
|
||||
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
public class space_rare_loot_test extends script.base_script
|
||||
{
|
||||
public space_rare_loot_test()
|
||||
{
|
||||
}
|
||||
|
||||
public int cmdCreateSpaceRareLootCrate(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
||||
{
|
||||
if (!canUseRareLootTestCommand(self))
|
||||
{
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
StringTokenizer st = getTokenizer(params);
|
||||
if (st.countTokens() != 2)
|
||||
{
|
||||
sendCrateSyntax(self);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
int rewardTier = parseTier(st.nextToken());
|
||||
int rewardQuality = parseQuality(st.nextToken());
|
||||
if (!isValidTier(rewardTier) || !isValidQuality(rewardQuality))
|
||||
{
|
||||
sendCrateSyntax(self);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
obj_id inventory = utils.getInventoryContainer(self);
|
||||
if (!isIdValid(inventory) || getVolumeFree(inventory) <= 0)
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "Space rare loot crate test failed: inventory is full or invalid.");
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
obj_id chest = space_rare_loot.createRareLootChest(inventory, rewardQuality, rewardTier);
|
||||
if (!isIdValid(chest))
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "Space rare loot crate test failed: could not create crate.");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot test crate creation failed. Player=" + self + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
sendSystemMessageTestingOnly(self, "Created space rare loot crate: tier " + rewardTier + ", quality " + space_rare_loot.getRewardQualityName(rewardQuality) + ".");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot test crate created. Player=" + self + " chest=" + chest + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
public int cmdCreateSpaceRareLootItem(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
||||
{
|
||||
if (!canUseRareLootTestCommand(self))
|
||||
{
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
StringTokenizer st = getTokenizer(params);
|
||||
if (st.countTokens() != 3 && st.countTokens() != 4)
|
||||
{
|
||||
sendItemSyntax(self);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
int rewardTier = parseTier(st.nextToken());
|
||||
int rewardQuality = parseQuality(st.nextToken());
|
||||
String itemType = st.nextToken();
|
||||
String itemName = st.hasMoreTokens() ? st.nextToken() : null;
|
||||
if (!isValidTier(rewardTier) || !isValidQuality(rewardQuality) || itemType == null || itemType.length() < 1)
|
||||
{
|
||||
sendItemSyntax(self);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
if (itemName == null || itemName.length() < 1)
|
||||
{
|
||||
String rewardTable = space_rare_loot.getRewardTable(rewardTier);
|
||||
String rewardQualityName = space_rare_loot.getRewardQualityName(rewardQuality);
|
||||
int rewardRow = getRandomRewardRowForItemType(rewardTable, rewardQualityName, itemType);
|
||||
if (rewardRow < 0)
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "Space rare loot item test failed: could not find enabled " + rewardQualityName + " " + itemType + " reward in tier " + rewardTier + " table.");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot test item creation failed, no matching reward row. Player=" + self + " itemType=" + itemType + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardTable=" + rewardTable);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
itemName = dataTableGetString(rewardTable, rewardRow, space_rare_loot.REWARD_TABLE_COLUMN_ITEM_NAME);
|
||||
itemType = dataTableGetString(rewardTable, rewardRow, space_rare_loot.REWARD_TABLE_COLUMN_ITEM_TYPE);
|
||||
if (itemName == null || itemName.length() < 1 || itemType == null || itemType.length() < 1)
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "Space rare loot item test failed: selected reward row is missing item data.");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot test item creation failed, selected reward row missing item data. Player=" + self + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality + " rewardTable=" + rewardTable + " rewardRow=" + rewardRow + " itemName=" + itemName + " itemType=" + itemType);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
||||
obj_id inventory = utils.getInventoryContainer(self);
|
||||
if (!isIdValid(inventory) || getVolumeFree(inventory) <= 0)
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "Space rare loot item test failed: inventory is full or invalid.");
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
space_rare_loot_chest chestScript = new space_rare_loot_chest();
|
||||
obj_id item = chestScript.createSpaceRareLootItem(self, itemName, itemType, rewardQuality, rewardTier, space_rare_loot.getRewardQualityModifier(rewardQuality));
|
||||
if (!isIdValid(item))
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "Space rare loot item test failed: could not create " + itemName + " as " + itemType + ".");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot test item creation failed. Player=" + self + " itemName=" + itemName + " itemType=" + itemType + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
sendSystemMessageTestingOnly(self, "Created space rare loot item: " + itemName + " (" + itemType + "), tier " + rewardTier + ", quality " + space_rare_loot.getRewardQualityName(rewardQuality) + ".");
|
||||
CustomerServiceLog(space_rare_loot.LOG_CHANNEL, "Space rare loot test item created. Player=" + self + " item=" + item + " itemName=" + itemName + " itemType=" + itemType + " rewardTier=" + rewardTier + " rewardQuality=" + rewardQuality);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
|
||||
public int getRandomRewardRowForItemType(String rewardTable, String rewardQuality, String itemType) throws InterruptedException
|
||||
{
|
||||
int rowCount = dataTableGetNumRows(rewardTable);
|
||||
int matchingRows = 0;
|
||||
for (int i = 0; i < rowCount; i++)
|
||||
{
|
||||
if (isRewardRowMatchForItemType(rewardTable, i, rewardQuality, itemType))
|
||||
{
|
||||
matchingRows++;
|
||||
}
|
||||
}
|
||||
if (matchingRows <= 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int selectedMatch = rand(1, matchingRows);
|
||||
int currentMatch = 0;
|
||||
for (int i = 0; i < rowCount; i++)
|
||||
{
|
||||
if (isRewardRowMatchForItemType(rewardTable, i, rewardQuality, itemType))
|
||||
{
|
||||
currentMatch++;
|
||||
if (currentMatch == selectedMatch)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public boolean isRewardRowMatchForItemType(String rewardTable, int row, String rewardQuality, String itemType) throws InterruptedException
|
||||
{
|
||||
if (!space_rare_loot.isRewardRowMatch(rewardTable, row, rewardQuality))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
String rowItemType = dataTableGetString(rewardTable, row, space_rare_loot.REWARD_TABLE_COLUMN_ITEM_TYPE);
|
||||
return rowItemType != null && itemType != null && rowItemType.equalsIgnoreCase(itemType);
|
||||
}
|
||||
|
||||
public boolean canUseRareLootTestCommand(obj_id self) throws InterruptedException
|
||||
{
|
||||
return isPlayer(self) && isGod(self) && getGodLevel(self) >= 40;
|
||||
}
|
||||
|
||||
public StringTokenizer getTokenizer(String params)
|
||||
{
|
||||
if (params == null)
|
||||
{
|
||||
params = "";
|
||||
}
|
||||
return new StringTokenizer(params);
|
||||
}
|
||||
|
||||
public int parseTier(String value) throws InterruptedException
|
||||
{
|
||||
int rewardTier = utils.stringToInt(value);
|
||||
if (!isValidTier(rewardTier))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return rewardTier;
|
||||
}
|
||||
|
||||
public int parseQuality(String value) throws InterruptedException
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (value.equalsIgnoreCase("rare"))
|
||||
{
|
||||
return space_rare_loot_config.QUALITY_RARE;
|
||||
}
|
||||
if (value.equalsIgnoreCase("exceptional"))
|
||||
{
|
||||
return space_rare_loot_config.QUALITY_EXCEPTIONAL;
|
||||
}
|
||||
if (value.equalsIgnoreCase("legendary"))
|
||||
{
|
||||
return space_rare_loot_config.QUALITY_LEGENDARY;
|
||||
}
|
||||
int rewardQuality = utils.stringToInt(value);
|
||||
if (isValidQuality(rewardQuality))
|
||||
{
|
||||
return rewardQuality;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public boolean isValidTier(int rewardTier)
|
||||
{
|
||||
return rewardTier >= space_rare_loot.MIN_REWARD_TIER && rewardTier <= space_rare_loot.MAX_REWARD_TIER;
|
||||
}
|
||||
|
||||
public boolean isValidQuality(int rewardQuality)
|
||||
{
|
||||
return rewardQuality >= space_rare_loot_config.QUALITY_RARE && rewardQuality <= space_rare_loot_config.QUALITY_LEGENDARY;
|
||||
}
|
||||
|
||||
public void sendCrateSyntax(obj_id self) throws InterruptedException
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "format: /createSpaceRareLootCrate <tier 1-5> <rare|exceptional|legendary>");
|
||||
}
|
||||
|
||||
public void sendItemSyntax(obj_id self) throws InterruptedException
|
||||
{
|
||||
sendSystemMessageTestingOnly(self, "format: /createSpaceRareLootItem <tier 1-5> <rare|exceptional|legendary> <itemType> [itemName]");
|
||||
}
|
||||
}
|
||||
@@ -597,6 +597,8 @@ createPrototype immediate createPrototype 0 1 0
|
||||
createSpawningElement immediate createSpawningElement admin 1 1 0 1 none 0 csr 0
|
||||
createSpawningElementWithDifficulty immediate createSpawningElementWithDifficulty admin 1 1 0 1 none 0 csr 0
|
||||
createStaticItem immediate cmdCreateStaticItem admin 1 1 0 1 0 0 0 0 gm.cmd optional 0 40 csr 0
|
||||
createSpaceRareLootCrate immediate cmdCreateSpaceRareLootCrate admin 1 1 0 1 0 0 0 0 space.rare_loot.space_rare_loot_test optional 0 40 csr 0
|
||||
createSpaceRareLootItem immediate cmdCreateSpaceRareLootItem admin 1 1 0 1 0 0 0 0 space.rare_loot.space_rare_loot_test optional 0 40 csr 0
|
||||
credits immediate cmdMoney failAdmin admin 1 1 0 1 1 gm.cmd optional 0 0 40 csr 0
|
||||
csAppendComment immediate csAppendComment 1 1 0 1 1 none 0 0 0
|
||||
csCancelTicket immediate csCancelTicket 1 1 0 1 1 none 0 0 0
|
||||
@@ -1209,6 +1211,8 @@ searchLair commandClicky normal searchLair failSpecialAttack 1 1 0 1 1 1 1 1
|
||||
adminLair commandClicky normal adminLair failAdmin 1 admin 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 other none 1 3 0 other 0 ALL gathering 0 0.25 1 0
|
||||
zoneUtil commandClicky normal cmdZoneUtility failAdmin 1 admin 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 other none 1 3 0 other 0 ALL gathering 0 0.25 1 0
|
||||
objInfo commandClicky normal cmdObjectInfo failAdmin 1 admin 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 other none 1 3 0 other 0 ALL gathering 0 0.25 1 0
|
||||
cmdCreateSpaceRareLootCrate commandClicky normal cmdCreateSpaceRareLootCrate failAdmin 1 admin 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 other none 1 3 0 other 0 ALL gathering 0 0.25 1 0
|
||||
cmdCreateSpaceRareLootItem commandClicky normal cmdCreateSpaceRareLootItem failAdmin 1 admin 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 other none 1 3 0 other 0 ALL gathering 0 0.25 1 0
|
||||
of_buff_def_4 commandClicky normal of_buff_def_4 failSpecialAttack 1 of_buff_def_4 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 other none 2 combat_ranged combat 1 ALL of_buff_def 0.25 7 1
|
||||
of_buff_def_5 commandClicky normal of_buff_def_5 failSpecialAttack 1 of_buff_def_5 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 other none 2 combat_ranged combat 1 ALL of_buff_def 0.25 7 1
|
||||
of_buff_def_6 commandClicky normal of_buff_def_6 failSpecialAttack 1 of_buff_def_6 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 other none 2 combat_ranged combat 1 ALL of_buff_def 0.25 7 1
|
||||
|
||||
Reference in New Issue
Block a user