mirror of
https://github.com/ProjectSWGCore/pswgcommon.git
synced 2026-01-15 23:04:19 -05:00
Converted some files to kotlin
This commit is contained in:
@@ -1,238 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
|
||||
public class AttackInfo {
|
||||
|
||||
private boolean success = true;
|
||||
private long armor = 0;
|
||||
private int rawDamage = 0;
|
||||
private DamageType damageType = DamageType.KINETIC;
|
||||
private int elementalDamage = 0;
|
||||
private DamageType elementalDamageType = DamageType.KINETIC;
|
||||
private int bleedDamage = 0;
|
||||
private int criticalDamage = 0;
|
||||
private int blockedDamage = 0;
|
||||
private int finalDamage = 0;
|
||||
private HitLocation hitLocation = HitLocation.HIT_LOCATION_BODY;
|
||||
private boolean crushing = false;
|
||||
private boolean strikethrough = false;
|
||||
private double strikethroughAmount = 0;
|
||||
private boolean evadeResult = false;
|
||||
private double evadeAmount = 0;
|
||||
private boolean blockResult = false;
|
||||
private int block = 0;
|
||||
private boolean dodge = false;
|
||||
private boolean parry = false;
|
||||
private boolean critical = false;
|
||||
private boolean glancing = false;
|
||||
private boolean proc = false;
|
||||
|
||||
public boolean isSuccess() {
|
||||
return success;
|
||||
}
|
||||
|
||||
public long getArmor() {
|
||||
return armor;
|
||||
}
|
||||
|
||||
public int getRawDamage() {
|
||||
return rawDamage;
|
||||
}
|
||||
|
||||
public DamageType getDamageType() {
|
||||
return damageType;
|
||||
}
|
||||
|
||||
public int getElementalDamage() {
|
||||
return elementalDamage;
|
||||
}
|
||||
|
||||
public DamageType getElementalDamageType() {
|
||||
return elementalDamageType;
|
||||
}
|
||||
|
||||
public int getBleedDamage() {
|
||||
return bleedDamage;
|
||||
}
|
||||
|
||||
public int getCriticalDamage() {
|
||||
return criticalDamage;
|
||||
}
|
||||
|
||||
public int getBlockedDamage() {
|
||||
return blockedDamage;
|
||||
}
|
||||
|
||||
public int getFinalDamage() {
|
||||
return finalDamage;
|
||||
}
|
||||
|
||||
public HitLocation getHitLocation() {
|
||||
return hitLocation;
|
||||
}
|
||||
|
||||
public boolean isCrushing() {
|
||||
return crushing;
|
||||
}
|
||||
|
||||
public boolean isStrikethrough() {
|
||||
return strikethrough;
|
||||
}
|
||||
|
||||
public double getStrikethroughAmount() {
|
||||
return strikethroughAmount;
|
||||
}
|
||||
|
||||
public boolean isEvadeResult() {
|
||||
return evadeResult;
|
||||
}
|
||||
|
||||
public double getEvadeAmount() {
|
||||
return evadeAmount;
|
||||
}
|
||||
|
||||
public boolean isBlockResult() {
|
||||
return blockResult;
|
||||
}
|
||||
|
||||
public int getBlock() {
|
||||
return block;
|
||||
}
|
||||
|
||||
public boolean isDodge() {
|
||||
return dodge;
|
||||
}
|
||||
|
||||
public boolean isParry() {
|
||||
return parry;
|
||||
}
|
||||
|
||||
public boolean isCritical() {
|
||||
return critical;
|
||||
}
|
||||
|
||||
public boolean isGlancing() {
|
||||
return glancing;
|
||||
}
|
||||
|
||||
public boolean isProc() {
|
||||
return proc;
|
||||
}
|
||||
|
||||
public void setSuccess(boolean success) {
|
||||
this.success = success;
|
||||
}
|
||||
|
||||
public void setArmor(long armor) {
|
||||
this.armor = armor;
|
||||
}
|
||||
|
||||
public void setRawDamage(int rawDamage) {
|
||||
this.rawDamage = rawDamage;
|
||||
}
|
||||
|
||||
public void setDamageType(DamageType damageType) {
|
||||
this.damageType = damageType;
|
||||
}
|
||||
|
||||
public void setElementalDamage(int elementalDamage) {
|
||||
this.elementalDamage = elementalDamage;
|
||||
}
|
||||
|
||||
public void setElementalDamageType(DamageType elementalDamageType) {
|
||||
this.elementalDamageType = elementalDamageType;
|
||||
}
|
||||
|
||||
public void setBleedDamage(int bleedDamage) {
|
||||
this.bleedDamage = bleedDamage;
|
||||
}
|
||||
|
||||
public void setCriticalDamage(int criticalDamage) {
|
||||
this.criticalDamage = criticalDamage;
|
||||
}
|
||||
|
||||
public void setBlockedDamage(int blockedDamage) {
|
||||
this.blockedDamage = blockedDamage;
|
||||
}
|
||||
|
||||
public void setFinalDamage(int finalDamage) {
|
||||
this.finalDamage = finalDamage;
|
||||
}
|
||||
|
||||
public void setHitLocation(HitLocation hitLocation) {
|
||||
this.hitLocation = hitLocation;
|
||||
}
|
||||
|
||||
public void setCrushing(boolean crushing) {
|
||||
this.crushing = crushing;
|
||||
}
|
||||
|
||||
public void setStrikethrough(boolean strikethrough) {
|
||||
this.strikethrough = strikethrough;
|
||||
}
|
||||
|
||||
public void setStrikethroughAmount(double strikethroughAmount) {
|
||||
this.strikethroughAmount = strikethroughAmount;
|
||||
}
|
||||
|
||||
public void setEvadeResult(boolean evadeResult) {
|
||||
this.evadeResult = evadeResult;
|
||||
}
|
||||
|
||||
public void setEvadeAmount(double evadeAmount) {
|
||||
this.evadeAmount = evadeAmount;
|
||||
}
|
||||
|
||||
public void setBlockResult(boolean blockResult) {
|
||||
this.blockResult = blockResult;
|
||||
}
|
||||
|
||||
public void setBlock(int block) {
|
||||
this.block = block;
|
||||
}
|
||||
|
||||
public void setDodge(boolean dodge) {
|
||||
this.dodge = dodge;
|
||||
}
|
||||
|
||||
public void setParry(boolean parry) {
|
||||
this.parry = parry;
|
||||
}
|
||||
|
||||
public void setCritical(boolean critical) {
|
||||
this.critical = critical;
|
||||
}
|
||||
|
||||
public void setGlancing(boolean glancing) {
|
||||
this.glancing = glancing;
|
||||
}
|
||||
|
||||
public void setProc(boolean proc) {
|
||||
this.proc = proc;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
class AttackInfo {
|
||||
var isSuccess: Boolean = true
|
||||
var armor: Long = 0
|
||||
var rawDamage: Int = 0
|
||||
var damageType: DamageType = DamageType.KINETIC
|
||||
var elementalDamage: Int = 0
|
||||
var elementalDamageType: DamageType = DamageType.KINETIC
|
||||
var bleedDamage: Int = 0
|
||||
var criticalDamage: Int = 0
|
||||
var blockedDamage: Int = 0
|
||||
var finalDamage: Int = 0
|
||||
var hitLocation: HitLocation = HitLocation.HIT_LOCATION_BODY
|
||||
var isCrushing: Boolean = false
|
||||
var isStrikethrough: Boolean = false
|
||||
var strikethroughAmount: Double = 0.0
|
||||
var isEvadeResult: Boolean = false
|
||||
var evadeAmount: Double = 0.0
|
||||
var isBlockResult: Boolean = false
|
||||
var block: Int = 0
|
||||
var isDodge: Boolean = false
|
||||
var isParry: Boolean = false
|
||||
var isCritical: Boolean = false
|
||||
var isGlancing: Boolean = false
|
||||
var isProc: Boolean = false
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
|
||||
public enum AttackType {
|
||||
CONE (0),
|
||||
SINGLE_TARGET (1),
|
||||
AREA (2),
|
||||
TARGET_AREA (3),
|
||||
DUAL_WIELD (4),
|
||||
RAMPAGE (5),
|
||||
RANDOM_HATE_TARGET (6),
|
||||
RANDOM_HATE_TARGET_CONE (7),
|
||||
RANDOM_HATE_TARGET_CONE_TERMINUS (8),
|
||||
HATE_LIST (9),
|
||||
RANDOM_HATE_MULTI (10),
|
||||
AREA_PROGRESSIVE (11),
|
||||
SPLIT_DAMAGE_TARGET_AREA (12),
|
||||
DISTANCE_FARTHEST (13);
|
||||
|
||||
private static final AttackType [] VALUES = values();
|
||||
|
||||
private int num;
|
||||
|
||||
AttackType(int num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static AttackType getAttackType(int num) {
|
||||
if (num < 0 || num >= VALUES.length)
|
||||
return AttackType.SINGLE_TARGET;
|
||||
return VALUES[num];
|
||||
}
|
||||
}
|
||||
@@ -1,51 +1,53 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
import com.projectswg.common.data.EnumLookup;
|
||||
enum class AttackType(val num: Int) {
|
||||
CONE(0),
|
||||
SINGLE_TARGET(1),
|
||||
AREA(2),
|
||||
TARGET_AREA(3),
|
||||
DUAL_WIELD(4),
|
||||
RAMPAGE(5),
|
||||
RANDOM_HATE_TARGET(6),
|
||||
RANDOM_HATE_TARGET_CONE(7),
|
||||
RANDOM_HATE_TARGET_CONE_TERMINUS(8),
|
||||
HATE_LIST(9),
|
||||
RANDOM_HATE_MULTI(10),
|
||||
AREA_PROGRESSIVE(11),
|
||||
SPLIT_DAMAGE_TARGET_AREA(12),
|
||||
DISTANCE_FARTHEST(13);
|
||||
|
||||
public enum DelayAttackEggPosition {
|
||||
LOCATION (1),
|
||||
TARGET (2),
|
||||
SELF (3);
|
||||
|
||||
private static final EnumLookup<Integer, DelayAttackEggPosition> LOOKUP = new EnumLookup<>(DelayAttackEggPosition.class, DelayAttackEggPosition::getNum);
|
||||
|
||||
private final int num;
|
||||
|
||||
DelayAttackEggPosition(int num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static DelayAttackEggPosition getEggPosition(int num) {
|
||||
return LOOKUP.getEnum(num, SELF);
|
||||
companion object {
|
||||
private val VALUES = entries.toTypedArray()
|
||||
|
||||
fun getAttackType(num: Int): AttackType {
|
||||
if (num < 0 || num >= VALUES.size) return SINGLE_TARGET
|
||||
return VALUES[num]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,37 +1,37 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
import com.projectswg.common.data.EnumLookup;
|
||||
import com.projectswg.common.data.EnumLookup
|
||||
|
||||
/**
|
||||
* Determines color for entries in the combat log client-side
|
||||
*/
|
||||
public enum CombatSpamType {
|
||||
enum class CombatSpamType(val num: Int) {
|
||||
MISS(0),
|
||||
HIT(1),
|
||||
BLOCK(2),
|
||||
@@ -45,25 +45,16 @@ public enum CombatSpamType {
|
||||
GENERIC(10),
|
||||
OUT_OF_RANGE(11),
|
||||
POSTURE_CHANGE(12),
|
||||
TETHERED(13), // AI was forced to return to original location
|
||||
TETHERED(13), // AI was forced to return to original location
|
||||
MEDICAL(14),
|
||||
BUFF(15),
|
||||
DEBUFF(16);
|
||||
|
||||
private static final EnumLookup<Integer, CombatSpamType> LOOKUP = new EnumLookup<>(CombatSpamType.class, CombatSpamType::getNum);
|
||||
|
||||
private int num;
|
||||
|
||||
CombatSpamType(int num) {
|
||||
this.num = num;
|
||||
|
||||
companion object {
|
||||
private val LOOKUP = EnumLookup(CombatSpamType::class.java) { obj: CombatSpamType -> obj.num }
|
||||
|
||||
fun getCombatSpamType(num: Int): CombatSpamType {
|
||||
return LOOKUP.getEnum(num, HIT)
|
||||
}
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static CombatSpamType getCombatSpamType(int num) {
|
||||
return LOOKUP.getEnum(num, HIT);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.Set;
|
||||
|
||||
public enum DamageType {
|
||||
KINETIC (1),
|
||||
ENERGY (2),
|
||||
BLAST (4),
|
||||
STUN (8),
|
||||
RESTAINT (16),
|
||||
ELEMENTAL_HEAT (32),
|
||||
ELEMENTAL_COLD (64),
|
||||
ELEMENTAL_ACID (128),
|
||||
ELEMENTAL_ELECTRICAL (256);
|
||||
|
||||
private static final DamageType [] VALUES = values();
|
||||
|
||||
private int num;
|
||||
|
||||
DamageType(int num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static DamageType getDamageType(int num) {
|
||||
for (DamageType type : VALUES) {
|
||||
if ((num & type.getNum()) != 0)
|
||||
return type;
|
||||
}
|
||||
return KINETIC;
|
||||
}
|
||||
|
||||
public static Set<DamageType> getDamageTypes(int num) {
|
||||
Set<DamageType> types = EnumSet.noneOf(DamageType.class);
|
||||
for (DamageType type : VALUES) {
|
||||
if ((num & type.getNum()) != 0)
|
||||
types.add(type);
|
||||
}
|
||||
return types;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
import java.util.*
|
||||
|
||||
enum class DamageType(val num: Int) {
|
||||
KINETIC(1),
|
||||
ENERGY(2),
|
||||
BLAST(4),
|
||||
STUN(8),
|
||||
RESTAINT(16),
|
||||
ELEMENTAL_HEAT(32),
|
||||
ELEMENTAL_COLD(64),
|
||||
ELEMENTAL_ACID(128),
|
||||
ELEMENTAL_ELECTRICAL(256);
|
||||
|
||||
companion object {
|
||||
private val VALUES = entries.toTypedArray()
|
||||
|
||||
fun getDamageType(num: Int): DamageType {
|
||||
for (type in VALUES) {
|
||||
if ((num and type.num) != 0) return type
|
||||
}
|
||||
return KINETIC
|
||||
}
|
||||
|
||||
fun getDamageTypes(num: Int): Set<DamageType> {
|
||||
val types: MutableSet<DamageType> = EnumSet.noneOf(DamageType::class.java)
|
||||
for (type in VALUES) {
|
||||
if ((num and type.num) != 0) types.add(type)
|
||||
}
|
||||
return types
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
import com.projectswg.common.data.EnumLookup
|
||||
|
||||
enum class DelayAttackEggPosition(val num: Int) {
|
||||
LOCATION(1),
|
||||
TARGET(2),
|
||||
SELF(3);
|
||||
|
||||
companion object {
|
||||
private val LOOKUP = EnumLookup(DelayAttackEggPosition::class.java) { obj: DelayAttackEggPosition -> obj.num }
|
||||
|
||||
fun getEggPosition(num: Int): DelayAttackEggPosition {
|
||||
return LOOKUP.getEnum(num, SELF)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
import com.projectswg.common.data.EnumLookup
|
||||
|
||||
enum class HealAttrib(val num: Int) {
|
||||
HEALTH(0),
|
||||
ACTION(2);
|
||||
|
||||
companion object {
|
||||
private val LOOKUP = EnumLookup(HealAttrib::class.java) { obj: HealAttrib -> obj.num }
|
||||
|
||||
fun getHealAttrib(num: Int): HealAttrib {
|
||||
return LOOKUP.getEnum(num, HEALTH)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
|
||||
public enum HitLocation {
|
||||
HIT_LOCATION_BODY (0),
|
||||
HIT_LOCATION_HEAD (1),
|
||||
HIT_LOCATION_R_ARM (2),
|
||||
HIT_LOCATION_L_ARM (3),
|
||||
HIT_LOCATION_R_LEG (4),
|
||||
HIT_LOCATION_L_LEG (5),
|
||||
HIT_LOCATION_NUM_LOCATIONS (6);
|
||||
|
||||
private static final HitLocation [] VALUES = values();
|
||||
|
||||
private int num;
|
||||
|
||||
HitLocation(int num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static HitLocation getHitLocation(int num) {
|
||||
if (num < 0 || num >= VALUES.length)
|
||||
return HIT_LOCATION_BODY;
|
||||
return VALUES[num];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
enum class HitLocation(val num: Int) {
|
||||
HIT_LOCATION_BODY(0),
|
||||
HIT_LOCATION_HEAD(1),
|
||||
HIT_LOCATION_R_ARM(2),
|
||||
HIT_LOCATION_L_ARM(3),
|
||||
HIT_LOCATION_R_LEG(4),
|
||||
HIT_LOCATION_L_LEG(5),
|
||||
HIT_LOCATION_NUM_LOCATIONS(6);
|
||||
|
||||
companion object {
|
||||
private val VALUES = entries.toTypedArray()
|
||||
|
||||
fun getHitLocation(num: Int): HitLocation {
|
||||
if (num < 0 || num >= VALUES.size) return HIT_LOCATION_BODY
|
||||
return VALUES[num]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum HitType {
|
||||
ATTACK (-1),
|
||||
BUFF (0),
|
||||
DEBUFF (4),
|
||||
HEAL (5),
|
||||
DELAY_ATTACK (6),
|
||||
REVIVE (7);
|
||||
|
||||
private static final Map<Integer, HitType> HIT_TYPES = new HashMap<>();
|
||||
|
||||
static {
|
||||
for(HitType hitType : values()) {
|
||||
HIT_TYPES.put(hitType.getNum(), hitType);
|
||||
}
|
||||
}
|
||||
|
||||
private final int num;
|
||||
|
||||
HitType(int num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static HitType getHitType(int num) {
|
||||
return HIT_TYPES.getOrDefault(num, ATTACK);
|
||||
}
|
||||
}
|
||||
50
src/main/java/com/projectswg/common/data/combat/HitType.kt
Normal file
50
src/main/java/com/projectswg/common/data/combat/HitType.kt
Normal file
@@ -0,0 +1,50 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
enum class HitType(val num: Int) {
|
||||
ATTACK(-1),
|
||||
BUFF(0),
|
||||
DEBUFF(4),
|
||||
HEAL(5),
|
||||
DELAY_ATTACK(6),
|
||||
REVIVE(7);
|
||||
|
||||
companion object {
|
||||
private val HIT_TYPES: MutableMap<Int, HitType> = HashMap()
|
||||
|
||||
init {
|
||||
for (hitType in entries) {
|
||||
HIT_TYPES[hitType.num] = hitType
|
||||
}
|
||||
}
|
||||
|
||||
fun getHitType(num: Int): HitType {
|
||||
return HIT_TYPES.getOrDefault(num, ATTACK)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -24,27 +24,20 @@
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
import com.projectswg.common.data.EnumLookup;
|
||||
import com.projectswg.common.data.EnumLookup
|
||||
|
||||
public enum HealAttrib {
|
||||
HEALTH(0),
|
||||
ACTION(2);
|
||||
|
||||
private static final EnumLookup<Integer, HealAttrib> LOOKUP = new EnumLookup<>(HealAttrib.class, HealAttrib::getNum);
|
||||
|
||||
private int num;
|
||||
|
||||
HealAttrib(int num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static HealAttrib getHealAttrib(int num) {
|
||||
return LOOKUP.getEnum(num, HEALTH);
|
||||
enum class TargetType(val num: Int) {
|
||||
NONE(0),
|
||||
REQUIRED(1),
|
||||
OPTIONAL(2);
|
||||
|
||||
companion object {
|
||||
private val LOOKUP = EnumLookup(TargetType::class.java) { obj: TargetType -> obj.num }
|
||||
|
||||
fun getByNum(num: Int): TargetType {
|
||||
return LOOKUP.getEnum(num, NONE)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http:></http:>//www.gnu.org/licenses/>. *
|
||||
*/
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
import java.util.*
|
||||
|
||||
enum class TrailLocation(val num: Int) {
|
||||
LEFT_FOOT(0x01),
|
||||
RIGHT_FOOT(0x02),
|
||||
LEFT_HAND(0x04),
|
||||
RIGHT_HAND(0x08),
|
||||
WEAPON(0x10);
|
||||
|
||||
companion object {
|
||||
private val VALUES = entries.toTypedArray()
|
||||
|
||||
fun getTrailLocation(num: Int): TrailLocation {
|
||||
for (type in VALUES) {
|
||||
if ((num and type.num) != 0) return type
|
||||
}
|
||||
return WEAPON
|
||||
}
|
||||
|
||||
fun getTrailLocations(num: Int): Set<TrailLocation> {
|
||||
val types: MutableSet<TrailLocation> = EnumSet.noneOf(TrailLocation::class.java)
|
||||
for (type in VALUES) {
|
||||
if ((num and type.num) != 0) types.add(type)
|
||||
}
|
||||
return types
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -24,37 +24,27 @@
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
package com.projectswg.common.data.combat
|
||||
|
||||
public enum ValidTarget {
|
||||
NONE (-1),
|
||||
enum class ValidTarget(val num: Int) {
|
||||
NONE(-1),
|
||||
STANDARD(0),
|
||||
MOB (1),
|
||||
MOB(1),
|
||||
CREATURE(2),
|
||||
NPC (3),
|
||||
DROID (4),
|
||||
PVP (5),
|
||||
JEDI (6),
|
||||
DEAD (7),
|
||||
FRIEND (8);
|
||||
|
||||
private static final ValidTarget [] VALUES = values();
|
||||
|
||||
private int num;
|
||||
|
||||
ValidTarget(int num) {
|
||||
this.num = num;
|
||||
NPC(3),
|
||||
DROID(4),
|
||||
PVP(5),
|
||||
JEDI(6),
|
||||
DEAD(7),
|
||||
FRIEND(8);
|
||||
|
||||
companion object {
|
||||
private val VALUES = entries.toTypedArray()
|
||||
|
||||
fun getValidTarget(num: Int): ValidTarget {
|
||||
val idx = num + 1
|
||||
if (idx < 0 || idx >= VALUES.size) return STANDARD
|
||||
return VALUES[idx]
|
||||
}
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static ValidTarget getValidTarget(int num) {
|
||||
++num;
|
||||
if (num < 0 || num >= VALUES.length)
|
||||
return STANDARD;
|
||||
return VALUES[num];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2023 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.encodables.chat;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import com.projectswg.common.encoding.Encodable;
|
||||
import com.projectswg.common.network.NetBuffer;
|
||||
|
||||
public class ChatAvatar implements Encodable {
|
||||
|
||||
private static final AtomicReference<String> GALAXY = new AtomicReference<>("");
|
||||
private static final ChatAvatar SYSTEM_AVATAR = new ChatAvatar("system");
|
||||
|
||||
private String name;
|
||||
|
||||
public ChatAvatar() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public ChatAvatar(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getGalaxy() {
|
||||
return GALAXY.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLength() {
|
||||
return 9 + name.length() + GALAXY.get().length();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] encode() {
|
||||
NetBuffer buffer = NetBuffer.allocate(getLength());
|
||||
buffer.addAscii("SWG");
|
||||
buffer.addAscii(GALAXY.get());
|
||||
buffer.addAscii(name);
|
||||
return buffer.array();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(NetBuffer data) {
|
||||
data.getAscii(); // SWG
|
||||
data.getAscii();
|
||||
name = data.getAscii().toLowerCase(Locale.US);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("ChatAvatar[name='%s']", name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (!(o instanceof ChatAvatar))
|
||||
return false;
|
||||
return ((ChatAvatar) o).getName().equals(getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return name.hashCode();
|
||||
}
|
||||
|
||||
public static ChatAvatar getSystemAvatar() {
|
||||
return SYSTEM_AVATAR;
|
||||
}
|
||||
|
||||
public static void setGalaxy(String galaxy) {
|
||||
GALAXY.set(galaxy);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -24,45 +24,58 @@
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
package com.projectswg.common.data.encodables.chat
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.Set;
|
||||
import com.projectswg.common.encoding.Encodable
|
||||
import com.projectswg.common.network.NetBuffer
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
public enum TrailLocation {
|
||||
LEFT_FOOT (0x01),
|
||||
RIGHT_FOOT (0x02),
|
||||
LEFT_HAND (0x04),
|
||||
RIGHT_HAND (0x08),
|
||||
WEAPON (0x10);
|
||||
|
||||
private static final TrailLocation [] VALUES = values();
|
||||
|
||||
private int num;
|
||||
|
||||
TrailLocation(int num) {
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
|
||||
public static TrailLocation getTrailLocation(int num) {
|
||||
for (TrailLocation type : VALUES) {
|
||||
if ((num & type.getNum()) != 0)
|
||||
return type;
|
||||
class ChatAvatar(name: String) : Encodable {
|
||||
var name: String = name
|
||||
get() {
|
||||
assert(field.isNotEmpty())
|
||||
return field
|
||||
}
|
||||
return WEAPON;
|
||||
|
||||
val galaxy: String
|
||||
get() = GALAXY.get()
|
||||
|
||||
override val length: Int
|
||||
get() = 9 + name.length + GALAXY.get().length
|
||||
|
||||
override fun encode(): ByteArray {
|
||||
val buffer = NetBuffer.allocate(length)
|
||||
buffer.addAscii("SWG")
|
||||
buffer.addAscii(GALAXY.get())
|
||||
buffer.addAscii(name)
|
||||
return buffer.array()
|
||||
}
|
||||
|
||||
public static Set<TrailLocation> getTrailLocations(int num) {
|
||||
Set<TrailLocation> types = EnumSet.noneOf(TrailLocation.class);
|
||||
for (TrailLocation type : VALUES) {
|
||||
if ((num & type.getNum()) != 0)
|
||||
types.add(type);
|
||||
|
||||
override fun decode(data: NetBuffer) {
|
||||
data.ascii // SWG
|
||||
data.ascii
|
||||
name = data.ascii.lowercase()
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return String.format("ChatAvatar[name='%s']", name)
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (other !is ChatAvatar) return false
|
||||
return other.name == this.name
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return name.hashCode()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val GALAXY = AtomicReference("")
|
||||
val systemAvatar: ChatAvatar = ChatAvatar("system")
|
||||
|
||||
fun setGalaxy(galaxy: String) {
|
||||
GALAXY.set(galaxy)
|
||||
}
|
||||
return types;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.encodables.chat;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Waverunner
|
||||
*/
|
||||
public enum ChatResult {
|
||||
NONE (-1), // The client will just display an "unknown error code" if this is used.
|
||||
SUCCESS (0),
|
||||
TARGET_AVATAR_DOESNT_EXIST (4),
|
||||
ROOM_INVALID_ID (5),
|
||||
ROOM_INVALID_NAME (6),
|
||||
CUSTOM_FAILURE (9),
|
||||
ROOM_AVATAR_BANNED (12),
|
||||
ROOM_PRIVATE (13),
|
||||
ROOM_AVATAR_NO_PERMISSION (16),
|
||||
IGNORED (23),
|
||||
ROOM_ALREADY_EXISTS (24),
|
||||
ROOM_ALREADY_JOINED (36),
|
||||
CHAT_SERVER_UNAVAILABLE (1000000),
|
||||
ROOM_DIFFERENT_FACTION (1000001),
|
||||
ROOM_NOT_GCW_DEFENDER_FACTION (1000005);
|
||||
|
||||
private static final Map<Integer, ChatResult> RESULT_MAP = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (ChatResult result : values()) {
|
||||
RESULT_MAP.put(result.getCode(), result);
|
||||
}
|
||||
}
|
||||
|
||||
private final int code;
|
||||
|
||||
ChatResult(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public static ChatResult fromInteger(int code) {
|
||||
ChatResult result = RESULT_MAP.get(code);
|
||||
if (result == null)
|
||||
return NONE;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -24,36 +24,32 @@
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.combat;
|
||||
package com.projectswg.common.data.encodables.chat
|
||||
|
||||
public enum TargetType {
|
||||
NONE ("none", 0),
|
||||
REQUIRED("required", 1),
|
||||
OPTIONAL("optional", 2);
|
||||
|
||||
private static final TargetType [] VALUES = values();
|
||||
|
||||
private final String name;
|
||||
private final int num;
|
||||
|
||||
TargetType(String name, int num) {
|
||||
this.name = name;
|
||||
this.num = num;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
import com.projectswg.common.data.EnumLookup
|
||||
|
||||
public int getNum() {
|
||||
return num;
|
||||
}
|
||||
enum class ChatResult(val code: Int) {
|
||||
NONE(-1), // The client will just display an "unknown error code" if this is used.
|
||||
SUCCESS(0),
|
||||
TARGET_AVATAR_DOESNT_EXIST(4),
|
||||
ROOM_INVALID_ID(5),
|
||||
ROOM_INVALID_NAME(6),
|
||||
CUSTOM_FAILURE(9),
|
||||
ROOM_AVATAR_BANNED(12),
|
||||
ROOM_PRIVATE(13),
|
||||
ROOM_AVATAR_NO_PERMISSION(16),
|
||||
IGNORED(23),
|
||||
ROOM_ALREADY_EXISTS(24),
|
||||
ROOM_ALREADY_JOINED(36),
|
||||
CHAT_SERVER_UNAVAILABLE(1000000),
|
||||
ROOM_DIFFERENT_FACTION(1000001),
|
||||
ROOM_NOT_GCW_DEFENDER_FACTION(1000005);
|
||||
|
||||
public static TargetType getByNum(int num) {
|
||||
for (TargetType p : VALUES) {
|
||||
if (p.getNum() == num)
|
||||
return p;
|
||||
companion object {
|
||||
private val LOOKUP = EnumLookup(ChatResult::class.java) { obj: ChatResult -> obj.code }
|
||||
|
||||
fun fromInteger(code: Int): ChatResult {
|
||||
return LOOKUP.getEnum(code, NONE)
|
||||
}
|
||||
return NONE;
|
||||
}
|
||||
}
|
||||
@@ -1,306 +0,0 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2023 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.encodables.chat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.projectswg.common.encoding.CachedEncode;
|
||||
import com.projectswg.common.encoding.Encodable;
|
||||
import com.projectswg.common.network.NetBuffer;
|
||||
|
||||
public class ChatRoom implements Encodable {
|
||||
|
||||
private final CachedEncode cache;
|
||||
private final Set<ChatAvatar> moderators;
|
||||
private final Set<ChatAvatar> invited;
|
||||
private final Set<ChatAvatar> banned;
|
||||
private final Set<ChatAvatar> members;
|
||||
|
||||
private int id;
|
||||
private int type;
|
||||
private String path;
|
||||
private ChatAvatar owner;
|
||||
private ChatAvatar creator;
|
||||
private String title;
|
||||
private boolean moderated; // No one but moderators can talk
|
||||
|
||||
public ChatRoom() {
|
||||
this.cache = new CachedEncode(this::encodeImpl);
|
||||
this.moderators = ConcurrentHashMap.newKeySet();
|
||||
this.invited = ConcurrentHashMap.newKeySet();
|
||||
this.members = ConcurrentHashMap.newKeySet();
|
||||
this.banned = ConcurrentHashMap.newKeySet();
|
||||
|
||||
this.id = 0;
|
||||
this.type = 0;
|
||||
this.path = null;
|
||||
this.owner = new ChatAvatar();
|
||||
this.creator = new ChatAvatar();
|
||||
this.title = null;
|
||||
this.moderated = false;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.cache.clearCached();
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.cache.clearCached();
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
|
||||
public void setPath(String path) {
|
||||
this.cache.clearCached();
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public ChatAvatar getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public void setOwner(ChatAvatar owner) {
|
||||
this.cache.clearCached();
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public ChatAvatar getCreator() {
|
||||
return creator;
|
||||
}
|
||||
|
||||
public void setCreator(ChatAvatar creator) {
|
||||
this.cache.clearCached();
|
||||
this.creator = creator;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.cache.clearCached();
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public List<ChatAvatar> getModerators() {
|
||||
return new ArrayList<>(moderators);
|
||||
}
|
||||
|
||||
public List<ChatAvatar> getInvited() {
|
||||
return new ArrayList<>(invited);
|
||||
}
|
||||
|
||||
public boolean isModerated() {
|
||||
return moderated;
|
||||
}
|
||||
|
||||
public void setModerated(boolean moderated) {
|
||||
this.cache.clearCached();
|
||||
this.moderated = moderated;
|
||||
}
|
||||
|
||||
public List<ChatAvatar> getMembers() {
|
||||
return new ArrayList<>(members);
|
||||
}
|
||||
|
||||
public boolean isPublic() {
|
||||
return type == 0;
|
||||
}
|
||||
|
||||
public void setIsPublic(boolean isPublic) {
|
||||
this.cache.clearCached();
|
||||
this.type = (isPublic ? 0 : 1);
|
||||
}
|
||||
|
||||
public List<ChatAvatar> getBanned() {
|
||||
return new ArrayList<>(banned);
|
||||
}
|
||||
|
||||
public ChatResult canJoinRoom(ChatAvatar avatar, boolean ignoreInvitation) {
|
||||
if (banned.contains(avatar))
|
||||
return ChatResult.ROOM_AVATAR_BANNED;
|
||||
|
||||
if (members.contains(avatar))
|
||||
return ChatResult.ROOM_ALREADY_JOINED;
|
||||
|
||||
if (isPublic() || ignoreInvitation || invited.contains(avatar) || moderators.contains(avatar))
|
||||
return ChatResult.SUCCESS;
|
||||
|
||||
return ChatResult.ROOM_AVATAR_NO_PERMISSION;
|
||||
}
|
||||
|
||||
public ChatResult canSendMessage(ChatAvatar avatar) {
|
||||
if (banned.contains(avatar))
|
||||
return ChatResult.ROOM_AVATAR_BANNED;
|
||||
|
||||
if (moderated && !moderators.contains(avatar))
|
||||
return ChatResult.CUSTOM_FAILURE;
|
||||
|
||||
return ChatResult.SUCCESS;
|
||||
}
|
||||
|
||||
public boolean isModerator(ChatAvatar avatar) {
|
||||
return avatar.equals(owner) || moderators.contains(avatar);
|
||||
}
|
||||
|
||||
public boolean isMember(ChatAvatar avatar) {
|
||||
return members.contains(avatar);
|
||||
}
|
||||
|
||||
public boolean isBanned(ChatAvatar avatar) {
|
||||
return banned.contains(avatar);
|
||||
}
|
||||
|
||||
public boolean isInvited(ChatAvatar avatar) {
|
||||
return invited.contains(avatar);
|
||||
}
|
||||
|
||||
public boolean addMember(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return members.add(avatar);
|
||||
}
|
||||
|
||||
public boolean removeMember(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return members.remove(avatar);
|
||||
}
|
||||
|
||||
public boolean addModerator(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return moderators.add(avatar);
|
||||
}
|
||||
|
||||
public boolean removeModerator(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return moderators.remove(avatar);
|
||||
}
|
||||
|
||||
public boolean addInvited(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return invited.add(avatar);
|
||||
}
|
||||
|
||||
public boolean removeInvited(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return invited.remove(avatar);
|
||||
}
|
||||
|
||||
public boolean addBanned(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return banned.add(avatar);
|
||||
}
|
||||
|
||||
public boolean removeBanned(ChatAvatar avatar) {
|
||||
this.cache.clearCached();
|
||||
return banned.remove(avatar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(NetBuffer data) {
|
||||
id = data.getInt();
|
||||
type = data.getInt();
|
||||
moderated = data.getBoolean();
|
||||
path = data.getAscii();
|
||||
owner = data.getEncodable(ChatAvatar.class);
|
||||
creator = data.getEncodable(ChatAvatar.class);
|
||||
title = data.getUnicode();
|
||||
moderators.clear();
|
||||
moderators.addAll(data.getList(ChatAvatar.class));
|
||||
invited.clear();
|
||||
invited.addAll(data.getList(ChatAvatar.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] encode() {
|
||||
return cache.encode();
|
||||
}
|
||||
|
||||
private byte[] encodeImpl() {
|
||||
NetBuffer data = NetBuffer.allocate(getLength());
|
||||
data.addInt(id);
|
||||
data.addInt(type);
|
||||
data.addBoolean(moderated);
|
||||
data.addAscii(path);
|
||||
data.addEncodable(owner);
|
||||
data.addEncodable(creator);
|
||||
data.addUnicode(title);
|
||||
data.addList(moderators);
|
||||
data.addList(invited);
|
||||
return data.array();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLength() {
|
||||
int avatarIdSize = 0; // The encode method for ChatAvatar saves the encode result if the class was modified/null data
|
||||
|
||||
for (ChatAvatar moderator : moderators) {
|
||||
avatarIdSize += moderator.getLength();
|
||||
}
|
||||
for (ChatAvatar invitee : invited) {
|
||||
avatarIdSize += invitee.getLength();
|
||||
}
|
||||
|
||||
avatarIdSize += owner.getLength() + creator.getLength();
|
||||
return 23 + path.length() + (title.length() * 2) + avatarIdSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ChatRoom[id=" + id + ", type=" + type + ", path='" + path + "', title='" + title + '\'' + ", creator=" + creator + ", moderated=" + moderated + ", isPublic=" + isPublic() + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o)
|
||||
return true;
|
||||
if (o == null || getClass() != o.getClass())
|
||||
return false;
|
||||
ChatRoom chatRoom = (ChatRoom) o;
|
||||
return id == chatRoom.id && type == chatRoom.type && moderated == chatRoom.moderated && Objects.equals(moderators, chatRoom.moderators) && Objects.equals(invited, chatRoom.invited) && Objects.equals(banned, chatRoom.banned) && Objects.equals(path, chatRoom.path) && Objects.equals(owner, chatRoom.owner) && Objects.equals(creator, chatRoom.creator) && Objects.equals(title, chatRoom.title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(moderators, invited, banned, id, type, path, owner, creator, title, moderated);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
* Our goal is to create an emulator which will provide a server for players to *
|
||||
* continue playing a game similar to the one they used to play. We are basing *
|
||||
* it on the final publish of the game prior to end-game events. *
|
||||
* *
|
||||
* This file is part of PSWGCommon. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* PSWGCommon is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Affero General Public License as *
|
||||
* published by the Free Software Foundation, either version 3 of the *
|
||||
* License, or (at your option) any later version. *
|
||||
* *
|
||||
* PSWGCommon is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with PSWGCommon. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.common.data.encodables.chat
|
||||
|
||||
import com.projectswg.common.encoding.CachedEncode
|
||||
import com.projectswg.common.encoding.Encodable
|
||||
import com.projectswg.common.network.NetBuffer
|
||||
import java.util.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
class ChatRoom : Encodable {
|
||||
private val cache = CachedEncode { this.encodeImpl() }
|
||||
private val _moderators = ConcurrentHashMap.newKeySet<ChatAvatar>()
|
||||
private val _invited = ConcurrentHashMap.newKeySet<ChatAvatar>()
|
||||
private val _banned = ConcurrentHashMap.newKeySet<ChatAvatar>()
|
||||
private val _members = ConcurrentHashMap.newKeySet<ChatAvatar>()
|
||||
|
||||
var id: Int = 0
|
||||
set(value) {
|
||||
cache.clearCached()
|
||||
field = value
|
||||
}
|
||||
var type: Int = 0
|
||||
set(value) {
|
||||
cache.clearCached()
|
||||
field = value
|
||||
}
|
||||
var path: String = ""
|
||||
get() {
|
||||
assert(field.isNotEmpty())
|
||||
return field
|
||||
}
|
||||
set(value) {
|
||||
cache.clearCached()
|
||||
field = value
|
||||
}
|
||||
var owner: ChatAvatar = ChatAvatar("")
|
||||
set(value) {
|
||||
cache.clearCached()
|
||||
field = value
|
||||
}
|
||||
var creator: ChatAvatar = ChatAvatar("")
|
||||
set(value) {
|
||||
cache.clearCached()
|
||||
field = value
|
||||
}
|
||||
var title: String = ""
|
||||
set(value) {
|
||||
cache.clearCached()
|
||||
field = value
|
||||
}
|
||||
var isModerated: Boolean = false // No one but moderators can talk
|
||||
set(value) {
|
||||
cache.clearCached()
|
||||
field = value
|
||||
}
|
||||
var isPublic: Boolean
|
||||
get() = type == 0
|
||||
set(isPublic) {
|
||||
cache.clearCached()
|
||||
this.type = (if (isPublic) 0 else 1)
|
||||
}
|
||||
|
||||
val moderators: List<ChatAvatar>
|
||||
get() { return ArrayList(_moderators) }
|
||||
|
||||
val invited: List<ChatAvatar>
|
||||
get() { return ArrayList(_invited) }
|
||||
|
||||
val members: List<ChatAvatar>
|
||||
get() { return ArrayList(_members) }
|
||||
|
||||
val banned: List<ChatAvatar>
|
||||
get() { return ArrayList(_banned) }
|
||||
|
||||
fun canJoinRoom(avatar: ChatAvatar, ignoreInvitation: Boolean): ChatResult {
|
||||
if (_banned.contains(avatar)) return ChatResult.ROOM_AVATAR_BANNED
|
||||
|
||||
if (_members.contains(avatar)) return ChatResult.ROOM_ALREADY_JOINED
|
||||
|
||||
if (isPublic || ignoreInvitation || _invited.contains(avatar) || _moderators.contains(avatar)) return ChatResult.SUCCESS
|
||||
|
||||
return ChatResult.ROOM_AVATAR_NO_PERMISSION
|
||||
}
|
||||
|
||||
fun canSendMessage(avatar: ChatAvatar): ChatResult {
|
||||
if (_banned.contains(avatar)) return ChatResult.ROOM_AVATAR_BANNED
|
||||
|
||||
if (isModerated && !_moderators.contains(avatar)) return ChatResult.CUSTOM_FAILURE
|
||||
|
||||
return ChatResult.SUCCESS
|
||||
}
|
||||
|
||||
fun isModerator(avatar: ChatAvatar): Boolean {
|
||||
return avatar == owner || _moderators.contains(avatar)
|
||||
}
|
||||
|
||||
fun isMember(avatar: ChatAvatar): Boolean {
|
||||
return _members.contains(avatar)
|
||||
}
|
||||
|
||||
fun isBanned(avatar: ChatAvatar): Boolean {
|
||||
return _banned.contains(avatar)
|
||||
}
|
||||
|
||||
fun isInvited(avatar: ChatAvatar): Boolean {
|
||||
return _invited.contains(avatar)
|
||||
}
|
||||
|
||||
fun addMember(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _members.add(avatar)
|
||||
}
|
||||
|
||||
fun removeMember(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _members.remove(avatar)
|
||||
}
|
||||
|
||||
fun addModerator(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _moderators.add(avatar)
|
||||
}
|
||||
|
||||
fun removeModerator(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _moderators.remove(avatar)
|
||||
}
|
||||
|
||||
fun addInvited(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _invited.add(avatar)
|
||||
}
|
||||
|
||||
fun removeInvited(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _invited.remove(avatar)
|
||||
}
|
||||
|
||||
fun addBanned(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _banned.add(avatar)
|
||||
}
|
||||
|
||||
fun removeBanned(avatar: ChatAvatar): Boolean {
|
||||
cache.clearCached()
|
||||
return _banned.remove(avatar)
|
||||
}
|
||||
|
||||
override fun decode(data: NetBuffer) {
|
||||
id = data.int
|
||||
type = data.int
|
||||
isModerated = data.boolean
|
||||
path = data.ascii
|
||||
owner = data.getEncodable(ChatAvatar::class.java)
|
||||
creator = data.getEncodable(ChatAvatar::class.java)
|
||||
title = data.unicode
|
||||
_moderators.clear()
|
||||
_moderators.addAll(data.getList(ChatAvatar::class.java))
|
||||
_invited.clear()
|
||||
_invited.addAll(data.getList(ChatAvatar::class.java))
|
||||
}
|
||||
|
||||
override fun encode(): ByteArray {
|
||||
return cache.encode()
|
||||
}
|
||||
|
||||
private fun encodeImpl(): ByteArray {
|
||||
val data = NetBuffer.allocate(length)
|
||||
data.addInt(id)
|
||||
data.addInt(type)
|
||||
data.addBoolean(isModerated)
|
||||
data.addAscii(path)
|
||||
data.addEncodable(owner)
|
||||
data.addEncodable(creator)
|
||||
data.addUnicode(title)
|
||||
data.addList(_moderators)
|
||||
data.addList(_invited)
|
||||
return data.array()
|
||||
}
|
||||
|
||||
override val length: Int
|
||||
get() {
|
||||
var avatarIdSize = 0 // The encode method for ChatAvatar saves the encode result if the class was modified/null data
|
||||
|
||||
for (moderator in _moderators) {
|
||||
avatarIdSize += moderator.length
|
||||
}
|
||||
for (invitee in _invited) {
|
||||
avatarIdSize += invitee.length
|
||||
}
|
||||
|
||||
avatarIdSize += owner.length + creator.length
|
||||
return 23 + path.length + (title.length * 2) + avatarIdSize
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "ChatRoom[id=$id, type=$type, path='$path', title='$title', creator=$creator, moderated=$isModerated, isPublic=$isPublic]"
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (other == null || javaClass != other.javaClass) return false
|
||||
val chatRoom = other as ChatRoom
|
||||
return id == chatRoom.id && type == chatRoom.type && isModerated == chatRoom.isModerated && _moderators == chatRoom._moderators && _invited == chatRoom._invited && _banned == chatRoom._banned && path == chatRoom.path && owner == chatRoom.owner && creator == chatRoom.creator && title == chatRoom.title
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return Objects.hash(_moderators, _invited, _banned, id, type, path, owner, creator, title, isModerated)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -64,7 +64,7 @@ public class ChatOnEnteredRoom extends SWGPacket {
|
||||
if (!super.checkDecode(data, CRC))
|
||||
return;
|
||||
avatar = data.getEncodable(ChatAvatar.class);
|
||||
result = ChatResult.fromInteger(data.getInt());
|
||||
result = ChatResult.Companion.fromInteger(data.getInt());
|
||||
chatRoomId = data.getInt();
|
||||
sequence = data.getInt();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -45,7 +45,7 @@ public class ChatOnSendPersistentMessage extends SWGPacket {
|
||||
public void decode(NetBuffer data) {
|
||||
if (!super.checkDecode(data, CRC))
|
||||
return;
|
||||
result = ChatResult.fromInteger(data.getInt());
|
||||
result = ChatResult.Companion.fromInteger(data.getInt());
|
||||
count = data.getInt();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -67,7 +67,7 @@ public class CombatAction extends ObjectController {
|
||||
attackerId = data.getLong();
|
||||
weaponId = data.getLong();
|
||||
posture = Posture.getFromId(data.getByte());
|
||||
trail = TrailLocation.getTrailLocation(data.getByte());
|
||||
trail = TrailLocation.Companion.getTrailLocation(data.getByte());
|
||||
clientEffectId = data.getByte();
|
||||
commandCrc = data.getInt();
|
||||
int count = data.getShort();
|
||||
@@ -77,7 +77,7 @@ public class CombatAction extends ObjectController {
|
||||
d.setPosture(Posture.getFromId(data.getByte()));
|
||||
d.setDefense(data.getBoolean());
|
||||
d.setClientEffectId(data.getByte());
|
||||
d.setHitLocation(HitLocation.getHitLocation(data.getByte()));
|
||||
d.setHitLocation(HitLocation.Companion.getHitLocation(data.getByte()));
|
||||
d.setDamage(data.getShort());
|
||||
defenders.add(d);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2018 /// Project SWG /// www.projectswg.com *
|
||||
* Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
|
||||
* *
|
||||
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
|
||||
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
|
||||
@@ -72,19 +72,19 @@ public class CombatSpam extends ObjectController {
|
||||
if (info.isSuccess()) {
|
||||
info.setArmor(data.getLong());
|
||||
info.setRawDamage(data.getInt());
|
||||
info.setDamageType(DamageType.getDamageType(data.getInt()));
|
||||
info.setDamageType(DamageType.Companion.getDamageType(data.getInt()));
|
||||
info.setElementalDamage(data.getInt());
|
||||
info.setElementalDamageType(DamageType.getDamageType(data.getInt()));
|
||||
info.setElementalDamageType(DamageType.Companion.getDamageType(data.getInt()));
|
||||
info.setBleedDamage(data.getInt());
|
||||
info.setCriticalDamage(data.getInt());
|
||||
info.setBlockedDamage(data.getInt());
|
||||
info.setFinalDamage(data.getInt());
|
||||
info.setHitLocation(HitLocation.getHitLocation(data.getInt()));
|
||||
info.setHitLocation(HitLocation.Companion.getHitLocation(data.getInt()));
|
||||
}
|
||||
} else if (isMessageData(dataType)) {
|
||||
spamMessage = data.getEncodable(OutOfBandPackage.class);
|
||||
}
|
||||
spamType = CombatSpamType.getCombatSpamType(data.getInt());
|
||||
spamType = CombatSpamType.Companion.getCombatSpamType(data.getInt());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user