mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-01-17 00:06:00 -05:00
Added racial languages #53
This commit is contained in:
Submodule pswgcommon updated: 688bd625c5...221a3ecea4
@@ -35,12 +35,14 @@ public class SpatialChatIntent extends Intent {
|
||||
private String message;
|
||||
private int chatType;
|
||||
private int moodId;
|
||||
private int languageId;
|
||||
|
||||
public SpatialChatIntent(Player player, int chatType, String message, int moodId) {
|
||||
public SpatialChatIntent(Player player, int chatType, String message, int moodId, int languageId) {
|
||||
this.player = player;
|
||||
this.message = message;
|
||||
this.chatType = chatType;
|
||||
this.moodId = moodId;
|
||||
this.languageId = languageId;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
@@ -58,4 +60,8 @@ public class SpatialChatIntent extends Intent {
|
||||
public int getMoodId() {
|
||||
return moodId;
|
||||
}
|
||||
|
||||
public int getLanguageId() {
|
||||
return languageId;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/***********************************************************************************
|
||||
* Copyright (c) 2019 /// 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 Holocore. *
|
||||
* *
|
||||
* --------------------------------------------------------------------------------*
|
||||
* *
|
||||
* Holocore 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. *
|
||||
* *
|
||||
* Holocore 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 Holocore. If not, see <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************************/
|
||||
package com.projectswg.holocore.resources.support.global.commands.callbacks.chat;
|
||||
|
||||
import com.projectswg.holocore.resources.support.global.commands.ICmdCallback;
|
||||
import com.projectswg.holocore.resources.support.global.player.Player;
|
||||
import com.projectswg.holocore.resources.support.objects.swg.SWGObject;
|
||||
import com.projectswg.holocore.resources.support.objects.swg.player.PlayerObject;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class CmdSetSpokenLanguage implements ICmdCallback {
|
||||
|
||||
@Override
|
||||
public void execute(@NotNull Player player, @Nullable SWGObject target, @NotNull String args) {
|
||||
PlayerObject playerObject = player.getPlayerObject();
|
||||
|
||||
playerObject.setLanguageId(Integer.parseInt(args));
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,9 @@ public final class CmdSpatialChatInternal implements ICmdCallback {
|
||||
|
||||
@Override
|
||||
public void execute(@NotNull Player player, SWGObject target, @NotNull String args) {
|
||||
String[] cmdArgs = args.split(" ", 5);
|
||||
String[] cmdArgs = args.split(" ", 6);
|
||||
|
||||
new SpatialChatIntent(player, Integer.valueOf(cmdArgs[1]), args.substring(10), Integer.valueOf(cmdArgs[2])).broadcast();
|
||||
new SpatialChatIntent(player, Integer.parseInt(cmdArgs[1]), args.substring(10), Integer.parseInt(cmdArgs[2]), Integer.parseInt(cmdArgs[4])).broadcast();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -53,6 +53,9 @@ import me.joshlarson.jlcommon.utilities.Arguments;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class CharacterCreation {
|
||||
@@ -70,10 +73,10 @@ public class CharacterCreation {
|
||||
CreatureObject creatureObj = createCreature(race.getFilename(), info);
|
||||
PlayerObject playerObj = createPlayer(creatureObj);
|
||||
|
||||
setCreatureObjectValues(creatureObj);
|
||||
setPlayerObjectValues(playerObj);
|
||||
setCreatureObjectValues(creatureObj, race);
|
||||
setPlayerObjectValues(playerObj, race);
|
||||
createHair(creatureObj, create.getHair(), create.getHairCustomization());
|
||||
createStarterClothing(creatureObj, create.getRace(), create.getClothes());
|
||||
createStarterClothing(creatureObj, race, create.getClothes());
|
||||
playerObj.setAdminTag(accessLevel);
|
||||
|
||||
ObjectCreatedIntent.broadcast(playerObj);
|
||||
@@ -142,8 +145,8 @@ public class CharacterCreation {
|
||||
hairObj.setAppearanceData(customization);
|
||||
}
|
||||
|
||||
private void setCreatureObjectValues(CreatureObject creatureObj) {
|
||||
creatureObj.setRace(Race.getRaceByFile(create.getRace()));
|
||||
private void setCreatureObjectValues(CreatureObject creatureObj, Race race) {
|
||||
creatureObj.setRace(race);
|
||||
creatureObj.setAppearanceData(create.getCharCustomization());
|
||||
creatureObj.setHeight(create.getHeight());
|
||||
creatureObj.setObjectName(create.getName());
|
||||
@@ -154,6 +157,12 @@ public class CharacterCreation {
|
||||
new GrantSkillIntent(GrantSkillIntent.IntentType.GRANT, create.getStartingPhase(), creatureObj, true).broadcast();
|
||||
new GrantSkillIntent(GrantSkillIntent.IntentType.GRANT, "species_" + creatureObj.getRace().getSpecies(), creatureObj, true).broadcast();
|
||||
|
||||
Collection<String> languages = languagesSkillsForRace(creatureObj.getRace());
|
||||
|
||||
for (String language : languages) {
|
||||
new GrantSkillIntent(GrantSkillIntent.IntentType.GRANT, language, creatureObj, true).broadcast();
|
||||
}
|
||||
|
||||
WeaponObject defWeapon = (WeaponObject) createInventoryObject(creatureObj, "object/weapon/melee/unarmed/shared_unarmed_default_player.iff");
|
||||
defWeapon.setMaxRange(5);
|
||||
defWeapon.setType(WeaponType.UNARMED);
|
||||
@@ -168,14 +177,15 @@ public class CharacterCreation {
|
||||
createInventoryObject(creatureObj, "object/tangible/mission_bag/shared_mission_bag.iff");
|
||||
}
|
||||
|
||||
private void setPlayerObjectValues(PlayerObject playerObj) {
|
||||
private void setPlayerObjectValues(PlayerObject playerObj, Race race) {
|
||||
playerObj.setProfession(Profession.getProfessionFromClient(create.getProfession()));
|
||||
playerObj.setBornDate(Instant.now());
|
||||
playerObj.setAccount(player.getUsername());
|
||||
playerObj.setLanguageId(defaultLanguageForRace(race));
|
||||
}
|
||||
|
||||
private void createStarterClothing(CreatureObject creature, String race, String clothing) {
|
||||
List<String> items = DataLoader.Companion.playerStartClothing().getClothing(Race.getRaceByFile(race), clothing);
|
||||
private void createStarterClothing(CreatureObject creature, Race race, String clothing) {
|
||||
List<String> items = DataLoader.Companion.playerStartClothing().getClothing(race, clothing);
|
||||
if (items != null) {
|
||||
for (String itemTemplate : items) {
|
||||
createDefaultObject(creature, itemTemplate);
|
||||
@@ -187,6 +197,80 @@ public class CharacterCreation {
|
||||
createDefaultObject(inventory, "object/tangible/npe/shared_npe_uniform_box.iff");
|
||||
}
|
||||
|
||||
private Collection<String> languagesSkillsForRace(Race race) {
|
||||
Collection<String> languages = new HashSet<>();
|
||||
|
||||
languages.add("social_language_basic_comprehend"); // Anyone can comprehend Galactic Basic
|
||||
languages.add("social_language_wookiee_comprehend"); // Anyone can comprehend Shyriiwook
|
||||
|
||||
switch (race) {
|
||||
case HUMAN_MALE:
|
||||
case HUMAN_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
break;
|
||||
case BOTHAN_MALE:
|
||||
case BOTHAN_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
languages.add("social_language_bothan_speak");
|
||||
languages.add("social_language_bothan_comprehend");
|
||||
break;
|
||||
case ITHORIAN_MALE:
|
||||
case ITHORIAN_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
languages.add("social_language_ithorian_speak");
|
||||
languages.add("social_language_ithorian_comprehend");
|
||||
break;
|
||||
case TWILEK_MALE:
|
||||
case TWILEK_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
languages.add("social_language_lekku_comprehend");
|
||||
languages.add("social_language_lekku_speak");
|
||||
languages.add("social_language_twilek_comprehend");
|
||||
languages.add("social_language_twilek_speak");
|
||||
break;
|
||||
case MONCAL_MALE:
|
||||
case MONCAL_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
languages.add("social_language_moncalamari_comprehend");
|
||||
languages.add("social_language_moncalamari_speak");
|
||||
break;
|
||||
case RODIAN_MALE:
|
||||
case RODIAN_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
languages.add("social_language_rodian_comprehend");
|
||||
languages.add("social_language_rodian_speak");
|
||||
break;
|
||||
case SULLUSTAN_MALE:
|
||||
case SULLUSTAN_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
languages.add("social_language_sullustan_comprehend");
|
||||
languages.add("social_language_sullustan_speak");
|
||||
break;
|
||||
case TRANDOSHAN_MALE:
|
||||
case TRANDOSHAN_FEMALE:
|
||||
languages.add("social_language_basic_speak");
|
||||
languages.add("social_language_trandoshan_comprehend");
|
||||
languages.add("social_language_trandoshan_speak");
|
||||
break;
|
||||
case WOOKIEE_MALE:
|
||||
case WOOKIEE_FEMALE:
|
||||
languages.add("social_language_wookiee_speak");
|
||||
break;
|
||||
}
|
||||
|
||||
return languages;
|
||||
}
|
||||
|
||||
private static int defaultLanguageForRace(Race race) {
|
||||
switch (race) {
|
||||
case WOOKIEE_MALE:
|
||||
case WOOKIEE_FEMALE:
|
||||
return 5; // Wookiees speak Shyriiwook by default
|
||||
default:
|
||||
return 1; // Galactic basic
|
||||
}
|
||||
}
|
||||
|
||||
private static Location generateRandomLocation(ZoneInsertion info) {
|
||||
return Location.builder()
|
||||
.setTerrain(info.getTerrain())
|
||||
|
||||
@@ -24,7 +24,7 @@ public class ChatSpatialService extends Service {
|
||||
String senderName = sender.getCharacterFirstName();
|
||||
|
||||
// Send to self
|
||||
SpatialChat message = new SpatialChat(actor.getObjectId(), actor.getObjectId(), 0, spi.getMessage(), (short) spi.getChatType(), (short) 0);
|
||||
SpatialChat message = new SpatialChat(actor.getObjectId(), actor.getObjectId(), 0, spi.getMessage(), (short) spi.getChatType(), (short) 0, (byte) spi.getLanguageId());
|
||||
|
||||
// Notify observers of the chat message
|
||||
for (Player owner : actor.getObservers()) {
|
||||
|
||||
@@ -120,6 +120,7 @@ public class CommandExecutionService extends Service {
|
||||
registerCallback("broadcastPlanet", CmdBroadcastPlanet::new);
|
||||
registerCallback("planetChat", CmdPlanetChat::new);
|
||||
registerCallback("spatialChatInternal", CmdSpatialChatInternal::new);
|
||||
registerCallback("setSpokenLanguage", CmdSetSpokenLanguage::new);
|
||||
addChatFriendScripts();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user