public static AbstractPhysicalObject Orig_AbstractPhysicalObjectFromString(World world, string str) { // Generating a trampoline may cause a segfault apofsDetour.Undo(); AbstractPhysicalObject ret = SaveState.AbstractPhysicalObjectFromString(world, str); apofsDetour.Apply(); return(ret); }
public static void AddInventory(StoryGameSession self, AbstractCreature player) { foreach (AbstractCreature ac in self.Players) { if (ac == player && !Inventories.ContainsKey((ac.state as PlayerState).playerNumber)) { if (InventorySave != null && InventorySave != string.Empty) { List <AbstractPhysicalObject> content = new List <AbstractPhysicalObject>(); string[] arrayPlayers = Regex.Split(InventorySave, "<svC>"); for (int m = 0; m < arrayPlayers.Length; m++) { string[] arrayContent = Regex.Split(arrayPlayers[m], "<svD>"); if (int.Parse(arrayContent[0]) == (player.state as PlayerState).playerNumber) { for (int n = 1; n < arrayContent.Length; n++) { AbstractPhysicalObject apo = null; if (arrayContent[n].Contains("<oA>")) { apo = SaveState.AbstractPhysicalObjectFromString(self.game.world, arrayContent[n]); } else if (arrayContent[n].Contains("<cA>")) { apo = SaveState.AbstractCreatureFromString(self.game.world, arrayContent[n], false); } if (apo != null) { apo.pos = ac.pos; } content.Add(apo); } } } Inventories.Add((ac.state as PlayerState).playerNumber, content); } else { Inventories.Add((ac.state as PlayerState).playerNumber, new List <AbstractPhysicalObject>()); } } } }