Also ich habe dir nun deine gewünschte init.c angepasst.
Der Char bekommt nun als Start Gear:
- PrisonerCap
- PrisonUniformJacket
- PrisonUniformPants
- 6x Rags
- 1x RoadFlare
C: init.c
void main()
{
//INIT WEATHER BEFORE ECONOMY INIT------------------------
//All to set to null give always sunshine, no fog, and less clouds
Weather weather = g_Game.GetWeather();
weather.MissionWeather(false); // false = use weather controller from Weather.c
weather.GetOvercast().Set( Math.RandomFloatInclusive(0.4, 0.6), 1, 0);
weather.GetRain().Set( 0, 0, 1);
weather.GetFog().Set( Math.RandomFloatInclusive(0.05, 0.1), 1, 0);
//INIT ECONOMY--------------------------------------
Hive ce = CreateHive();
if ( ce )
{
ce.InitOffline();
}
//DATE RESET AFTER ECONOMY INIT-------------------------
int year;
int month;
int day;
int hour;
int minute;
GetGame().GetWorld().GetDate(year, month, day, hour, minute);
if (((month <= 2) && (day < 5)) || ((month >= 11) && (day > 20)))
{
month = 6;
day = 15;
GetGame().GetWorld().SetDate(year, month, day, hour, minute);
}
}
class CustomMission: MissionServer
{
void SetRandomHealth(EntityAI itemEnt)
{
if ( itemEnt )
{
int rndHlt = Math.RandomInt(55,100);
itemEnt.SetHealth("","",rndHlt);
}
}
override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
{
Entity playerEnt;
playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player
Class.CastTo(m_player, playerEnt);
GetGame().SelectPlayer(identity, m_player);
return m_player;
}
override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
{
//RemoveAllItems
player.RemoveAllItems();
//Give universal gear in inventory
ItemBase.Cast(player.GetInventory().CreateInInventory("PrisonerCap"));
ItemBase.Cast(player.GetInventory().CreateInInventory("PrisonUniformJacket"));
ItemBase.Cast(player.GetInventory().CreateInInventory("PrisonUniformPants"));
ItemBase.Cast(player.GetInventory().CreateInInventory("RoadFlare"));
ItemBase.Cast(player.GetInventory().CreateInInventory("Rag")).SetQuantity(6); //.SetQuantity(x) set the amount of rags
}
};
Mission CreateCustomMission(string path)
{
return new CustomMission();
}
Alles anzeigen
Zum Thema Coding:
Für die die sich nicht mit Coding auskennen eine kleine Erklärung.
- Kommentiert wird in C mit //kommentar für ein Zeilenkommentar und mit /* kommentar */ für ein zeilenübergreifendes Kommentar. Kommentare überspringt der Compiler und Code in Kommentaren wird nicht ausgeführt.
- Eine Funktion ist immer so aufgebaut: Rückgabetyp Funktionsname( Parameter1, Parameter2, ... ){ Code } oder Rückgabetyp Funktionsname( ){ Code }
- Eine Funktion wie zum Beispiel oben override void StartingEquipSetup(PlayerBase player, bool clothesChosen) muss immer eine offene geschweifte Klammer besitzen und am Ende eine geschlossene.
- Eine Funktion hat immer einen oder keinen Rückgabetyp. Wenn eine Funktion keinen Rückgabetyp bestitzt, wird sie mit void initialisert, siehe Zeile 60. Ein Rückgabetyp wäre z.B. in Zeile 74 Mission, deshalb wird auch in Zeile 76 return new CustomMission(); zurückgegeben.
- Override besagt, dass es bereits irgendwo eine Funktion mit demselben Namen gibt diese aber mit override überschrieben wird, sprich die Funktion mit override wird als aktuelle verwendet.
-
Intern in einer Funktion wird jede Zeile mit einem Semikolon abgeschlossen damit der Compiler weiß das die Code Zeile hier endet.
Ausnahmen sind z.B. if oder if else Anweisungen, z.B. Zeile 42-46. Dasselbe gilt für Schleifen, die sind hier im Bsp aber nicht vorhanden. - Aufrufe wie player.RemoveAllItems(); ist auch nichts anderes als ein Funktionsaufruf. Hier wird die Funktion RemoveAllItems() auf den Datentyp player angewendet.
- Eine Klasse wie z.B. oben class CustomMission: MissionServer muss ebenfalls eine offene und eine geschlossene geschweifte Klammer besitzen, jedoch am Ende der Klasse ein Semikolon, siehe Zeile 72.
So ich hoffe euch ist das alles ein wenig klarer geworden Falls ihr noch Fragen habt schießt los !