====== SPAWN DE PERSONAJE CON ROPA ESPECIAL SEGUN EL JUGADOR ====== - En el archivo init.c de la misión se programa una clase de tipo MissionServer. - La primera vez se autogenera una carpeta SpawnLoadout dentro de la carpeta de Profiles del servidor. - En esa carpeta SpawnLoadout se autogeneran 2 archivos (Regular.txt y CommonItems.txt) más una subcarpeta Donators. - El archivo Regular.txt contiene los items para los personajes comunes. - El archivo CommonItems.txt contiene los items comunes para todos los personajes. - Los archivos de la carpeta Donators se identifican con el número SteamId de cada jugador. **Ejemplo de la estructura de carpetas y archivos** G:\SERVER_PATAGONIA\PROFILES\SPAWNLOADOUT │ CommonItems.txt │ Regular.txt │ └───Donators 76561198031630167.txt 76561198182095246.txt **Ejemplo de archivo Regular.txt** // REGULAR ITEMS GUXLARLAND_PATAGONIA_Jacket GUXLARLAND_PATAGONIA_Pants HikingBoots_Black WoolGloves_Green RadarCap_Green **Ejemplo de archivo CommonItems.txt** // COMMON ITEMS BandageDressing 4 KitchenKnife Matchbox Chemlight_White WaterBottle TunaCan TunaCan MKII Mag_MKII_10Rnd **Ejemplo de archivo para el jugador especial 76561198182095246.txt** // 76561198182095246 guxlar admin user SheriffJacket SheriffPants HikingBoots_Black WoolGloves_Black SheriffHat ChestHolster Mag_Glock_15Rnd Glock19 AviatorGlasses StunBaton **EJEMPLO DE ARCHIVO DE MISION init.c** void main() { Weather weather = g_Game.GetWeather(); weather.MissionWeather(false); Hive ce = CreateHive(); if ( ce ) ce.InitOffline(); } // SPAWN LOADOUT class CustomMission: MissionServer { string m_SpawnLoadoutDirectory = "$profile:SpawnLoadout/"; string m_DonatorDirectory = m_SpawnLoadoutDirectory + "Donators/"; string m_RegularLoadout = m_SpawnLoadoutDirectory + "Regular.txt"; string m_CommonItems = m_SpawnLoadoutDirectory + "CommonItems.txt";regular and donator void CustomMission() { FileHandle templateFile; PrintString("[CustomMission] CustomMission"); PrintString("[CustomMission] SpawnLoadoutDirectory: " + m_SpawnLoadoutDirectory); PrintString("[CustomMission] DonatorDirectory: " + m_DonatorDirectory); PrintString("[CustomMission] RegularLoadout: " + m_RegularLoadout); PrintString("[CustomMission] CommonItems: " + m_CommonItems); if (!FileExist(m_SpawnLoadoutDirectory)) { PrintString("[CustomMission] Spawn loadout folder does not exist: " + m_SpawnLoadoutDirectory); PrintString("[CustomMission] Making directory: " + m_SpawnLoadoutDirectory); MakeDirectory(m_SpawnLoadoutDirectory); PrintString("[CustomMission] Directory made: " + m_SpawnLoadoutDirectory); // create default CommonItems.txt PrintString("[CustomMission] Creating file: " + m_CommonItems); templateFile = OpenFile(m_CommonItems, FileMode.WRITE); FPrintln(templateFile, "// COMMON ITEMS\nBandageDressing 4\nHuntingKnife\nMatchbox\nHatchet\nFlashlight\nBattery9V\nSodaCan_Cola\nBakedBeansCan"); CloseFile(templateFile); PrintString("[CustomMission] File created: " + m_CommonItems); // create default Regular.txt PrintString("[CustomMission] Creating file: " + m_RegularLoadout); templateFile = OpenFile(m_RegularLoadout, FileMode.WRITE); FPrintln(templateFile, "// REGULAR ITEMS\nBomberJacket_Grey\nJeans_Grey\nTaloonBag_Blue\nAthleticShoes_Grey"); CloseFile(templateFile); PrintString("[CustomMission] File created: " + m_RegularLoadout); } if (!FileExist(m_DonatorDirectory)) { PrintString("[CustomMission] Donator folder does not exist: " + m_DonatorDirectory); string template = GetDonatorFile("STEAMIDHERE.txt"); PrintString("[CustomMission] Making directory: " + m_DonatorDirectory); MakeDirectory(m_DonatorDirectory); PrintString("[CustomMission] Directory made: " + m_DonatorDirectory); // create template donator file PrintString("[CustomMission] Creating template donator file... "); templateFile = OpenFile(template, FileMode.WRITE); FPrintln(templateFile, "// STEAMIDNUMBER\nBomberJacket_Black\nJeans_Black\nTaloonBag_Black\nAthleticShoes_Black"); CloseFile(templateFile); PrintString("[CustomMission] Template donator file created"); } } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { PrintString("[StartingEquipSetup] StartingEquipSetup... "); player.RemoveAllItems(); // clear all default spawning items FileHandle donatorFile; string line; TStringArray contents = new TStringArray(); string file = GetDonatorFile(player.GetIdentity().GetPlainId()); if (FileExist(file)) { PrintString("[StartingEquipSetup] Donator file exists: " + file); SpawnLoadout(player, ReadFileLines(file)); // spawn donator loadout return; } PrintString("[StartingEquipSetup] Inexistent donator file: " + file); SpawnLoadout(player, ReadFileLines(m_RegularLoadout)); // spawn regular player loadout } private void SpawnLoadout(PlayerBase player, ref TStringArray loadout) { PrintString("[SpawnLoadout] SpawnLoadout."); FileHandle loadoutFile; string line; // creates clothes loadout PrintString("[SpawnLoadout] Creating clothes loadout"); foreach (string clothes : loadout) { PrintString("[SpawnLoadout] Clothes: " + clothes); player.GetInventory().CreateInInventory(clothes); } // creates common items PrintString("[SpawnLoadout] Reading the common items: " + m_CommonItems); TStringArray items = ReadFileLines(m_CommonItems); foreach (string item : items) { PrintString("[SpawnLoadout] Item: " + item); if (!item.Contains("//")) // check for commented lines { player.GetInventory().CreateInInventory(item); } } } private void CreateQuantityItem(PlayerBase player, string item) { PrintString("[CreateQuantityItem] CreateQuantityItem: " + item); TStringArray quantity = new TStringArray(); item.Split(" ", quantity); ItemBase quantityItem = player.GetInventory().CreateInInventory(quantity[0]); quantityItem.SetQuantity(quantity[1].ToFloat()); } private string GetDonatorFile(string id) { PrintString("[GetDonatorFile] GetDonatorFile: " + m_DonatorDirectory + id + ".txt"); return string.Format("%1%2.txt", m_DonatorDirectory, id); } private TStringArray ReadFileLines(string path) { PrintString("[ReadFileLines] ReadFileLines: " + path); FileHandle file; string line; TStringArray contents = new TStringArray(); file = OpenFile(path, FileMode.READ); while (FGets(file, line) > 0) { line.Trim(); PrintString("[ReadFileLines] Line: " + line); if (line != string.Empty) { contents.Insert(line); line = string.Empty; } } CloseFile(file); return contents; } }; Mission CreateCustomMission(string path) { return new CustomMission(); }