public static Int32 oCNpc_EV_UseItem(String message) { try { Process process = Process.ThisProcess(); int address = Convert.ToInt32(message); int ItemMessage = process.ReadInt(address + 4); oCItem item = new oCItem(process, process.ReadInt(ItemMessage + 0x6C)); oCMsgManipulate manipulation = new oCMsgManipulate(process, ItemMessage); zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Item UseItem: " + item.Name + " " + manipulation.InstanceName, 0, "ItemSynchro.cs", 0); if (item.Address != 0 && item.ObjectName.Address != 0 && item.ObjectName.Value.Trim().Length != 0) { //for (int i = 0; i < 200; i++) //{ // int id = process.ReadInt(ItemMessage + i);//0x6C // zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item : " + i + " | :" + id, 0, "ItemSynchro.cs", 0); //} } } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0); } return(0); }
partial void addItemToContainer(Item item) { if (this.Address == 0) { return; } Process process = Process.ThisProcess(); oCItem it = null; if (item.Address == 0) { it = oCObjectFactory.GetFactory(process).CreateItem("ITGUC_" + item.ItemInstance.ID); } else { it = new oCItem(process, item.Address); } it.Amount = item.Amount; oCMobContainer mobContainer = new oCMobContainer(Process.ThisProcess(), Address); mobContainer.Insert(it); if (item.Address == 0) { item.Address = it.Address; sWorld.SpawnedVobDict.Add(item.Address, item); } }
public static Int32 InitByScript(String message) { try { Process process = Process.ThisProcess(); int address = Convert.ToInt32(message); itemaddr = process.ReadInt(address); int parserID = process.ReadInt(address + 4); int anz = process.ReadInt(address + 8); oCItem item = new oCItem(process, itemaddr); String itemname = zCParser.getParser(process).GetSymbol(parserID).Name.Value; if (itemname.Trim().ToUpper().StartsWith("ITGUC_".ToUpper())) { if (!ItemInstance.ItemInstanceDict.ContainsKey(Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length)))) { return(0); } ItemInstance sitem = (ItemInstance)ItemInstance.ItemInstanceDict[Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length))]; sitem.toItem(item); } } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', "Hook oCStartAnim_ModelAnim: " + ex.ToString(), 0, "Hooks.zCModelHook.cs", 0); } return(0); }
public static Int32 InitByScript_End(String message) { try { Process process = Process.ThisProcess(); oCItem item = new oCItem(process, itemaddr); String itemname = item.ObjectName.Value; if (itemname.Trim().ToUpper().StartsWith("ITGUC_".ToUpper())) { if (!ItemInstance.ItemInstanceDict.ContainsKey(Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length)))) { return(0); } ItemInstance sitem = (ItemInstance)ItemInstance.ItemInstanceDict[Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length))]; sitem.toItem(item); } } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', "Hook oCStartAnim_ModelAnim: " + ex.ToString(), 0, "Hooks.zCModelHook.cs", 0); } return(0); }
public override void Spawn(string map, Types.Vec3f position, Types.Vec3f direction) { this.Map = map; this.Position = position; this.Direction = direction; spawned = true; if (this.Address != 0) { return; } if (this.Map != Player.Hero.Map) { return; } Process process = Process.ThisProcess(); oCItem item = oCObjectFactory.GetFactory(process).CreateItem("ITGUC_" + this.ItemInstance.ID); item.Amount = this.Amount; oCGame.Game(process).World.AddVob(item); this.Address = item.Address; sWorld.SpawnedVobDict.Add(item.Address, this); this.setDirection(Direction); this.setPosition(Position); }
partial void pAfterEquip(NPCSlots slot, ItemInst item) { if (!this.IsSpawned) { return; } oCNpc gNpc = this.BaseInst.gVob; oCItem gItem = item.BaseInst.gVob; Gothic.Types.zString node; bool undraw = true; bool ininv = true; switch (slot) { case NPCSlots.OneHanded1: node = oCNpc.NPCNodes.Sword; break; case NPCSlots.TwoHanded: node = oCNpc.NPCNodes.Longsword; break; case NPCSlots.Ranged: node = item.ItemType == ItemTypes.WepBow ? oCNpc.NPCNodes.Bow : oCNpc.NPCNodes.Crossbow; break; case NPCSlots.Armor: node = oCNpc.NPCNodes.Torso; gItem.VisualChange.Set(item.Definition.VisualChange); break; case NPCSlots.RightHand: node = oCNpc.NPCNodes.RightHand; undraw = false; break; case NPCSlots.LeftHand: node = oCNpc.NPCNodes.LeftHand; undraw = false; break; default: return; } if (item.ModelDef.Visual.EndsWith(".ZEN")) { ininv = false; } gItem.Material = (int)item.Material; gNpc.PutInSlot(node, gItem, ininv); PlayDrawItemSound(item, undraw); }
public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client) { int itemID = 0, amount = 0; stream.Read(out itemID); stream.Read(out amount); if (itemID == 0 || !sWorld.VobDict.ContainsKey(itemID)) { throw new Exception("Vob not found!"); } Vob vob = sWorld.VobDict[itemID]; if (!(vob is Item)) { throw new Exception("Vob is not an Item!"); } Item item = (Item)vob; item.Amount = amount; zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Item-Change-Amount message!", 0, "Program.cs", 0); if (item.Address != 0) { Process process = Process.ThisProcess(); oCItem gI = new oCItem(process, item.Address); if (item.Amount <= 0) { if (item.Container is NPCProto) { new oCNpc(process, ((NPCProto)item.Container).Address).RemoveFromInv(gI, gI.Amount); } else if (item.Container is MobContainer) { new oCMobContainer(process, ((MobContainer)item.Container).Address).Remove(gI, gI.Amount); } else if (item.Container is World) { oCGame.Game(process).World.RemoveVob(gI); } } gI.Amount = item.Amount; } if (item.Amount <= 0) { sWorld.removeVob(item); } }
public static Int32 oCNpc_UnEquipItem(String message) { if (blockSendUnEquip) { blockSendUnEquip = false; return(0); } try { Process process = Process.ThisProcess(); int address = Convert.ToInt32(message); oCNpc npc = new oCNpc(process, process.ReadInt(address)); oCItem item = new oCItem(process, process.ReadInt(address + 4)); if (npc.Address != Player.Hero.Address) { return(0); } if (item.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(item.Address)) { return(0); } if (npc.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(npc.Address)) { return(0); } NPCProto npcP = (NPCProto)sWorld.SpawnedVobDict[npc.Address]; Item itemP = (Item)sWorld.SpawnedVobDict[item.Address]; npcP.EquippedList.Remove(itemP); BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.EquipItemMessage); stream.Write(npcP.ID); stream.Write(itemP.ID); stream.Write(false); Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "UnEquip Item : " + item.Name.Value, 0, "ItemSynchro.cs", 0); } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0); } return(0); }
public static Int32 ViewDraw_DrawChildren(String message) { try { Process process = Process.ThisProcess(); return(0); GUC.WorldObjects.Character.Player pl = GUC.WorldObjects.Character.Player.Hero; if (pl == null) { return(0); } if (pl.ItemList.Count == 0) { return(0); } if (pl.ItemList[0].Address == 0) { return(0); } if (oCGame.Game(process).World.Address == 0) { return(0); } if (rndrWorld == null) { rndrWorld = zCWorld.Create(process); rndrWorld.IsInventoryWorld = true; } oCItem item = new oCItem(process, pl.ItemList[0].Address); zCView zV = zCView.Create(Process.ThisProcess(), 0, 0, 0x2000, 0x2000); zV.FillZ = true; zV.Blit(); zCView.GetScreen(Process.ThisProcess()).InsertItem(zV, 0); item.RenderItem(rndrWorld, zV, 0.0f); zCView.GetScreen(Process.ThisProcess()).RemoveItem(zV); zV.Dispose(); } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', ex.ToString(), 0, "ViewDraw_DrawChildren", 0); } return(0); }
public override zCVob CreateVob(zCVob vob = null) { oCItem ret = (vob == null || !(vob is oCItem)) ? oCItem.Create() : (oCItem)vob; base.CreateVob(ret); // vob.CreateVob ret.Amount = 1; ret.Instance = this.ID; //ret.ItemVisual.Set(Visual); //ret.Name.Set(Name); //ret.Material = (int)Material; return(ret); }
public static Int32 oCNpc_UseItem(String message) { try { Process process = Process.ThisProcess(); int address = Convert.ToInt32(message); oCItem item = new oCItem(process, process.ReadInt(address + 4)); zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item : " + item.Name.Value, 0, "ItemSynchro.cs", 0); } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0); } return(0); }
public static Int32 DoTakeVob(String message) { try{ if (dontSend) { dontSend = false; return(0); } int address = Convert.ToInt32(message); Process process = Process.ThisProcess(); if (oCNpc.Player(process).Address == process.ReadInt(address)) { oCItem vob = new oCItem(process, process.ReadInt(address + 4)); if (!sWorld.SpawnedVobDict.ContainsKey(vob.Address)) { return(0); } Vob sWVob = sWorld.SpawnedVobDict[vob.Address]; if (!(sWVob is Item)) { return(0); } zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "TakeVob: " + sWVob.ID + ", " + vob.Address + " | " + sWVob.Address, 0, "Program.cs", 0); Item swItem = (Item)sWVob; Player.Hero.TakeItem(swItem); BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.TakeItemMessage); stream.Write(Player.Hero.ID); stream.Write(swItem.ID); Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); } } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Exception: " + ex.Message + " " + ex.StackTrace + " " + ex.Source, 0, "Program.cs", 0); } return(0); }
public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client) { int plID = 0, itemID = 0; stream.Read(out plID); stream.Read(out itemID); if (plID == 0 || !sWorld.VobDict.ContainsKey(plID)) { throw new Exception("Vob not found!"); } Vob vob = sWorld.VobDict[plID]; if (!(vob is NPCProto)) { throw new Exception("Vob is not an NPC!"); } if (itemID == 0 || !sWorld.VobDict.ContainsKey(itemID)) { throw new Exception("Item not found!"); } Vob item = sWorld.VobDict[itemID]; if (!(item is Item)) { throw new Exception("Vob is not an Item!"); } NPCProto proto = (NPCProto)vob; proto.DropItem((Item)item); if (vob.Address == 0 || item.Address == 0) { return; } Process process = Process.ThisProcess(); oCNpc npc = new oCNpc(process, vob.Address); oCItem it = new oCItem(process, item.Address); hNpc.dontSend = true; npc.DoDropVob(it); }
partial void addItemToContainer(Item item) { if (this.Address == 0) { return; } Process process = Process.ThisProcess(); oCItem it = oCObjectFactory.GetFactory(process).CreateItem("ITGUC_" + item.ItemInstance.ID); it.Amount = item.Amount; oCNpc npc = new oCNpc(Process.ThisProcess(), Address); npc.PutInInv(it); item.Address = it.Address; sWorld.SpawnedVobDict.Add(item.Address, item); }
partial void pBeforeUnequip(ItemInst item) { if (!this.IsSpawned) { return; } oCNpc gNpc = this.BaseInst.gVob; oCItem gItem = item.BaseInst.gVob; Gothic.Types.zString node; switch ((NPCSlots)item.BaseInst.Slot) { case NPCSlots.OneHanded1: node = oCNpc.NPCNodes.Sword; break; case NPCSlots.TwoHanded: node = oCNpc.NPCNodes.Longsword; break; case NPCSlots.Ranged: node = item.ItemType == ItemTypes.WepBow ? oCNpc.NPCNodes.Bow : oCNpc.NPCNodes.Crossbow; break; case NPCSlots.Armor: node = oCNpc.NPCNodes.Torso; break; case NPCSlots.RightHand: node = oCNpc.NPCNodes.RightHand; break; case NPCSlots.LeftHand: node = oCNpc.NPCNodes.LeftHand; break; default: return; } gNpc.RemoveFromSlot(node, false, true); }
public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client) { int playerID = 0; stream.Read(out playerID); if (playerID == 0 || !sWorld.VobDict.ContainsKey(playerID)) { throw new Exception("Vob not found! " + playerID); } Vob vob = sWorld.VobDict[playerID]; if (!(vob is NPCProto)) { throw new Exception("Vob is not an NPCProto! " + playerID); } NPCProto npc = (NPCProto)vob; if (npc.Address != 0) { foreach (Item item in npc.ItemList) { Process process = Process.ThisProcess(); oCItem gI = new oCItem(process, item.Address); oCNpc n = new oCNpc(process, npc.Address); hNpc.blockSendUnEquip = true; n.UnequipItem(gI); n.RemoveFromInv(gI, gI.Amount); gI.Amount = 0; } } foreach (Item item in npc.ItemList) { sWorld.removeVob(item); } npc.ItemList.Clear(); }
public static Int32 oCNpc_EV_UseItemToState(String message) { try { Process process = Process.ThisProcess(); int address = Convert.ToInt32(message); int ItemMessage = process.ReadInt(address + 4); oCNpc npc = new oCNpc(process, process.ReadInt(address)); oCItem item = new oCItem(process, process.ReadInt(ItemMessage + 0x6C)); oCMsgManipulate manipulation = new oCMsgManipulate(process, ItemMessage); UseItemNPC = npc; } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0); } return(0); }
public void setSlotItem(int slot, Item item) { //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Set Slot Item 1: " + Slots[slot] + "; NewItem: "+item + " ", 0, "NPCProto.Client.cs", 0); Item oldItem = Slots[slot]; Slots[slot] = item; //if (oldItem == item) // return; if (this.Address != 0) { Process process = Process.ThisProcess(); oCNpc npc = new oCNpc(process, this.Address); if (Slots[slot] == null || oldItem != null) { zString slotString = oCNpc.getSlotString(process, slot); oCItem oldITem = npc.GetSlotItem(slotString); if (oldITem.Address != 0) { npc.RemoveFromSlot(slotString, oldITem.Instanz, oldITem.Amount); } } if (Slots[slot] != null) { if (Slots[slot].Address == 0) { throw new Exception("Adress can't be null if player using it is spawned!"); } //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Set Slot Item: "+Slots[slot]+" "+Slots[slot].ItemInstance.Name, 0, "NPCProto.Client.cs", 0); npc.PutInSlot(oCNpc.getSlotString(process, slot), new oCItem(process, Slots[slot].Address), 1); } } }
public static Int32 oCItemContainer_Insert(String message) { try { Process process = Process.ThisProcess(); if (!ItemContainerBlocked && itemsUntilBlock == 0) { process.Write(new byte[] { 0x33, 0xC0, 0xC2, 0x04, 0x00 }, Program.insertItemToList.oldFuncInNewFunc.ToInt32()); ItemContainerBlocked = true; } else if (itemsUntilBlock != 0) { itemsUntilBlock -= 1; } int address = Convert.ToInt32(message); oCNpc player = oCNpc.Player(process); oCItemContainer oIC = new oCItemContainer(process, process.ReadInt(address)); oCItem item = new oCItem(process, process.ReadInt(address + 4)); oCMobContainer mC = new oCMobContainer(process, player.GetInteractMob().Address); if (!sWorld.SpawnedVobDict.ContainsKey(mC.Address)) { return(0); } Vob mobContainerVob = sWorld.SpawnedVobDict[mC.Address]; if (!(mobContainerVob is MobContainer)) { return(0); } MobContainer mobContainer = (MobContainer)mobContainerVob; if (!sWorld.SpawnedVobDict.ContainsKey(item.Address))//Multislot-Item { BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.ContainerItemChangedMessage); stream.Write((byte)ContainerItemChanged.itemInsertedNew); stream.Write(Player.Hero.ID); stream.Write(mobContainerVob.ID); stream.Write(ItemInstance.getIndex(item.ObjectName.Value.Trim())); Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); } else//Normal-Item: { //mobContainer.addItem((Item)sWorld.SpawnedVobDict[item.Address]); Item it = (Item)sWorld.SpawnedVobDict[item.Address]; BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.ContainerItemChangedMessage); stream.Write((byte)ContainerItemChanged.itemInsertedOld); stream.Write(Player.Hero.ID); stream.Write(mobContainerVob.ID); stream.Write(it.ID); Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); } zERROR.GetZErr(process).Report(2, 'G', "Insert Item, Item: " + sWorld.SpawnedVobDict.ContainsKey(process.ReadInt(address + 4)) + " | " + item.Address + " | " + item.ObjectName.Value + "| " + item.Name.Value + " | " + item.Visual.Value + " |" + " Amount: " + item.Amount, 0, "Itemsynchro.cs", 0); } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', ex.Source + ": " + ex.Message + " " + ex.StackTrace, 0, "hItemContainer.cs", 0); } return(0); }
public void toItem(oCItem item) { ItemInstanceParameters p = getParams(); //Setting up defaults: //item.VTBL = 8636420; //item.ObjectName.Set("ITGUC_" + ID); item.Name.Set(this.Name); if (p.HasFlag(ItemInstanceParameters.scemeName)) { item.ScemeName.Set(this.ScemeName); } for (int i = 0; i < 8; i++) { if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.protection0 << i))) { item.setProtection(i, Protection[i]); } } if (p.HasFlag(ItemInstanceParameters.damageType)) { item.DamageType = (int)DamageType; } if (p.HasFlag(ItemInstanceParameters.totalDamage)) { item.DamageTotal = TotalDamage; } for (int i = 0; i < 8; i++) { if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.damages0 << i))) { item.setDamage(i, Damages[i]); } } if (p.HasFlag(ItemInstanceParameters.range)) { item.Range = Range; } for (int i = 0; i < conditionAttributes.Length; i++) { if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.conditionAttributes0 << i))) { item.setConditionalAttribute(i, ConditionAttributes[i]); } } for (int i = 0; i < conditionValues.Length; i++) { if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.conditionValues0 << i))) { item.setConditionalValue(i, ConditionValues[i]); } } if (p.HasFlag(ItemInstanceParameters.value)) { item.Value = Value; } if (p.HasFlag(ItemInstanceParameters.mainFlags)) { item.MainFlag = (int)MainFlags; } if (p.HasFlag(ItemInstanceParameters.flags) || p.HasFlag(ItemInstanceParameters.mainFlags)) { item.Flags = (int)Flags | (int)MainFlags; } if (p.HasFlag(ItemInstanceParameters.wear)) { item.Wear = (int)Wear; } if (p.HasFlag(ItemInstanceParameters.materials)) { item.Material = (int)Materials; } if (p.HasFlag(ItemInstanceParameters.description)) { item.Description.Set(Description); } for (int i = 0; i < text.Length; i++) { if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.text0 << i))) { item.setText(i, Text[i]); } } for (int i = 0; i < count.Length; i++) { if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.count0 << i))) { item.setCount(i, Count[i]); } } if (p.HasFlag(ItemInstanceParameters.visual)) { item.Visual.Set(Visual.ToUpper()); } if (p.HasFlag(ItemInstanceParameters.visual_Change)) { item.VisualChange.Set(Visual_Change.Trim()); } if (p.HasFlag(ItemInstanceParameters.effect)) { item.Effect.Set(Effect.ToUpper().Trim()); } if (p.HasFlag(ItemInstanceParameters.visual_skin)) { item.VisualSkin = Visual_skin; } if (p.HasFlag(ItemInstanceParameters.munition)) { Process process = Process.ThisProcess(); item.Munition = zCParser.getParser(process).GetIndex("ITGUC_" + munition.ID);////item.Munition = //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Set munition: " + munition.ID + " | " + item.Munition + "||" + munition.Visual + " " + this.Visual, 0, "Program.cs", 0); } if (p.HasFlag(ItemInstanceParameters.Spell)) { item.Spell = Spell.ID; } item.CreateVisual(); }
public void Read(BitStream stream, Packet packet, Client client) { Vec3f locHit = null, flydir = null; int victim = 0, attacker = 0, weaponMode = 0, spellID = 0, weapon = 0; byte sendFlags, damageMode; stream.Read(out victim); stream.Read(out damageMode); stream.Read(out sendFlags); if ((sendFlags &= 1) == 1) { stream.Read(out locHit); } if ((sendFlags &= 2) == 2) { stream.Read(out flydir); } if ((sendFlags &= 4) == 4) { stream.Read(out attacker); } if ((sendFlags &= 8) == 8) { stream.Read(out weaponMode); } if ((sendFlags &= 16) == 16) { stream.Read(out spellID); } if ((sendFlags &= 32) == 32) { stream.Read(out weapon); } Process Process = Process.ThisProcess(); oCNpc victimNPC = null, attackerNPC = null; oCItem weaponItem = null; if (victim != 0) { victimNPC = new oCNpc(Process, sWorld.VobDict[victim].Address); } if (attacker != 0) { attackerNPC = new oCNpc(Process, sWorld.VobDict[attacker].Address); } if (weapon != 0) { weaponItem = new oCItem(Process, sWorld.VobDict[weapon].Address); } IntPtr ptr = Process.Alloc(500); byte[] arr = new byte[500]; Process.Write(arr, ptr.ToInt32()); oSDamageDescriptor oDD = new oSDamageDescriptor(Process, ptr.ToInt32()); oDD.AttackerNPC = attackerNPC; oDD.AttackerVob = attackerNPC; oDD.Weapon = weaponItem; oDD.ModeDamage = damageMode; oDD.ModeWeapon = weaponMode; victimNPC.OnDamage(oDD); Process.Free(ptr, 500); }
public static void Write(NPCProto proto) { if (proto.Address == 0) { return; } Process process = Process.ThisProcess(); oCNpc npc = new oCNpc(process, proto.Address); if (npc.AniCtrl.Address == 0) { return; } NPCChangedFlags changeFlags = 0; oCItem iArmor = npc.GetEquippedArmor(); Item armor = null; oCItem iWeapon = npc.GetEquippedMeleeWeapon(); Item weapon = null; oCItem iRangeWeapon = npc.GetEquippedRangedWeapon(); Item rangeWeapon = null; Vob focusVobID = null; NPCProto enemyVobID = null; MobInter MobInterID = null; int mobInterAddress = npc.GetInteractMob().Address; if (npc.FocusVob.Address != 0 && sWorld.SpawnedVobDict.ContainsKey(npc.FocusVob.Address)) { focusVobID = sWorld.SpawnedVobDict[npc.FocusVob.Address]; } if (npc.Enemy.Address != 0 && sWorld.SpawnedVobDict.ContainsKey(npc.Enemy.Address)) { enemyVobID = (NPCProto)sWorld.SpawnedVobDict[npc.Enemy.Address]; } if (mobInterAddress != 0 && sWorld.SpawnedVobDict.ContainsKey(mobInterAddress)) { MobInterID = (MobInter)sWorld.SpawnedVobDict[mobInterAddress]; } Item selectedSpell = null; if (npc.MagBook != null && npc.MagBook.Address != 0) { oCItem spellItem = npc.MagBook.GetSpellItem(npc.MagBook.GetSelectedSpellNr()); if (spellItem != null && spellItem.Address != 0) { Vob spellVob = null; sWorld.SpawnedVobDict.TryGetValue(spellItem.Address, out spellVob); selectedSpell = (Item)spellVob; } } if (iArmor.Address != 0) { armor = (Item)sWorld.SpawnedVobDict[iArmor.Address]; } if (iWeapon.Address != 0) { weapon = (Item)sWorld.SpawnedVobDict[iWeapon.Address]; } if (iRangeWeapon.Address != 0) { rangeWeapon = (Item)sWorld.SpawnedVobDict[iRangeWeapon.Address]; } int weaponMode = npc.WeaponMode; Item[] SlotItems = new Item[9]; for (int i = 0; i < SlotItems.Length; i++) { oCItem slItem = npc.GetSlotItem(oCNpc.getSlotString(process, i)); if (slItem.Address != 0 && sWorld.SpawnedVobDict.ContainsKey(slItem.Address)) { SlotItems[i] = (Item)sWorld.SpawnedVobDict[slItem.Address]; } } bool isdead = false; if (npc.IsDead() > 0) { isdead = true; } bool isUnconscious = false; if (npc.IsUnconscious() > 0) { isUnconscious = true; } bool isSwimming = false; if (npc.AniCtrl.GetWalkModeString() == null || npc.AniCtrl.GetWalkModeString().Trim().ToLower().Length == 0) { isSwimming = true; } zString str = npc.GetSectorNameVobIsIn(); String portalRoom = ""; if (str.Address != 0) { portalRoom = str.Value.Trim().ToLower(); } //Setting ChangeFlags: if (proto.Armor != armor) { changeFlags |= NPCChangedFlags.EQUIP_ARMOR; } if (proto.Weapon != weapon) { changeFlags |= NPCChangedFlags.EQUIP_NW; } if (proto.RangeWeapon != rangeWeapon) { changeFlags |= NPCChangedFlags.EQUIP_RW; } if (proto.WeaponMode != weaponMode) { changeFlags |= NPCChangedFlags.WeaponMode; } for (int i = 0; i < SlotItems.Length; i++) { if (proto.Slots[i] != SlotItems[i]) { changeFlags |= (NPCChangedFlags)((int)NPCChangedFlags.SLOT1 << i); } } if (proto.FocusVob != focusVobID) { changeFlags |= NPCChangedFlags.VOBFOCUS; } if (proto.Enemy != enemyVobID) { changeFlags |= NPCChangedFlags.ENEMYFOCUS; } if (proto.MobInter != MobInterID) { changeFlags |= NPCChangedFlags.MOBINTERACT; } if (proto.IsDead != isdead) { changeFlags |= NPCChangedFlags.ISDEAD; } if (proto.IsUnconcious != isUnconscious) { changeFlags |= NPCChangedFlags.ISUNCONSCIOUS; } if (proto.IsSwimming != isSwimming) { changeFlags |= NPCChangedFlags.ISSWIMMING; } if (!proto.PortalRoom.Equals(portalRoom)) { changeFlags |= NPCChangedFlags.PORTALROOM; } if (selectedSpell != proto.ActiveSpell) { changeFlags |= NPCChangedFlags.ACTIVE_SPELL; } if (changeFlags == 0) { return; } //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "ChangeFlags: " + changeFlags, 0, "Client.cs", 0); //Writing Data: BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.NPCUpdateMessage); stream.Write(proto.ID); stream.Write((int)changeFlags); //Equipment: if (changeFlags.HasFlag(NPCChangedFlags.EQUIP_ARMOR)) { proto.Armor = armor; if (proto.Armor == null) { stream.Write(0); } else { stream.Write(proto.Armor.ID); } } if (changeFlags.HasFlag(NPCChangedFlags.EQUIP_NW)) { proto.Weapon = weapon; if (proto.Weapon == null) { stream.Write(0); } else { stream.Write(proto.Weapon.ID); } } if (changeFlags.HasFlag(NPCChangedFlags.EQUIP_RW)) { proto.RangeWeapon = rangeWeapon; if (proto.RangeWeapon == null) { stream.Write(0); } else { stream.Write(proto.RangeWeapon.ID); } } if (changeFlags.HasFlag(NPCChangedFlags.WeaponMode)) { proto.WeaponMode = weaponMode; stream.Write(weaponMode); } for (int i = 0; i < SlotItems.Length; i++) { if (changeFlags.HasFlag((NPCChangedFlags)((int)NPCChangedFlags.SLOT1 << i))) { proto.Slots[i] = SlotItems[i]; if (SlotItems[i] == null) { stream.Write(0); } else { stream.Write(SlotItems[i].ID); } } } if (changeFlags.HasFlag(NPCChangedFlags.VOBFOCUS)) { proto.FocusVob = focusVobID; if (focusVobID == null) { stream.Write(0); } else { stream.Write(focusVobID.ID); } } if (changeFlags.HasFlag(NPCChangedFlags.ENEMYFOCUS)) { proto.Enemy = enemyVobID; if (enemyVobID == null) { stream.Write(0); } else { stream.Write(enemyVobID.ID); } } if (changeFlags.HasFlag(NPCChangedFlags.MOBINTERACT)) { proto.MobInter = MobInterID; if (MobInterID == null) { stream.Write(0); } else { stream.Write(MobInterID.ID); } } if (changeFlags.HasFlag(NPCChangedFlags.ISDEAD)) { proto.IsDead = isdead; stream.Write(proto.IsDead); } if (changeFlags.HasFlag(NPCChangedFlags.ISUNCONSCIOUS)) { proto.IsUnconcious = isUnconscious; stream.Write(proto.IsUnconcious); } if (changeFlags.HasFlag(NPCChangedFlags.ISSWIMMING)) { proto.IsSwimming = isSwimming; stream.Write(proto.IsSwimming); } if (changeFlags.HasFlag(NPCChangedFlags.PORTALROOM)) { proto.PortalRoom = portalRoom; stream.Write(proto.PortalRoom); } if (changeFlags.HasFlag(NPCChangedFlags.ACTIVE_SPELL)) { proto.ActiveSpell = selectedSpell; if (proto.ActiveSpell == null) { stream.Write(0); } else { stream.Write(proto.ActiveSpell.ID); } } zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Getted ChangeFlags: " + changeFlags, 0, "Client.cs", 0); Program.client.client.Send(stream, PacketPriority.MEDIUM_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); }
public static Int32 MagBook_Spell_Cast(String message) { try { Process process = Process.ThisProcess(); int address = Convert.ToInt32(message); oCMag_Book magBook = new oCMag_Book(process, process.ReadInt(address)); oCNpc player = oCNpc.Player(process); if (player.MagBook.Address != magBook.Address) { return(0); } //int spellID = player.GetActiveSpellNr(); oCSpell gSpell = magBook.GetSelectedSpell(); if (gSpell.Caster == null || gSpell.Caster.Address != player.Address) { return(0); } NPCProto caster = Player.Hero; Vob target = null; if (gSpell.Target != null && gSpell.Target.Address != 0) { sWorld.SpawnedVobDict.TryGetValue(gSpell.Target.Address, out target); } int castLevel = 0; Externals.npcProcessManaList.TryGetValue(player.Address, out castLevel); //Item: oCItem spellItem = magBook.GetSpellItem(magBook.GetSelectedSpellNr()); Vob spellI = null; sWorld.SpawnedVobDict.TryGetValue(spellItem.Address, out spellI); int itemID = 0; if (spellI != null && spellI is Item) { itemID = spellI.ID; } BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.CastSpell); stream.Write(itemID); stream.Write(caster.ID); if (target == null) { stream.Write(0); } else { stream.Write(target.ID); } stream.Write(gSpell.GetSpellID()); stream.Write(castLevel); Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', "Hook oCStartAnim_ModelAnim: " + ex.ToString(), 0, "Hooks.zCModelHook.cs", 0); } return(0); }
public static Int32 oCNpc_EV_UseItemToState_CALLFUNC(String message) { try { Process process = Process.ThisProcess(); //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value + " | " + UseItemNPC.InteractItemState + " | " + UseItemNPC.InteractItemTargetState + //": " + (UseItemNPC.Address != Player.Hero.Address) + " | " + (!sWorld.SpawnedVobDict.ContainsKey(UseItemNPC.InteractItem.Address))+ //" | " + (!sWorld.SpawnedVobDict.ContainsKey(UseItemNPC.Address)) + " | " + UseItemNPC.Address + " | " + Player.Hero.Address + " | " + UseItemNPC.InteractItem.Address, 0, "ItemSynchro.cs", 0); if (UseItemNPC.InteractItemState == -1 && UseItemNPC.InteractItemTargetState == 0) { UsedItem = UseItemNPC.InteractItem; } //bool start = (UseItemNPC.InteractItemState == -1 && UseItemNPC.InteractItemTargetState == 0); //bool end = (UseItemNPC.InteractItemState == 0 && UseItemNPC.InteractItemTargetState == -1); //if (!start && !end) // return 0; if (UsedItem == null) { UsedItem = UseItemNPC.InteractItem; } if (UseItemNPC.Address != Player.Hero.Address) { return(0); } if (UsedItem.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(UsedItem.Address)) { return(0); } if (UseItemNPC.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(UseItemNPC.Address)) { return(0); } NPCProto npcP = (NPCProto)sWorld.SpawnedVobDict[UseItemNPC.Address]; Item itemP = (Item)sWorld.SpawnedVobDict[UsedItem.Address]; BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.UseItemMessage); stream.Write(npcP.ID); stream.Write(itemP.ID); stream.Write((short)UseItemNPC.InteractItemState); stream.Write((short)UseItemNPC.InteractItemTargetState); Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem 2: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value + " | " + UseItemNPC.InteractItemState + " | " + UseItemNPC.InteractItemTargetState, 0, "ItemSynchro.cs", 0); //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value + " | " + UseItemNPC.InteractItemState+" | "+UseItemNPC.InteractItemTargetState, 0, "ItemSynchro.cs", 0); //if (UseItemNPC.InteractItemState == 1) //{ // zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem: "+UseItemNPC.ObjectName.Value+": "+UseItemNPC.InteractItem.Name.Value, 0, "ItemSynchro.cs", 0); //} //else if (UseItemNPC.InteractItemState == 2) //{ // zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "End-UseItem: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value, 0, "ItemSynchro.cs", 0); //} } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0); } return(0); }
public static Int32 oCItemContainer_Remove_2(String message) { try { int address = Convert.ToInt32(message); Process process = Process.ThisProcess(); oCNpc player = oCNpc.Player(process); oCNpc stealNPC = oCNpc.StealNPC(process); oCItemContainer oIC = new oCItemContainer(process, process.ReadInt(address)); oCItem item = new oCItem(process, process.ReadInt(address + 4)); int amount = process.ReadInt(address + 8); oCMobContainer mC = new oCMobContainer(process, player.GetInteractMob().Address); if (oIC.Address == mC.ItemContainer.Address && (item.Amount == amount || item.Amount - amount <= 0)) { mC.Remove(item); } else if ((oIC.Address == process.ReadInt(0x00AB27E0) || oIC.Address == process.ReadInt(0x00AB27DC)) && (item.Amount == amount || item.Amount - amount <= 0)) { oIC.Remove(item); zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Item stolen from npc!", 0, "hItemContainer.cs", 0); } else { item.Amount -= amount; } int containerID = 0; if (oIC.Address == mC.ItemContainer.Address) { if (!sWorld.SpawnedVobDict.ContainsKey(mC.Address)) { return(0); } Vob mobContainerVob = sWorld.SpawnedVobDict[mC.Address]; if (!(mobContainerVob is MobContainer)) { return(0); } MobContainer mobContainer = (MobContainer)mobContainerVob; containerID = mobContainer.ID; } else if (oIC.Address == process.ReadInt(0x00AB27E0) || oIC.Address == process.ReadInt(0x00AB27DC)) { if (!sWorld.SpawnedVobDict.ContainsKey(stealNPC.Address)) { return(0); } Vob sVob = sWorld.SpawnedVobDict[stealNPC.Address]; if (!(sVob is NPCProto)) { return(0); } NPCProto npc = (NPCProto)sVob; containerID = npc.ID; } if (!sWorld.SpawnedVobDict.ContainsKey(item.Address)) { return(0); } Item it = (Item)sWorld.SpawnedVobDict[item.Address]; BitStream stream = Program.client.sentBitStream; stream.Reset(); stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM); stream.Write((byte)NetworkID.ContainerItemChangedMessage); stream.Write((byte)ContainerItemChanged.itemRemoved); stream.Write(Player.Hero.ID); stream.Write(containerID); stream.Write(it.ID); stream.Write(amount); Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); //stream.Write(item.ID); //stream.Write(amount); //Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true); zERROR.GetZErr(process).Report(2, 'G', "Removed Item, Item: " + item.ObjectName.Value + " Found: " + sWorld.SpawnedVobDict.ContainsKey(item.Address) + " Amount: " + amount, 0, "Itemsynchro.cs", 0); } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', ex.Source + ": " + ex.Message + " " + ex.StackTrace, 0, "hItemContainer.cs", 0); } return(0); }
public static Int32 hook_Render_SaveMode(String message) { Process process = Process.ThisProcess(); try { InputHooked.Update(process); if (InputHooked.IsPressed((int)DIK_Keys.DIK_O)) { InputHooked.receivers.Add(new Keytest()); //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', new oCMobLockable(process, oCNpc.Player(process).FocusVob.Address).keyInstance.Value + ";" + new oCMobLockable(process, oCNpc.Player(process).FocusVob.Address).PickLockStr.Value, 0, "Program.cs", 0); //new oCMobInter(process, oCNpc.Player(process).FocusVob.Address).StartInteraction(oCNpc.Player(process)); //oCGame.Game(process).DiveBar.SetPos(-0x2000, -0x2000); first = false; } if (InputHooked.IsPressed((int)VirtualKeys.F1) && !saveItemInstances) { StringBuilder sb = new StringBuilder(); zCArray <zCPar_Symbol> symbolArray = zCParser.getParser(process).Table; int len = symbolArray.Size; //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Symbols: " + len, 0, "Program.cs", 0); for (int i = 0; i < len; i++) { zCPar_Symbol symbol = symbolArray.get(i); String symbolName = symbol.Name.Value.Trim().ToUpper(); //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Symbol found: "+symbolName+" | "+symbol.Offset, 0, "Program.cs", 0); if (symbolName.StartsWith("IT")) { oCItem item = oCObjectFactory.GetFactory(process).CreateItem(symbolName); if (item.Address == 0 || item.VobType != zCVob.VobTypes.Item || item.Visual.Value.Trim().Length == 0) { continue; } String muni = null; if (item.Munition != 0) { oCItem munit = oCObjectFactory.GetFactory(process).CreateItem(item.Munition); muni = munit.ObjectName.Value.Trim().ToUpper(); } sb.Append("new ItemInstance("); //DamageType dmgType, int totalDamage, int range, sb.Append("\"" + symbolName + "\", "); sb.Append("\"" + item.Name + "\", "); sb.Append("\"" + item.ScemeName + "\", "); sb.Append("new int[]{" + item.Protection[0] + ", " + item.Protection[1] + ", " + item.Protection[2] + ", " + item.Protection[3] + ", " + item.Protection[4] + ", " + item.Protection[5] + ", " + item.Protection[6] + ", " + item.Protection[7] + "},"); sb.Append("new int[]{" + item.Damage[0] + ", " + item.Damage[1] + ", " + item.Damage[2] + ", " + item.Damage[3] + ", " + item.Damage[4] + ", " + item.Damage[5] + ", " + item.Damage[6] + ", " + item.Damage[7] + "},"); sb.Append(item.Value + ", "); sb.Append("(MainFlags)(" + item.MainFlag + "), "); sb.Append("(Flags)(" + item.Flags + "), "); sb.Append("(ArmorFlags)(" + item.Wear + "), "); sb.Append("(DamageType)(" + item.DamageType + "), "); sb.Append(item.DamageTotal + ", "); sb.Append(item.Range + ", "); sb.Append("\"" + item.Visual.Value.Trim() + "\", "); sb.Append("\"" + item.VisualChange.Value.Trim() + "\", "); sb.Append("\"" + item.Effect.Value.Trim() + "\", "); sb.Append(item.VisualSkin + ", "); sb.Append("(MaterialTypes)(" + item.Material + "), "); if (muni != null) { sb.Append("ItemInstance.getItemInstance(\"" + muni + "\") "); } else { sb.Append("null"); } sb.Append(");\r\n"); } } File.WriteAllText("cinstances.cs", sb.ToString()); saveItemInstances = true; } if (InputHooked.IsPressed((int)VirtualKeys.F2) && !saveMapVobs) { StringBuilder sb = new StringBuilder(); sb.AppendLine("MobInter mi = null;"); sb.AppendLine("String mapName = @\"" + oCGame.Game(process).World.WorldFileName.Value.Trim() + "\";"); Dictionary <zCVob.VobTypes, List <zCVob> > vobDict = oCGame.Game(process).World.getVobLists(zCVob.VobTypes.MobInter, zCVob.VobTypes.MobBed, zCVob.VobTypes.MobSwitch, zCVob.VobTypes.MobDoor, zCVob.VobTypes.MobContainer); foreach (KeyValuePair <zCVob.VobTypes, List <zCVob> > vobList in vobDict) { foreach (zCVob vob in vobList.Value) { if (!VobVisual.ContainsKey(vob.Address)) { sb.Append("//"); } if (vob.VobType == zCVob.VobTypes.MobInter || vob.VobType == zCVob.VobTypes.MobBed || vob.VobType == zCVob.VobTypes.MobSwitch) { oCMobInter mi = new oCMobInter(process, vob.Address); if (vob.VobType == zCVob.VobTypes.MobInter) { sb.Append("mi = new MobInter("); } else if (vob.VobType == zCVob.VobTypes.MobBed) { sb.Append("mi = new MobBed("); } else if (vob.VobType == zCVob.VobTypes.MobSwitch) { sb.Append("mi = new MobSwitch("); } if (VobVisual.ContainsKey(vob.Address)) { sb.Append("\"" + VobVisual[vob.Address] + "\", "); } else { sb.Append("\"\", "); } sb.Append("\"" + mi.Name.Value.Trim() + "\", "); //sb.Append("" + mi.Rewind.ToString().ToLower() + ", "); //sb.Append("" + mi.StateNum + ", "); if (mi.UseWithItem.Address != 0 && mi.UseWithItem.getCheckedValue() != null) { sb.Append("ItemInstance.getItemInstance(\"" + mi.UseWithItem.Value.Trim().ToUpper() + "\"), "); } else { sb.Append("null, "); } if (mi.TriggerTarget.Address != 0 && mi.TriggerTarget.getCheckedValue() != null) { sb.Append("\"" + mi.TriggerTarget.Value.Trim() + "\", "); } else { sb.Append("null, "); } sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionDynamic) == (int)zCVob.BitFlag0.collDetectionDynamic).ToString().ToLower() + ", "); sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionStatic) == (int)zCVob.BitFlag0.collDetectionStatic).ToString().ToLower() + "); \r\n"); } if (vob.VobType == zCVob.VobTypes.MobDoor) { oCMobDoor mi = new oCMobDoor(process, vob.Address); sb.Append("mi = new MobDoor("); if (VobVisual.ContainsKey(vob.Address)) { sb.Append("\"" + VobVisual[vob.Address] + "\", "); } else { sb.Append("\"\", "); } sb.Append("\"" + mi.Name.Value.Trim() + "\", "); sb.Append("" + mi.isLocked.ToString().ToLower() + ", "); if (mi.keyInstance.Address != 0 && mi.keyInstance.getCheckedValue() != null) { sb.Append("ItemInstance.getItemInstance(\"" + mi.keyInstance.Value.Trim().ToUpper() + "\"), "); } else { sb.Append("null, "); } if (mi.PickLockStr.Address != 0 && mi.PickLockStr.getCheckedValue() != null) { sb.Append("\"" + mi.PickLockStr.Value.Trim() + "\", "); } else { sb.Append("null, "); } if (mi.UseWithItem.Address != 0 && mi.UseWithItem.getCheckedValue() != null) { sb.Append("ItemInstance.getItemInstance(\"" + mi.UseWithItem.Value.Trim().ToUpper() + "\"), "); } else { sb.Append("null, "); } if (mi.TriggerTarget.Address != 0 && mi.TriggerTarget.getCheckedValue() != null) { sb.Append("\"" + mi.TriggerTarget.Value.Trim() + "\", "); } else { sb.Append("null, "); } sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionDynamic) == (int)zCVob.BitFlag0.collDetectionDynamic).ToString().ToLower() + ", "); sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionStatic) == (int)zCVob.BitFlag0.collDetectionStatic).ToString().ToLower() + "); \r\n"); } if (vob.VobType == zCVob.VobTypes.MobContainer) { oCMobContainer mi = new oCMobContainer(process, vob.Address); sb.Append("mi = new MobContainer("); if (VobVisual.ContainsKey(vob.Address)) { sb.Append("\"" + VobVisual[vob.Address] + "\", "); } else { sb.Append("\"\", "); } sb.Append("\"" + mi.Name.Value.Trim() + "\", "); //ItemLists: sb.Append("new ItemInstance[]{"); List <oCItem> itemList = mi.getItemList(); for (int i = 0; i < itemList.Count; i++) { oCItem item = itemList[i]; sb.Append("ItemInstance.getItemInstance(\"" + item.ObjectName.Value.Trim().ToUpper() + "\")"); if (i + 1 < itemList.Count) { sb.Append(", "); } } sb.Append("},"); sb.Append("new int[]{"); for (int i = 0; i < itemList.Count; i++) { oCItem item = itemList[i]; sb.Append("" + item.Amount); if (i + 1 < itemList.Count) { sb.Append(", "); } } sb.Append("},"); sb.Append("" + mi.isLocked.ToString().ToLower() + ", "); if (mi.keyInstance.Address != 0 && mi.keyInstance.getCheckedValue() != null) { sb.Append("ItemInstance.getItemInstance(\"" + mi.keyInstance.Value.Trim().ToUpper() + "\"), "); } else { sb.Append("null, "); } if (mi.PickLockStr.Address != 0 && mi.PickLockStr.getCheckedValue() != null) { sb.Append("\"" + mi.PickLockStr.Value.Trim() + "\", "); } else { sb.Append("null, "); } if (mi.UseWithItem.Address != 0 && mi.UseWithItem.getCheckedValue() != null) { sb.Append("ItemInstance.getItemInstance(\"" + mi.UseWithItem.Value.Trim().ToUpper() + "\"), "); } else { sb.Append("null, "); } if (mi.TriggerTarget.Address != 0 && mi.TriggerTarget.getCheckedValue() != null) { sb.Append("\"" + mi.TriggerTarget.Value.Trim() + "\", "); } else { sb.Append("null, "); } sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionDynamic) == (int)zCVob.BitFlag0.collDetectionDynamic).ToString().ToLower() + ", "); sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionStatic) == (int)zCVob.BitFlag0.collDetectionStatic).ToString().ToLower() + "); \r\n"); } sb.Append("mi.Spawn(mapName, new Vec3f("); sb.Append(vob.TrafoObjToWorld.getPosition()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[2].ToString().Replace(",", ".") + "f), new Vec3f("); sb.Append(vob.TrafoObjToWorld.getDirection()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[2].ToString().Replace(",", ".") + "f));\r\n\r\n"); } } File.WriteAllText("cVobs.cs", sb.ToString()); saveMapVobs = true; } if (InputHooked.IsPressed((int)VirtualKeys.F3) && !saveMapItems) { StringBuilder sb = new StringBuilder(); sb.AppendLine("Item mi = null;"); sb.AppendLine("String mapName = @\"" + oCGame.Game(process).World.WorldFileName.Value.Trim() + "\";"); Dictionary <zCVob.VobTypes, List <zCVob> > vobDict = oCGame.Game(process).World.getVobLists(zCVob.VobTypes.Item); foreach (KeyValuePair <zCVob.VobTypes, List <zCVob> > vobList in vobDict) { foreach (zCVob vob in vobList.Value) { if (vob.VobType == zCVob.VobTypes.Item) { oCItem mi = new oCItem(process, vob.Address); sb.Append("mi = new Item("); sb.Append("ItemInstance.getItemInstance(\"" + mi.ObjectName.Value.Trim().ToUpper() + "\"), "); sb.Append("" + mi.Amount + ");\r\n"); } sb.Append("mi.Spawn(mapName, new Vec3f("); sb.Append(vob.TrafoObjToWorld.getPosition()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[2].ToString().Replace(",", ".") + "f), new Vec3f("); sb.Append(vob.TrafoObjToWorld.getDirection()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[2].ToString().Replace(",", ".") + "f));\r\n\r\n"); } } File.WriteAllText("cItems.cs", sb.ToString()); saveMapItems = true; } } catch (Exception ex) { zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', ex.ToString(), 0, "Program.cs", 0); } return(0); }