Added racial languages #53

This commit is contained in:
Ziggy
2020-11-28 20:57:59 +01:00
parent ca58f2d7a2
commit ba77f3cb71
7 changed files with 148 additions and 13 deletions

View File

@@ -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;
}
}

View File

@@ -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));
}
}

View File

@@ -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();
}
}

View File

@@ -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())

View File

@@ -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()) {

View File

@@ -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();
}