Herramientas de usuario

Herramientas del sitio


spawnloadouts

¡Esta es una revisión vieja del documento!


SPAWN DE PERSONAJE CON ROPA ESPECIAL SEGUN EL JUGADOR

  1. En el archivo init.c de la misión se programa una clase de tipo MissionServer.
  2. La primera vez se autogenera una carpeta SpawnLoadout dentro de la carpeta de Profiles del servidor.
  3. En esa carpeta SpawnLoadout se autogeneran 2 archivos (Regular.txt y CommonItems.txt) más una subcarpeta Donators.
  4. El archivo Regular.txt contiene los items para los personajes comunes.
  5. El archivo CommonItems.txt contiene los items comunes para todos los personajes.
  6. 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()
{
	//INIT WEATHER BEFORE ECONOMY INIT------------------------
    Weather weather = g_Game.GetWeather();
    weather.MissionWeather(false);    // false = use weather controller from Weather.c
	
	
	//INIT ECONOMY--------------------------------------
	Hive ce = CreateHive();
	if ( ce )
		ce.InitOffline();

//GetCEApi().ExportProxyData("6400 0 6400", 12000);	// standard map groups (buildings) export, terrain center and radius needs to be specified
//GetCEApi().ExportClusterData();						// cluster-type map groups export (fruit trees etc.)
	
}


// DONATORS SPAWN LOADOUT
// How It Works:
// SpawnLoadout/Regular.txt → Default loadout for regular players.
// SpawnLoadout/Donators/76561198012345678.txt → Donator-specific loadout (replace with actual SteamID).
// SpawnLoadout/CommonItems.txt → Items given to all players (e.g., rags, knife, food).
class CustomMission: MissionServer
{
    string m_SpawnLoadoutDirectory = "$profile:SpawnLoadout/"; // root directory for SpawnLoadout
    string m_DonatorDirectory = m_SpawnLoadoutDirectory + "Donators/"; // directory for donator loadout text files

    string m_RegularLoadout = m_SpawnLoadoutDirectory + "Regular.txt"; // file for regular loadout
    string m_CommonItems = m_SpawnLoadoutDirectory + "CommonItems.txt"; // file for in common items for both 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();
}
spawnloadouts.1773920520.txt.gz · Última modificación: por adminwiki

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki