mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-09-30 15:13:10 -04:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import sys
|
||||
from services.spawn import MobileTemplate
|
||||
from services.spawn import WeaponTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addTemplate(core):
|
||||
mobileTemplate = MobileTemplate()
|
||||
|
||||
mobileTemplate.setCreatureName('storm_commando')
|
||||
mobileTemplate.setLevel(71)
|
||||
mobileTemplate.setDifficulty(0)
|
||||
mobileTemplate.setAttackRange(24)
|
||||
mobileTemplate.setAttackSpeed(0.4)
|
||||
mobileTemplate.setWeaponType(1)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_scout_trooper_black_black.iff')
|
||||
mobileTemplate.setTemplates(templates)
|
||||
|
||||
weaponTemplates = Vector()
|
||||
weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 0, 1.0)
|
||||
weaponTemplates.add(weapontemplate)
|
||||
weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dx2.iff', 0, 1.0)
|
||||
weaponTemplates.add(weapontemplate)
|
||||
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
|
||||
|
||||
|
||||
attacks = Vector()
|
||||
mobileTemplate.setDefaultAttack('rangedShot')
|
||||
mobileTemplate.setAttacks(attacks)
|
||||
|
||||
core.spawnService.addMobileTemplate('storm_commando', mobileTemplate)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import sys
|
||||
from services.spawn import MobileTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addTemplate(core):
|
||||
mobileTemplate = MobileTemplate()
|
||||
|
||||
mobileTemplate.setCreatureName('nightsister_slave')
|
||||
mobileTemplate.setLevel(86)
|
||||
mobileTemplate.setDifficulty(1)
|
||||
mobileTemplate.setAttackRange(5)
|
||||
mobileTemplate.setAttackSpeed(1.0)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_dathomir_nightsister_slave.iff')
|
||||
mobileTemplate.setTemplates(templates)
|
||||
|
||||
|
||||
attacks = Vector()
|
||||
mobileTemplate.setDefaultAttack('meleehit')
|
||||
mobileTemplate.setAttacks(attacks)
|
||||
|
||||
core.spawnService.addMobileTemplate('nightsister_slave', mobileTemplate)
|
||||
@@ -0,0 +1,22 @@
|
||||
import sys
|
||||
from services.spawn import MobileTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addTemplate(core):
|
||||
mobileTemplate = MobileTemplate()
|
||||
|
||||
mobileTemplate.setCreatureName('rancor')
|
||||
mobileTemplate.setLevel(50)
|
||||
mobileTemplate.setDifficulty(1)
|
||||
mobileTemplate.setAttackRange(5)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_rancor.iff')
|
||||
mobileTemplate.setTemplates(templates)
|
||||
|
||||
|
||||
attacks = Vector()
|
||||
mobileTemplate.setDefaultAttack('creatureMeleeAttack')
|
||||
mobileTemplate.setAttacks(attacks)
|
||||
|
||||
core.spawnService.addMobileTemplate('rancor', mobileTemplate)
|
||||
@@ -0,0 +1,30 @@
|
||||
import sys
|
||||
from services.spawn import MobileTemplate
|
||||
from services.spawn import WeaponTemplate
|
||||
from java.util import Vector
|
||||
|
||||
def addTemplate(core):
|
||||
mobileTemplate = MobileTemplate()
|
||||
|
||||
mobileTemplate.setCreatureName('ep3_general_grievous')
|
||||
mobileTemplate.setLevel(80)
|
||||
mobileTemplate.setDifficulty(2)
|
||||
mobileTemplate.setAttackRange(6)
|
||||
mobileTemplate.setAttackSpeed(1.0)
|
||||
mobileTemplate.setWeaponType(9)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/ep3/shared_general_grievous.iff')
|
||||
mobileTemplate.setTemplates(templates)
|
||||
|
||||
weaponTemplates = Vector()
|
||||
weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0)
|
||||
weaponTemplates.add(weapontemplate)
|
||||
mobileTemplate.setWeaponTemplateVector(weaponTemplates)
|
||||
|
||||
attacks = Vector()
|
||||
mobileTemplate.setDefaultAttack('saberHit')
|
||||
mobileTemplate.setAttacks(attacks)
|
||||
|
||||
core.spawnService.addMobileTemplate('general_grievous', mobileTemplate)
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
|
||||
lootPoolNames_1 = ['rareloot']
|
||||
lootPoolChances_1 = [100]
|
||||
lootGroupChance_1 = 5
|
||||
object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1)
|
||||
|
||||
return
|
||||
@@ -1,4 +1,10 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
lootPoolNames_1 = ['Junk']
|
||||
lootPoolChances_1 = [100]
|
||||
lootGroupChance_1 = 90
|
||||
object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1)
|
||||
|
||||
return
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
|
||||
lootPoolNames_1 = ['Junk']
|
||||
lootPoolChances_1 = [100]
|
||||
lootGroupChance_1 = 90
|
||||
object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1)
|
||||
|
||||
return
|
||||
@@ -1,31 +1,22 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
object.setStfFilename('static_item_n')
|
||||
object.setStfName('item_jedi_robe_dark_04_05')
|
||||
object.setDetailFilename('static_item_d')
|
||||
object.setDetailName('item_jedi_robe_dark_04_05')
|
||||
|
||||
object.setStringAttribute('protection_level', 'Radiant')
|
||||
object.setStringAttribute('class_required', 'Jedi')
|
||||
object.setIntAttribute('required_combat_level', 20)
|
||||
|
||||
object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250)
|
||||
object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 250)
|
||||
object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 250)
|
||||
|
||||
object.setStringAttribute('proc_name', '@ui_buff:proc_old_dark_jedi_gift')
|
||||
object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1')
|
||||
|
||||
object.setAttachment('type', 'jedi_robe')
|
||||
object.setAttachment('setBonus', 'set_bonus_jedi_robe')
|
||||
return
|
||||
|
||||
def equip(core, actor, target):
|
||||
core.skillModService.addSkillMod(actor, 'constitution_modified', 250)
|
||||
core.skillModService.addSkillMod(actor, 'precision_modified', 250)
|
||||
core.skillModService.addSkillMod(actor, 'luck_modified', 250)
|
||||
|
||||
Buff = actor.getBuffByName('proc_old_dark_jedi_gift')
|
||||
if actor.getBuffList().contains(Buff):
|
||||
core.buffService.removeBuffFromCreature(actor, Buff)
|
||||
return
|
||||
|
||||
if actor:
|
||||
core.buffService.addBuffToCreature(actor, 'proc_old_dark_jedi_gift')
|
||||
return
|
||||
return
|
||||
|
||||
def unequip(core, actor, target):
|
||||
core.skillModService.deductSkillMod(actor, 'constitution_modified', 250)
|
||||
core.skillModService.deductSkillMod(actor, 'precision_modified', 250)
|
||||
core.skillModService.deductSkillMod(actor, 'luck_modified', 250)
|
||||
|
||||
Buff = actor.getBuffByName('proc_old_dark_jedi_gift')
|
||||
if actor.getBuffList().contains(Buff):
|
||||
core.buffService.removeBuffFromCreature(actor, Buff)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -1,34 +1,26 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
object.setStfFilename('static_item_n')
|
||||
object.setStfName('item_jedi_robe_light_04_05')
|
||||
object.setDetailFilename('static_item_d')
|
||||
object.setDetailName('item_jedi_robe_light_04_05')
|
||||
|
||||
object.setStringAttribute('protection_level', 'Radiant')
|
||||
object.setStringAttribute('class_required', 'Jedi')
|
||||
object.setIntAttribute('required_combat_level', 20)
|
||||
|
||||
object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250)
|
||||
object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 250)
|
||||
object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 250)
|
||||
|
||||
|
||||
object.setStringAttribute('proc_name', '@ui_buff:proc_old_light_jedi_gift')
|
||||
object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1')
|
||||
|
||||
object.setAttachment('type', 'jedi_robe')
|
||||
object.setAttachment('setBonus', 'set_bonus_jedi_robe')
|
||||
|
||||
return
|
||||
|
||||
def equip(core, actor, target):
|
||||
core.skillModService.addSkillMod(actor, 'agility_modified', 250)
|
||||
core.skillModService.addSkillMod(actor, 'constitution_modified', 250)
|
||||
core.skillModService.addSkillMod(actor, 'strength_modified', 250)
|
||||
|
||||
Buff = actor.getBuffByName('proc_old_light_jedi_gift')
|
||||
if actor.getBuffList().contains(Buff):
|
||||
core.buffService.removeBuffFromCreature(actor, Buff)
|
||||
return
|
||||
|
||||
if actor:
|
||||
core.buffService.addBuffToCreature(actor, 'proc_old_light_jedi_gift')
|
||||
return
|
||||
return
|
||||
|
||||
def unequip(core, actor, target):
|
||||
core.skillModService.deductSkillMod(actor, 'agility_modified', 250)
|
||||
core.skillModService.deductSkillMod(actor, 'constitution_modified', 250)
|
||||
core.skillModService.deductSkillMod(actor, 'strength_modified', 250)
|
||||
|
||||
Buff = actor.getBuffByName('proc_old_light_jedi_gift')
|
||||
if actor.getBuffList().contains(Buff):
|
||||
core.buffService.removeBuffFromCreature(actor, Buff)
|
||||
return
|
||||
return
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
|
||||
@@ -23,8 +23,6 @@ package resources.objects.creature;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
@@ -96,6 +94,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder {
|
||||
}
|
||||
|
||||
buffer.putShort((short) 19); // Object Count
|
||||
|
||||
// BaseObject
|
||||
buffer.putFloat(1);
|
||||
buffer.put(getAsciiString(creature.getStfFilename()));
|
||||
buffer.putInt(0);
|
||||
@@ -104,6 +104,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder {
|
||||
buffer.put(getUnicodeString(creature.getCustomName()));
|
||||
// buffer.putInt(0x000F4240); // volume
|
||||
buffer.putInt(1);
|
||||
|
||||
// TangibleObject
|
||||
buffer.putInt(CRC.StringtoCRC(creature.getFaction()));
|
||||
|
||||
buffer.putInt(creature.getFactionStatus());
|
||||
@@ -126,6 +128,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder {
|
||||
buffer.putInt(0x3A98);
|
||||
|
||||
buffer.put((byte) 1);
|
||||
|
||||
// CreatureObject
|
||||
buffer.put((byte) creature.getPosture());
|
||||
buffer.put((byte) 0);
|
||||
|
||||
@@ -216,20 +220,21 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder {
|
||||
IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short) 0x23);
|
||||
|
||||
// BaseObject
|
||||
buffer.putInt(0x43); // serverId
|
||||
|
||||
buffer.putShort((short) 0); // detaiLStfFilename
|
||||
buffer.putInt(0); // detailStfSpacer
|
||||
buffer.putShort((short) 0); // detailStfName
|
||||
|
||||
// TANO 6 lists TODO: research
|
||||
|
||||
// TangibleObject
|
||||
buffer.put(creature.getCombatFlag());
|
||||
|
||||
buffer.putLong(0); //List<Long> possibly defenders list
|
||||
buffer.putLong(0); //Set<Long> cloakViewers (set of objectIds of who can see a cloaked spy)
|
||||
buffer.putInt(0); //Int
|
||||
buffer.putLong(0); //List<Long>
|
||||
buffer.putLong(0); //List<Int>
|
||||
buffer.putLong(0); //List<Int>
|
||||
buffer.putLong(0); //List<Unknown>
|
||||
|
||||
buffer.putShort(creature.getLevel());
|
||||
|
||||
@@ -393,37 +393,31 @@ public class MountService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
public void mount(CreatureObject rider, CreatureObject mount) {
|
||||
// FIXME like above, movement skillmod should be used instead of creo4 vars and never be 0, otherwise it thinks we are always rooted
|
||||
//if (rider.getSkillModBase("movement") == 0) {
|
||||
//rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_rooted"), DisplayType.Broadcast);
|
||||
//return;
|
||||
//}
|
||||
// Check if mount may be mounted // This is already checked in canMount
|
||||
|
||||
// Check if mount may be mounted
|
||||
if (rider == null)
|
||||
{
|
||||
if (rider == null) {
|
||||
return;
|
||||
}
|
||||
if (mount == null)
|
||||
{
|
||||
|
||||
if (mount == null) {
|
||||
return;
|
||||
}
|
||||
if (!mount.getOption(Options.MOUNT))
|
||||
{
|
||||
|
||||
if (!mount.getOption(Options.MOUNT)) {
|
||||
return;
|
||||
}
|
||||
if (mount.getOption(Options.DISABLED))
|
||||
{
|
||||
|
||||
if (mount.getOption(Options.DISABLED)) {
|
||||
rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast);
|
||||
return;
|
||||
}
|
||||
if (rider.isInStealth())
|
||||
{
|
||||
|
||||
if (rider.isInStealth()) {
|
||||
rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:no_mount_stealth"), DisplayType.Broadcast);
|
||||
return;
|
||||
}
|
||||
if (!canMount(rider, mount))
|
||||
{
|
||||
|
||||
if (!canMount(rider, mount)) {
|
||||
rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount"), DisplayType.Broadcast);
|
||||
return;
|
||||
}
|
||||
@@ -432,12 +426,10 @@ public class MountService implements INetworkDispatch {
|
||||
mount._add(rider);
|
||||
|
||||
// Set mount states and stuff
|
||||
mount.setStateBitmask(mount.getStateBitmask() | State.MountedCreature);
|
||||
mount.setState(State.MountedCreature, true);
|
||||
mount.setPosture(Posture.DrivingVehicle);
|
||||
|
||||
// Set rider states and stuff
|
||||
rider.setStateBitmask(rider.getStateBitmask() | State.RidingMount);
|
||||
rider.setState(StateStatus.RidingMount, true);
|
||||
|
||||
// Notify observers and update quadtree
|
||||
@@ -524,44 +516,20 @@ public class MountService implements INetworkDispatch {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(mount.getSlottedObject("rider") == rider) return true;
|
||||
|
||||
if(mount.getAttachment("passenger") == null) return false;
|
||||
|
||||
for(int i = 1; i < (int) mount.getAttachment("passenger"); i++)
|
||||
{
|
||||
if (mount.getSlottedObject("rider" + i) != rider) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isMounted(SWGObject actor, CreatureObject mount) {
|
||||
return actor.getContainer() == mount;
|
||||
}
|
||||
|
||||
public int getPassengerCount(CreatureObject mount)
|
||||
{
|
||||
mount.setAttachment("passengers", 0);
|
||||
|
||||
mount.viewChildren(mount, false, false, new Traverser()
|
||||
{
|
||||
public void process(SWGObject passenger)
|
||||
{
|
||||
if (passenger instanceof CreatureObject) mount.setAttachment("passengers", (int) mount.getAttachment("passengers") + 1);
|
||||
}
|
||||
});
|
||||
|
||||
return (int)mount.getAttachment("passengers");
|
||||
}
|
||||
|
||||
public boolean canMount(CreatureObject rider, CreatureObject mount) {
|
||||
if (mount == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!mount.getOption(Options.MOUNT)) {
|
||||
// return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isMounted(rider)) {
|
||||
@@ -579,23 +547,28 @@ public class MountService implements INetworkDispatch {
|
||||
return false;
|
||||
}
|
||||
|
||||
int passengers = 0;
|
||||
// Check if there are any passenger slots left
|
||||
|
||||
if (mount.getAttachment("passengers") != null){
|
||||
passengers = getPassengerCount(mount);
|
||||
}
|
||||
LongAdder adder = new LongAdder();
|
||||
|
||||
int passengerSlot = 0;
|
||||
mount.getSlottedObject("inventory").viewChildren(owner, false, false, (obj) -> adder.increment());
|
||||
|
||||
for (int i = 1; i <= passengers; i++) {
|
||||
if (mount.getSlottedObject("rider" + i) == null) {
|
||||
passengerSlot = i;
|
||||
break;
|
||||
int passengers = adder.intValue();
|
||||
|
||||
try {
|
||||
DatatableVisitor visitor = ClientFileManager.loadFile("datatables/mount/saddle_appearance_map.iff", DatatableVisitor.class);
|
||||
|
||||
for (int i = 0; i < visitor.getRowCount(); i++) {
|
||||
if (visitor.getObject(i, 2).equals(mount.getAttachment("pcdAppearanceFilename"))) { // saddle_appearance_filename
|
||||
if (passengers >= (int) visitor.getObject(i, 1)) { // saddle_capacity
|
||||
return false;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (passengerSlot == 0) {
|
||||
// return false;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
CreatureObject owner = (CreatureObject) NGECore.getInstance().objectService.getObject(mount.getOwnerId());
|
||||
@@ -612,50 +585,31 @@ public class MountService implements INetworkDispatch {
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
DatatableVisitor visitor = ClientFileManager.loadFile("datatables/mount/saddle_appearance_map.iff", DatatableVisitor.class);
|
||||
for(int i = 0; i < visitor.getRowCount(); i++)
|
||||
{
|
||||
if(visitor.getObject(i, 2).equals(mount.getAttachment("pcdAppearanceFilename"))) // saddle_appearance_name
|
||||
{
|
||||
if(passengers < (int) visitor.getObject(i, 1)) return true; // saddle_capacity
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e) { e.printStackTrace(); }
|
||||
|
||||
if(passengers > 0) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void dismount(CreatureObject rider, CreatureObject mount) {
|
||||
// Check if mount is currently mounted // Not necessary since nobody'll be dismounted if so
|
||||
|
||||
// Check if mount is currently mounted
|
||||
if (rider == null || mount == null)
|
||||
{
|
||||
if (rider == null || mount == null) {
|
||||
return;
|
||||
}
|
||||
if (!isMounted(rider))
|
||||
{
|
||||
|
||||
if (!isMounted(rider)) {
|
||||
return;
|
||||
}
|
||||
if (!mount.getOption(Options.MOUNT))
|
||||
{
|
||||
}
|
||||
|
||||
if (!mount.getOption(Options.MOUNT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Dismount all passengers
|
||||
|
||||
if (rider.getObjectID() == mount.getOwnerId())
|
||||
{
|
||||
if (rider.getObjectID() == mount.getOwnerId()) {
|
||||
CreatureObject owner = rider;
|
||||
mount.viewChildren(owner, false, false, new Traverser()
|
||||
{
|
||||
public void process(SWGObject passenger)
|
||||
{
|
||||
|
||||
mount.viewChildren(owner, false, false, new Traverser() {
|
||||
|
||||
public void process(SWGObject passenger) {
|
||||
if (passenger != owner) dismount(rider, mount);
|
||||
}
|
||||
|
||||
@@ -666,25 +620,23 @@ public class MountService implements INetworkDispatch {
|
||||
mount._remove(rider);
|
||||
|
||||
// Set mount states and stuff
|
||||
if (rider.getObjectID() == mount.getOwnerId())
|
||||
{
|
||||
mount.setStateBitmask(0);
|
||||
if (rider.getObjectID() == mount.getOwnerId()) {
|
||||
//mount.setStateBitmask(0);
|
||||
mount.setState(State.MountedCreature, false);
|
||||
}
|
||||
|
||||
// Set rider states and stuff
|
||||
rider.setStateBitmask(0);
|
||||
//rider.setStateBitmask(0);
|
||||
rider.setState(StateStatus.RidingMount, false);
|
||||
rider.setPosture((byte) 0);
|
||||
|
||||
rider.setPosture(Posture.Upright);
|
||||
|
||||
// Update observers and quadtree
|
||||
mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), 0, -1), true);
|
||||
core.simulationService.teleport(rider, mount.getWorldPosition(), mount.getOrientation(), 0);
|
||||
core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false);
|
||||
|
||||
// Store mount if it's a creature
|
||||
if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId())
|
||||
{
|
||||
if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId()) {
|
||||
store(rider, mount);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user