mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 03:47:27 +00:00
Add mount role for NPCs with rider controls
This commit is contained in:
1 parent
082d22ba6e
commit
11e326de48
23 files changed
+476
-6
No files matched your search
@@ -21,6 +21,7 @@ import noppes.npcs.roles.JobSpawner;
|
||||
import noppes.npcs.roles.RoleBank;
|
||||
import noppes.npcs.roles.RoleCompanion;
|
||||
import noppes.npcs.roles.RoleFollower;
|
||||
import noppes.npcs.roles.RoleMount;
|
||||
import noppes.npcs.roles.RolePostman;
|
||||
import noppes.npcs.roles.RoleTrader;
|
||||
import noppes.npcs.roles.RoleTransporter;
|
||||
@@ -196,7 +197,11 @@ public class DataAdvanced {
|
||||
if (EnumRoleType.values().length <= i) {
|
||||
i -= 2;
|
||||
}
|
||||
role = EnumRoleType.values()[i];
|
||||
EnumRoleType newRole = EnumRoleType.values()[i];
|
||||
if (npc.roleInterface instanceof RoleMount && newRole != EnumRoleType.Mount) {
|
||||
((RoleMount) npc.roleInterface).onDisable();
|
||||
}
|
||||
role = newRole;
|
||||
if (role == EnumRoleType.None)
|
||||
npc.roleInterface = null;
|
||||
else if (role == EnumRoleType.Bank && !(npc.roleInterface instanceof RoleBank))
|
||||
@@ -211,6 +216,8 @@ public class DataAdvanced {
|
||||
npc.roleInterface = new RoleTransporter(npc);
|
||||
else if (role == EnumRoleType.Companion && !(npc.roleInterface instanceof RoleCompanion))
|
||||
npc.roleInterface = new RoleCompanion(npc);
|
||||
else if (role == EnumRoleType.Mount && !(npc.roleInterface instanceof RoleMount))
|
||||
npc.roleInterface = new RoleMount(npc);
|
||||
}
|
||||
|
||||
public void setJob(int i) {
|
||||
|
||||
@@ -25,6 +25,7 @@ import noppes.npcs.client.gui.roles.GuiNpcFollowerJob;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcGuard;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcHealer;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcSpawner;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcMount;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcTransporter;
|
||||
import noppes.npcs.client.gui.util.GuiNPCInterface2;
|
||||
import noppes.npcs.client.gui.util.GuiNpcButton;
|
||||
@@ -47,7 +48,7 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData {
|
||||
super.initGui();
|
||||
int y = guiTop + 10;
|
||||
this.addButton(new GuiNpcButton(3, guiLeft + 85 + 160, y, 52, 20, "selectServer.edit"));
|
||||
this.addButton(new GuiNpcButton(8, guiLeft + 85, y, 155, 20, new String[]{"role.none", "role.trader", "role.follower", "role.bank", "role.transporter", "role.mailman", NoppesStringUtils.translate("role.companion", "(WIP)")}, npc.advanced.role.ordinal()));
|
||||
this.addButton(new GuiNpcButton(8, guiLeft + 85, y, 155, 20, new String[]{"role.none", "role.trader", "role.follower", "role.bank", "role.transporter", "role.mailman", NoppesStringUtils.translate("role.companion", "(WIP)"), "role.mount"}, npc.advanced.role.ordinal()));
|
||||
getButton(3).setEnabled(npc.advanced.role != EnumRoleType.None && npc.advanced.role != EnumRoleType.Postman);
|
||||
|
||||
this.addButton(new GuiNpcButton(4, guiLeft + 85 + 160, y += 22, 52, 20, "selectServer.edit"));
|
||||
@@ -148,6 +149,8 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData {
|
||||
displayGuiScreen(new GuiNpcTransporter(npc));
|
||||
else if (npc.advanced.role == EnumRoleType.Companion)
|
||||
displayGuiScreen(new GuiNpcCompanion(npc));
|
||||
else if (npc.advanced.role == EnumRoleType.Mount)
|
||||
displayGuiScreen(new GuiNpcMount(npc));
|
||||
} else if (compound.hasKey("JobData")) {
|
||||
if (npc.jobInterface != null)
|
||||
npc.jobInterface.readFromNBT(compound);
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
package noppes.npcs.client.gui.roles;
|
||||
|
||||
import kamkeel.npcs.network.PacketClient;
|
||||
import kamkeel.npcs.network.packets.request.role.RoleSavePacket;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import noppes.npcs.client.gui.util.GuiNPCInterface2;
|
||||
import noppes.npcs.client.gui.util.GuiNpcButton;
|
||||
import noppes.npcs.client.gui.util.GuiNpcLabel;
|
||||
import noppes.npcs.client.gui.util.GuiNpcTextField;
|
||||
import noppes.npcs.client.gui.util.ITextfieldListener;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.roles.RoleMount;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class GuiNpcMount extends GuiNPCInterface2 implements ITextfieldListener {
|
||||
|
||||
private final RoleMount role;
|
||||
|
||||
public GuiNpcMount(EntityNPCInterface npc) {
|
||||
super(npc);
|
||||
this.role = npc.roleInterface instanceof RoleMount ? (RoleMount) npc.roleInterface : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
if (role == null) {
|
||||
close();
|
||||
return;
|
||||
}
|
||||
|
||||
int y = guiTop + 6;
|
||||
addOffsetRow(0, "role.mount.offsetx", role.getOffsetX(), y);
|
||||
y += 24;
|
||||
addOffsetRow(1, "role.mount.offsety", role.getOffsetY(), y);
|
||||
y += 24;
|
||||
addOffsetRow(2, "role.mount.offsetz", role.getOffsetZ(), y);
|
||||
|
||||
addButton(new GuiNpcButton(3, guiLeft + 4, y + 26, 80, 20, "role.mount.reset"));
|
||||
|
||||
GuiNpcLabel speedLabel = new GuiNpcLabel(4, "", guiLeft + 4, y + 6);
|
||||
speedLabel.label = StatCollector.translateToLocalFormatted("role.mount.walkspeed", npc.ais.getWalkingSpeed());
|
||||
addLabel(speedLabel);
|
||||
}
|
||||
|
||||
private void addOffsetRow(int id, String translationKey, float value, int y) {
|
||||
addLabel(new GuiNpcLabel(id, translationKey, guiLeft + 4, y + 5));
|
||||
GuiNpcTextField field = new GuiNpcTextField(id, this, guiLeft + 140, y, 80, 20, format(value));
|
||||
field.floatsOnly = true;
|
||||
field.setMinMaxDefaultFloat(-5.0F, 5.0F, 0.0F);
|
||||
addTextField(field);
|
||||
}
|
||||
|
||||
private String format(float value) {
|
||||
return String.format(Locale.ROOT, "%.2f", value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buttonEvent(GuiButton guibutton) {
|
||||
if (role == null)
|
||||
return;
|
||||
if (guibutton.id == 3) {
|
||||
role.resetOffsets();
|
||||
initGui();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unFocused(GuiNpcTextField textfield) {
|
||||
if (role == null)
|
||||
return;
|
||||
float value = textfield.isFloat() ? textfield.getFloat() : 0.0F;
|
||||
switch (textfield.id) {
|
||||
case 0:
|
||||
role.setOffsetX(value);
|
||||
break;
|
||||
case 1:
|
||||
role.setOffsetY(value);
|
||||
break;
|
||||
case 2:
|
||||
role.setOffsetZ(value);
|
||||
break;
|
||||
}
|
||||
textfield.setText(format(valueForField(textfield.id)));
|
||||
}
|
||||
|
||||
private float valueForField(int id) {
|
||||
switch (id) {
|
||||
case 0:
|
||||
return role.getOffsetX();
|
||||
case 1:
|
||||
return role.getOffsetY();
|
||||
case 2:
|
||||
return role.getOffsetZ();
|
||||
default:
|
||||
return 0.0F;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save() {
|
||||
if (role != null) {
|
||||
PacketClient.sendClient(new RoleSavePacket(role.writeToNBT(new NBTTagCompound())));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,5 +2,5 @@ package noppes.npcs.constants;
|
||||
|
||||
public enum EnumRoleType {
|
||||
|
||||
None, Trader, Follower, Bank, Transporter, Postman, Companion
|
||||
None, Trader, Follower, Bank, Transporter, Postman, Companion, Mount
|
||||
}
|
||||
@@ -40,7 +40,10 @@ public abstract class EntityNPCFlying extends EntityNPCInterface {
|
||||
super.onLivingUpdate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_) {
|
||||
if (handleMountedMovement(p_70612_1_, p_70612_2_))
|
||||
return;
|
||||
if (!this.canFly() || this.hurtTime != 0 || !this.canBreathe()) {
|
||||
super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
|
||||
return;
|
||||
@@ -92,4 +95,46 @@ public abstract class EntityNPCFlying extends EntityNPCInterface {
|
||||
this.limbSwingAmount += (distance - this.limbSwingAmount) * 0.4F;
|
||||
this.limbSwing += this.limbSwingAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doMountedMovement(float strafe, float forward) {
|
||||
if (!this.canFly() || this.hurtTime != 0 || !this.canBreathe()) {
|
||||
super.doMountedMovement(strafe, forward);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean aboveLimit = false;
|
||||
double heightOffGround = this.posY - this.worldObj.getTopSolidOrLiquidBlock((int) this.posX, (int) this.posZ);
|
||||
if (heightOffGround < 0) {
|
||||
Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
|
||||
Vec3 posLimit = Vec3.createVectorHelper(this.posX, this.posY - this.ais.flyHeightLimit, this.posZ);
|
||||
MovingObjectPosition mob = this.worldObj.rayTraceBlocks(pos, posLimit, true);
|
||||
if (mob == null || mob.typeOfHit == MovingObjectPosition.MovingObjectType.MISS) {
|
||||
aboveLimit = true;
|
||||
}
|
||||
} else if (heightOffGround > this.ais.flyHeightLimit) {
|
||||
aboveLimit = true;
|
||||
}
|
||||
if (aboveLimit && this.ais.hasFlyLimit || (heightOffGround < Math.ceil(this.height) && this.motionY == 0)) {
|
||||
this.flyLimitAllow = false;
|
||||
if (!this.getNavigator().noPath() && this.motionY > 0) {
|
||||
this.motionY = 0;
|
||||
} else {
|
||||
super.doMountedMovement(strafe, forward);
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.flyLimitAllow = true;
|
||||
|
||||
double d3 = this.motionY;
|
||||
super.doMountedMovement(strafe, forward);
|
||||
this.motionY = d3;
|
||||
|
||||
if (this.getNavigator().noPath()) {
|
||||
this.motionY = -Math.abs(this.ais.flyGravity);
|
||||
}
|
||||
|
||||
this.updateLimbSwing();
|
||||
this.velocityChanged = true;
|
||||
}
|
||||
}
|
||||
@@ -152,6 +152,7 @@ import noppes.npcs.roles.JobFollower;
|
||||
import noppes.npcs.roles.JobInterface;
|
||||
import noppes.npcs.roles.RoleCompanion;
|
||||
import noppes.npcs.roles.RoleFollower;
|
||||
import noppes.npcs.roles.RoleMount;
|
||||
import noppes.npcs.roles.RoleInterface;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.scripted.entity.ScriptNpc;
|
||||
@@ -1753,6 +1754,11 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
roleInterface.writeToNBT(bard);
|
||||
compound.setTag("Companion", bard);
|
||||
}
|
||||
if (advanced.role == EnumRoleType.Mount) {
|
||||
NBTTagCompound mount = new NBTTagCompound();
|
||||
roleInterface.writeToNBT(mount);
|
||||
compound.setTag("Mount", mount);
|
||||
}
|
||||
|
||||
if (this instanceof EntityCustomNpc) {
|
||||
compound.setTag("ModelData", ((EntityCustomNpc) this).modelData.writeToNBT());
|
||||
@@ -1790,6 +1796,10 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
NBTTagCompound companion = compound.getCompoundTag("Companion");
|
||||
roleInterface.readFromNBT(companion);
|
||||
}
|
||||
if (advanced.role == EnumRoleType.Mount) {
|
||||
NBTTagCompound mount = compound.getCompoundTag("Mount");
|
||||
roleInterface.readFromNBT(mount);
|
||||
}
|
||||
if (this instanceof EntityCustomNpc) {
|
||||
((EntityCustomNpc) this).modelData.readFromNBT(compound.getCompoundTag("ModelData"));
|
||||
}
|
||||
@@ -2056,15 +2066,86 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_) {
|
||||
public void moveEntityWithHeading(float strafe, float forward) {
|
||||
if (handleMountedMovement(strafe, forward)) {
|
||||
return;
|
||||
}
|
||||
double d0 = this.posX;
|
||||
double d1 = this.posY;
|
||||
double d2 = this.posZ;
|
||||
super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
|
||||
super.moveEntityWithHeading(strafe, forward);
|
||||
if (advanced.role == EnumRoleType.Companion && !isRemote())
|
||||
((RoleCompanion) roleInterface).addMovementStat(this.posX - d0, this.posY - d1, this.posZ - d2);
|
||||
}
|
||||
|
||||
protected boolean handleMountedMovement(float strafe, float forward) {
|
||||
if (advanced.role != EnumRoleType.Mount || !(roleInterface instanceof RoleMount))
|
||||
return false;
|
||||
if (!(riddenByEntity instanceof EntityLivingBase))
|
||||
return false;
|
||||
|
||||
EntityLivingBase rider = (EntityLivingBase) riddenByEntity;
|
||||
this.prevRotationYaw = this.rotationYaw = rider.rotationYaw;
|
||||
this.rotationPitch = rider.rotationPitch * 0.5F;
|
||||
this.setRotation(this.rotationYaw, this.rotationPitch);
|
||||
this.renderYawOffset = this.rotationYaw;
|
||||
this.rotationYawHead = this.rotationYaw;
|
||||
|
||||
float controlledStrafe = rider.moveStrafing * 0.5F;
|
||||
float controlledForward = rider.moveForward;
|
||||
if (controlledForward <= 0.0F) {
|
||||
controlledForward *= 0.25F;
|
||||
}
|
||||
|
||||
float moveSpeed = getSpeed();
|
||||
if (rider.isSprinting()) {
|
||||
moveSpeed *= 1.2F;
|
||||
}
|
||||
|
||||
this.setSprinting(rider.isSprinting());
|
||||
this.setAIMoveSpeed(moveSpeed);
|
||||
this.stepHeight = 1.0F;
|
||||
this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F;
|
||||
|
||||
this.getNavigator().clearPathEntity();
|
||||
this.setAttackTarget(null);
|
||||
this.setRevengeTarget(null);
|
||||
|
||||
this.fallDistance = 0.0F;
|
||||
rider.fallDistance = 0.0F;
|
||||
|
||||
applyMountedVerticalMotion(rider, moveSpeed);
|
||||
doMountedMovement(controlledStrafe, controlledForward);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void doMountedMovement(float strafe, float forward) {
|
||||
super.moveEntityWithHeading(strafe, forward);
|
||||
}
|
||||
|
||||
protected void applyMountedVerticalMotion(EntityLivingBase rider, float moveSpeed) {
|
||||
if (canFly()) {
|
||||
double vertical = Math.max(0.1D, moveSpeed * 0.6D);
|
||||
if (rider.isJumping()) {
|
||||
this.motionY = Math.min(this.motionY + vertical, vertical);
|
||||
this.isAirBorne = true;
|
||||
} else {
|
||||
float pitch = rider.rotationPitch;
|
||||
if (pitch < -10F) {
|
||||
this.motionY = vertical;
|
||||
} else if (pitch > 10F) {
|
||||
this.motionY = -vertical;
|
||||
} else if (!this.onGround) {
|
||||
this.motionY *= 0.6D;
|
||||
}
|
||||
}
|
||||
} else if (rider.isJumping() && this.onGround) {
|
||||
this.motionY = 0.5D;
|
||||
this.isAirBorne = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean allowLeashing() {
|
||||
return false;
|
||||
@@ -2075,6 +2156,23 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateRiderPosition() {
|
||||
super.updateRiderPosition();
|
||||
if (advanced.role == EnumRoleType.Mount && roleInterface instanceof RoleMount && riddenByEntity != null) {
|
||||
RoleMount mount = (RoleMount) roleInterface;
|
||||
double yaw = Math.toRadians(this.renderYawOffset);
|
||||
double offsetX = mount.getOffsetX();
|
||||
double offsetZ = mount.getOffsetZ();
|
||||
double rotatedX = offsetX * Math.cos(yaw) - offsetZ * Math.sin(yaw);
|
||||
double rotatedZ = offsetX * Math.sin(yaw) + offsetZ * Math.cos(yaw);
|
||||
double offsetY = mount.getOffsetY();
|
||||
riddenByEntity.setPosition(this.posX + rotatedX,
|
||||
this.posY + this.getMountedYOffset() + riddenByEntity.getYOffset() + offsetY,
|
||||
this.posZ + rotatedZ);
|
||||
}
|
||||
}
|
||||
|
||||
// Model Types: 0: Steve 64x32, 1: Steve 64x64, 2: Alex 64x64
|
||||
public int getModelType() {
|
||||
return this.display.modelType;
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
package noppes.npcs.roles;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.util.ValueUtil;
|
||||
|
||||
public class RoleMount extends RoleInterface {
|
||||
|
||||
private float offsetX;
|
||||
private float offsetY;
|
||||
private float offsetZ;
|
||||
private boolean storedReturnToStart;
|
||||
|
||||
public RoleMount(EntityNPCInterface npc) {
|
||||
super(npc);
|
||||
this.storedReturnToStart = npc.ais.returnToStart;
|
||||
npc.ais.returnToStart = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
|
||||
compound.setFloat("MountOffsetX", offsetX);
|
||||
compound.setFloat("MountOffsetY", offsetY);
|
||||
compound.setFloat("MountOffsetZ", offsetZ);
|
||||
compound.setBoolean("MountReturnFlag", storedReturnToStart);
|
||||
return compound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
setOffsetX(compound.getFloat("MountOffsetX"));
|
||||
setOffsetY(compound.getFloat("MountOffsetY"));
|
||||
setOffsetZ(compound.getFloat("MountOffsetZ"));
|
||||
if (compound.hasKey("MountReturnFlag")) {
|
||||
storedReturnToStart = compound.getBoolean("MountReturnFlag");
|
||||
} else {
|
||||
storedReturnToStart = npc.ais.returnToStart;
|
||||
}
|
||||
npc.ais.returnToStart = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interact(EntityPlayer player) {
|
||||
if (player == null || npc.worldObj.isRemote) {
|
||||
return;
|
||||
}
|
||||
if (npc.riddenByEntity != null && npc.riddenByEntity != player) {
|
||||
return;
|
||||
}
|
||||
if (player.ridingEntity != null && player.ridingEntity != npc) {
|
||||
player.mountEntity(null);
|
||||
}
|
||||
player.fallDistance = 0.0F;
|
||||
npc.fallDistance = 0.0F;
|
||||
player.mountEntity(npc);
|
||||
npc.getNavigator().clearPathEntity();
|
||||
npc.setAttackTarget(null);
|
||||
npc.setRevengeTarget(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean aiShouldExecute() {
|
||||
if (npc.ais.returnToStart) {
|
||||
npc.ais.returnToStart = false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setOffsetX(float value) {
|
||||
this.offsetX = clamp(value);
|
||||
}
|
||||
|
||||
public void setOffsetY(float value) {
|
||||
this.offsetY = clamp(value);
|
||||
}
|
||||
|
||||
public void setOffsetZ(float value) {
|
||||
this.offsetZ = clamp(value);
|
||||
}
|
||||
|
||||
public float getOffsetX() {
|
||||
return offsetX;
|
||||
}
|
||||
|
||||
public float getOffsetY() {
|
||||
return offsetY;
|
||||
}
|
||||
|
||||
public float getOffsetZ() {
|
||||
return offsetZ;
|
||||
}
|
||||
|
||||
private float clamp(float value) {
|
||||
return ValueUtil.clamp(value, -5.0F, 5.0F);
|
||||
}
|
||||
|
||||
public void resetOffsets() {
|
||||
offsetX = 0.0F;
|
||||
offsetY = 0.0F;
|
||||
offsetZ = 0.0F;
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
npc.ais.returnToStart = storedReturnToStart;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete() {
|
||||
onDisable();
|
||||
}
|
||||
}
|
||||
@@ -439,3 +439,9 @@ item.npcOfficerHelmet.name=důstojnické brnění
|
||||
item.npcCrown.name=Koruna
|
||||
item.npcCrown2.name=Koruna
|
||||
key.npcInventory=NPC inventář
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -871,3 +871,9 @@ companion.stage=Bühne
|
||||
#German by DewTix
|
||||
|
||||
key.npcInventory=NPC Inventar
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -417,6 +417,12 @@ role.transporter=Transporter
|
||||
role.mailman=Mailman
|
||||
role.marketname=Linked Marketname
|
||||
role.companion=Companion
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
|
||||
trader.insufficient=Insufficient Currency
|
||||
trader.sufficient=Sufficient Currency
|
||||
|
||||
@@ -499,3 +499,9 @@ item.npcSlingshot.name=Slingshot
|
||||
item.npcMusket.name=Mosquete
|
||||
item.npcExcalibur.name=Excalibur
|
||||
key.npcInventory=Inventario de NPC
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -499,3 +499,9 @@ item.npcSlingshot.name=Slingshot
|
||||
item.npcMusket.name=Mosquete
|
||||
item.npcExcalibur.name=Excalibur
|
||||
key.npcInventory=Inventario de NPC
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -541,3 +541,9 @@ item.npcSlingshot.name=Lance-Pièrre
|
||||
item.npcMusket.name=Mousquet
|
||||
item.npcExcalibur.name=Excalibur
|
||||
key.npcInventory=Inventaire Pnj
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -541,3 +541,9 @@ item.npcSlingshot.name=Csúzli
|
||||
item.npcMusket.name=Muskéta
|
||||
item.npcExcalibur.name=Excalibur
|
||||
key.npcInventory=NPC felszerelés
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -316,3 +316,9 @@ item.npcAmethyst.name=Permata Amethyst
|
||||
item.npcRuby.name=Permata Rubi
|
||||
|
||||
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -796,3 +796,9 @@ enchantment.infinite=무한
|
||||
enchantment.poison=독
|
||||
|
||||
key.npcInventory=NPC 인벤토리
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -230,4 +230,10 @@ item.npcCrown2.name=Kroon
|
||||
|
||||
item.npcNinjaHead.name=Ninja Helm
|
||||
item.npcNinjaChest.name=Ninja Borst
|
||||
item.npcNinjaPants.name=Ninja Broek
|
||||
item.npcNinjaPants.name=Ninja Broek
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -497,3 +497,9 @@ item.npcSlingshot.name=Proca
|
||||
item.npcMusket.name=Muszkiet
|
||||
item.npcExcalibur.name=Excalibur
|
||||
key.npcInventory=Inwentarz npc
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -497,3 +497,9 @@ item.npcSlingshot.name=Estilingue
|
||||
item.npcMusket.name=Mosquete
|
||||
item.npcExcalibur.name=Excalibur
|
||||
key.npcInventory=Inventário NPC
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -1020,3 +1020,9 @@ questgui.reject=Отменить
|
||||
questgui.accept=Принять
|
||||
|
||||
key.npcInventory=Инвентарь NPC
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -307,3 +307,9 @@ item.npcKey.name=Key
|
||||
item.npcPendant.name=Pendant
|
||||
item.npcBlueprint.name=Blueprint
|
||||
item.npcRing.name=Ring
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -1243,3 +1243,9 @@ hitbox.width=宽度比例
|
||||
hitbox.height=身高比例
|
||||
|
||||
key.npcInventory=NPC物品栏
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
@@ -313,3 +313,9 @@ item.npcBronzeIngot.name=銅錠
|
||||
item.npcSaphire.name=藍寶石
|
||||
item.npcAmethyst.name=紫水晶
|
||||
item.npcRuby.name=紅寶石
|
||||
role.mount=Mount
|
||||
role.mount.offsetx=Seat Offset X
|
||||
role.mount.offsety=Seat Offset Y
|
||||
role.mount.offsetz=Seat Offset Z
|
||||
role.mount.reset=Reset Position
|
||||
role.mount.walkspeed=Walking speed: %s
|
||||
Reference in new issue
Block a user