Merge branch 'master' of https://dev.sp-tarkov.com/SPT-AKI/Server into 3.8.0

This commit is contained in:
Dev 2023-11-05 12:39:20 +00:00
commit c7dfc5b9cf
4 changed files with 34 additions and 17 deletions

View File

@ -46,7 +46,7 @@
"bot-weapon_missing_mod_slot": "Slot: {{modSlot}}' does not exist for weapon: {{weaponId}} {{weaponName}} on {{botRole}}",
"bot-weapons_required_slot_missing_item": "Required slot '{{modSlot}}' on {{modName}} {{slotId}} was empty on {{botRole}}",
"bot-item_missing_props_property": "Item {{itemTpl}} {{name}} is missing a _props property",
"bot-unable_to_fill_camora_slot_mod_pool_empty": "Unable to fill weapon camora slot for {{weaponId}} {{weaponName}} mod pool for item was empty",
"bot-unable_to_fill_camora_slot_mod_pool_empty": "Unable to fill weapon camora slots for {{weaponId}} - {{weaponName}}. Mod pool for was empty, attempting to generate dynamically",
"bot-unable_to_edit_limits_of_unknown_map": "Unable to edit bot limits of map: %s as it cannot be found",
"bot-unable_to_find_loot_n_value_for_bot": "Unable to find loot N value for bot: %s, using scav n value instead",
"bot-unable_to_find_bot_in_cache": "Unable to find bot in cache with name: %s",
@ -428,6 +428,7 @@
"pmcresponse-victim_negative_98": "I bet you installed out of date mods and got loads of errors and wrote a huge hub post about it",
"pmcresponse-victim_negative_99": "Your computer so bad you get 20fps on streets",
"pmcresponse-victim_negative_100": "I bet you installed SAIN and had to remove it cuz you kept getting killed too much",
"pmcresponse-victim_negative_101": "What the HECK did you just HECKING say about me, you little Scav? Ill have you know I graduated top of my class in the USEC corps, and Ive been involved in numerous secret raids on the {{playerSide}}s, and I have over 300 confirmed kills. I am trained in gorilla warfare and Im the top sniper in the entire USEC armed forces. You are nothing to me but just another target. I will wipe you the HECK out with precision the likes of which has never been seen before in this raid, mark my HECKING words. You think you can get away with saying that shit to me over the messaging window? Think again, HECKER. As we speak I am contacting my secret network of spies across the Customs location and your stash is being traced right now so you better prepare for the storm, maggot. The storm that wipes out the pathetic little thing you call your life. Youre HECKING dead, Scav. I can be anywhere, anytime, and I can kill you in over seven hundred ways, and thats just with my bare hands. Not only am I extensively trained in unarmed combat, but I have access to the entire arsenal of the USEC Corps and I will use it to its full extent to wipe your miserable butt off the face of the map, you little poop. If only you could have known what unholy retribution your little “clever” kill was about to bring down upon you, maybe you would have held your HECKING tongue. But you couldnt, you didnt, and now youre paying the price, you HECKING idiot. I will POOP fury all over you and you will drown in it. Youre HECKING dead, Scav.",
"pmcresponse-victim_plead_1": "I was questing",
"pmcresponse-victim_plead_2": "I just wanted to finish a quest, whyd you kill me",
"pmcresponse-victim_plead_3": "Hope ur happy i can't even afford a new kit",

View File

@ -787,17 +787,25 @@ export class BotEquipmentModGenerator
* Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots.
* This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine"
* @param items The items where the CylinderMagazine's camora are appended to
* @param modPool modPool which should include available cartrigdes
* @param modPool modPool which should include available cartridges
* @param parentId The CylinderMagazine's UID
* @param parentTemplate The CylinderMagazine's template
*/
protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void
{
const itemModPool = modPool[parentTemplate._id];
let itemModPool = modPool[parentTemplate._id];
if (!itemModPool)
{
this.logger.error(this.localisationService.getText("bot-unable_to_fill_camora_slot_mod_pool_empty", {weaponId: parentTemplate._id, weaponName: parentTemplate._name}));
this.logger.warning(this.localisationService.getText("bot-unable_to_fill_camora_slot_mod_pool_empty", {weaponId: parentTemplate._id, weaponName: parentTemplate._name}));
const camoraSlots = parentTemplate._props.Slots.filter(x => x._name.startsWith("camora"));
// Attempt to generate camora slots for item
modPool[parentTemplate._id] = {};
for (const camora of camoraSlots)
{
modPool[parentTemplate._id][camora._name] = camora._props.filters[0].Filter;
}
itemModPool = modPool[parentTemplate._id];
}
let exhaustableModPool = null;
@ -843,10 +851,10 @@ export class BotEquipmentModGenerator
const modSlotId = slot._name;
const modId = this.hashUtil.generate();
items.push({
"_id": modId,
"_tpl": modTpl,
"parentId": parentId,
"slotId": modSlotId
_id: modId,
_tpl: modTpl,
parentId: parentId,
slotId: modSlotId
});
}
}

View File

@ -465,7 +465,8 @@ class ItemHelper
*/
public hasBuyRestrictions(itemToCheck: Item): boolean
{
if (itemToCheck.upd.BuyRestrictionCurrent !== undefined && itemToCheck.upd.BuyRestrictionMax !== undefined)
if (itemToCheck.upd?.BuyRestrictionCurrent !== undefined
&& itemToCheck.upd?.BuyRestrictionMax !== undefined)
{
return true;
}
@ -505,7 +506,13 @@ class ItemHelper
*/
public isItemTplStackable(tpl: string): boolean
{
return this.databaseServer.getTables().templates.items[tpl]._props.StackMaxSize > 1;
const item = this.databaseServer.getTables().templates.items[tpl];
if (!item)
{
return undefined;
}
return item._props.StackMaxSize > 1;
}
/**

View File

@ -60,19 +60,20 @@ export class PlayerService
*/
public calculateLevel(pmcData: IPmcData): number
{
let exp = 0;
let accExp = 0;
for (const level in this.databaseServer.getTables().globals.config.exp.level.exp_table)
for (const [level, { exp }] of this.databaseServer.getTables().globals.config.exp.level.exp_table.entries())
{
if (pmcData.Info.Experience < exp)
accExp += exp;
if (pmcData.Info.Experience < accExp)
{
break;
}
pmcData.Info.Level = parseInt(level);
exp += this.databaseServer.getTables().globals.config.exp.level.exp_table[level].exp;
pmcData.Info.Level = level + 1;
}
return pmcData.Info.Level;
}
}
}