Side Note: I have made these NPC's to require alot less materials needed to aquire the Vouchers needed for the House Permit and the Upgrade Certificate.
Update: Updated Stoneman to allow the use of ALL Rates of Copper Ore...Code in Green is the fix...thanks goes to -impulse- for this fix, it is his code. Also thanks goes to pro4never, for helping me to understand what the code does and how it works. I learned something new from both of them. Thanks.
Copy and paste all 4 codes into the NPCDialog.cs file
Code for Stoneman:
Code:
#region Stoneman case 30160: { if (Control == 0) { GC.AddSend(Packets.NPCSay("I am issuing all kinds of vouchers. What vouchers do you want?")); GC.AddSend(Packets.NPCLink("Copper Ore Voucher.", 1)); GC.AddSend(Packets.NPCLink("Ore Voucher", 2)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); GC.Agreed = false; } else if (Control == 1) { GC.AddSend(Packets.NPCSay("To obtain a 10 Copper Ore Voucher, 12 Copper Ores will be charged. Are you ready for that?")); GC.AddSend(Packets.NPCLink("Yeah. Here you are.", 3)); GC.AddSend(Packets.NPCLink("No. I shall come later.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } [COLOR="Green"]else if (Control == 3) { byte[] contains = new byte[10]; byte totalcount = 0; byte othercount = 0; byte count = 0; while (count != 10) { contains[count] += GC.MyChar.InventoryItemIDCount((uint)(1072020 + count)); totalcount += GC.MyChar.InventoryItemIDCount((uint)(1072020 + count)); count++; } if (totalcount >= 12) { count = 0; while (count != 10 && othercount != 12) { while (contains[count] != 0 && othercount != 12) { GC.MyChar.RemoveItem(GC.MyChar.NextItem((uint)(1072020 + count))); othercount++; contains[count]--; } count++; } for (int i = 0; i < 10; i++) GC.MyChar.AddItem(721175); GC.AddSend(Packets.NPCSay("Congragulation you have 10 Copper Ore Voucher for 12 Any Rate Copper Ores.")); GC.AddSend(Packets.NPCLink("OK Thx", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else { GC.AddSend(Packets.NPCSay("Sorry you dont have 12 Any Rate Copper Ores.")); GC.AddSend(Packets.NPCLink("OK i see.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } }[/COLOR] else if (Control == 2) { GC.AddSend(Packets.NPCSay("To obtain 5 Ore Voucher, 10 Copper Ore Vouchers will be charged. Are you ready for that?")); GC.AddSend(Packets.NPCLink("Yeah. Here you are.", 4)); GC.AddSend(Packets.NPCLink("No. I shall come later.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 4) { if (GC.MyChar.InventoryContains(721175, 10)) { for (int i = 0; i < 10; i++) GC.MyChar.RemoveItem(GC.MyChar.NextItem(721175)); for (int i = 0; i < 5; i++) GC.MyChar.AddItem(721176); GC.AddSend(Packets.NPCSay("Congragulation you have 5 Ore Voucher for 10 Copper Ore Vouchers.")); GC.AddSend(Packets.NPCLink("OK Thx", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else { GC.AddSend(Packets.NPCSay("Sorry you dont have 10 Copper Ore Vouchers.")); GC.AddSend(Packets.NPCLink("OK i see.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } } break; } #endregion
Code:
public bool InventoryContains(uint ID, byte Count) { byte _Count = 0; for (int i = 0; i < Inventory.Count; i++) if (((Item)Inventory[i]).ID == ID) _Count++; return _Count >= Count; }
Code:
[COLOR="Green"]public byte InventoryItemIDCount(uint ID) { byte _Count = 0; for (int i = 0; i < Inventory.Count; i++) if (((Item)Inventory[i]).ID == ID) _Count++; return _Count; }[/COLOR]
Code:
#region Carpenter case 30162: { if (Control == 0) { GC.AddSend(Packets.NPCSay("I am here to issue all kinds of vouchers. Are you here for the Vouchers?")); GC.AddSend(Packets.NPCLink("Yeah.", 1)); GC.AddSend(Packets.NPCLink("Just passing by.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); GC.Agreed = false; } else if (Control == 1) { GC.AddSend(Packets.NPCSay("I can issue a 10 Rosewood Voucher for 10 pieces of Timber, and 10 Timber Voucher for 10 Rosewood Vouchers. What do you need?")); GC.AddSend(Packets.NPCLink("Rosewood Voucher.", 2)); GC.AddSend(Packets.NPCLink("Timber Voucher.", 3)); GC.AddSend(Packets.NPCLink("I changed my mind.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 2) { if (GC.MyChar.InventoryContains(721171, 10)) { for (int i = 0; i < 10; i++) GC.MyChar.RemoveItem(GC.MyChar.NextItem(721171)); for (int i = 0; i < 10; i++) GC.MyChar.AddItem(721172); GC.AddSend(Packets.NPCSay("Congration you have 10 Rosewood Voucher for 10 pieces of Timber.")); GC.AddSend(Packets.NPCLink("OK Thx", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else { GC.AddSend(Packets.NPCSay("Sorry you dont have 10 pieces of Timber. I heard that Craftsman is supplying Timber.")); GC.AddSend(Packets.NPCLink("OK i see.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } } else if (Control == 3) { if (GC.MyChar.InventoryContains(721172, 10)) { for (int i = 0; i < 10; i++) GC.MyChar.RemoveItem(GC.MyChar.NextItem(721172)); for (int i = 0; i < 10; i++) GC.MyChar.AddItem(721173); GC.AddSend(Packets.NPCSay("Congration you have 10 Timber Voucher for 10 Rosewood Vouchers.")); GC.AddSend(Packets.NPCLink("OK Thx", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else { GC.AddSend(Packets.NPCSay("Sorry you dont have 10 Rosewood Vouchers.")); GC.AddSend(Packets.NPCLink("OK i see.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } } break; } #endregion
Code for Craftsman:
Code:
#region Craftsman case 30158: { if (Control == 0) { GC.AddSend(Packets.NPCSay("What can I do for you!")); GC.AddSend(Packets.NPCLink("Do you have Timber?", 1)); GC.AddSend(Packets.NPCLink("Just passing by.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); GC.Agreed = false; } else if (Control == 1) { GC.AddSend(Packets.NPCSay("We are rubuilding the market and have stored a lot of Timber.")); GC.AddSend(Packets.NPCLink("Can you give me some?", 2)); GC.AddSend(Packets.NPCLink("You have wasted too much.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 2) { GC.AddSend(Packets.NPCSay("We are in urgent need of Ores. You may exchange five Ores for a 10 pieces of Timber.")); GC.AddSend(Packets.NPCLink("Here are five Ores.", 3)); GC.AddSend(Packets.NPCLink("I shall come later.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 3) { if (GC.MyChar.InventoryContains(1072020, 5)) { for (int i = 0; i < 5; i++) GC.MyChar.RemoveItem(GC.MyChar.NextItem(1072020)); for (int i = 0; i < 10; i++) GC.MyChar.AddItem(721171); GC.AddSend(Packets.NPCSay("Congragulation you have 10 pieces of Timber for 5 Ores.")); GC.AddSend(Packets.NPCLink("OK Thx", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else { GC.AddSend(Packets.NPCSay("Sorry you dont have 5 Ores.")); GC.AddSend(Packets.NPCLink("OK i see.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } } break; } #endregion
Code for HouseAgent:
Code:
#region HouseAgent case 30157: { if (Control == 0) { GC.AddSend(Packets.NPCSay("I am the HouseAgent in Twin City. If you want to buy a house, you must have my authorization.")); GC.AddSend(Packets.NPCLink("Buy a house.", 1)); GC.AddSend(Packets.NPCLink("Upgrade my house.", 4)); GC.AddSend(Packets.NPCLink("Just passing by.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); GC.Agreed = false; } else if (Control == 1) { GC.AddSend(Packets.NPCSay("You should make an effort to buy a house.")); GC.AddSend(Packets.NPCLink("What shall I do?", 2)); GC.AddSend(Packets.NPCLink("I changed my mind.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 2) { GC.AddSend(Packets.NPCSay("If you give me five Timber Vouchers, I shall issue a House Permit to you.")); GC.AddSend(Packets.NPCLink("Here are the Vouchers.", 3)); GC.AddSend(Packets.NPCLink("I shall come later.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 3) { if (GC.MyChar.InventoryContains(721173, 5)) { for (int i = 0; i < 5; i++) GC.MyChar.RemoveItem(GC.MyChar.NextItem(721173)); for (int i = 0; i < 1; i++) GC.MyChar.AddItem(721170); GC.AddSend(Packets.NPCSay("Congragulation you have 1 House Permit for 5 Timber Vouchers.")); GC.AddSend(Packets.NPCLink("OK Thx", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else { GC.AddSend(Packets.NPCSay("Sorry you dont have 5 Ores.")); GC.AddSend(Packets.NPCLink("OK i see.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } } else if (Control == 4) { GC.AddSend(Packets.NPCSay("Which class would you like to upgrade your house to?")); GC.AddSend(Packets.NPCLink("Second-class.", 5)); GC.AddSend(Packets.NPCLink("Let me think it over.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 5) { GC.AddSend(Packets.NPCSay("Please exchange 10 Ore Vouchers for an Upgrade Certificate.")); GC.AddSend(Packets.NPCLink("Here are the Vouchers.", 6)); GC.AddSend(Packets.NPCLink("I shall come later.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else if (Control == 6) { if (GC.MyChar.InventoryContains(721176, 10)) { for (int i = 0; i < 10; i++) GC.MyChar.RemoveItem(GC.MyChar.NextItem(721176)); for (int i = 0; i < 1; i++) GC.MyChar.AddItem(721174); GC.AddSend(Packets.NPCSay("Congragulation you have 1 Upgrade Certificate for 10 Ore Vouchers.")); GC.AddSend(Packets.NPCLink("OK Thx", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } else { GC.AddSend(Packets.NPCSay("Sorry you dont have 10 Ore Vouchers.")); GC.AddSend(Packets.NPCLink("OK I see.", 255)); GC.AddSend(Packets.NPCSetFace(N.Avatar)); GC.AddSend(Packets.NPCFinish()); } } break; } #endregion
Now go to your OldCODB/NPCs.txt and place these at the bottom:
Code:
30160 8119 2 28 1036 184 103 30162 8099 2 28 1036 163 098 30158 8086 2 92 1036 141 107 30157 8070 2 92 1002 400 284
Thanks.