public L2Npc Spawn(bool notifyOthers = true) { L2Npc npc; if (Type.GetType("L2dotNET.Models.npcs." + Template.Type) != null) { npc = (L2Npc)Activator.CreateInstance(Type.GetType("L2dotNET.Models.npcs." + Template.Type), IdFactory.Instance.NextId(), Template); npc.X = Location.X; npc.Y = Location.Y; npc.Z = Location.Z; npc.Heading = Location.Heading; } else { npc = new L2Npc(IdFactory.Instance.NextId(), Template) { X = Location.X, Y = Location.Y, Z = Location.Z, Heading = Location.Heading }; } npc.SpawnMe(notifyOthers); return(npc); }
public void RequestTeleportList(L2Npc npc, L2Player player, int groupId, int itemId) { if (!_teleports.Npcs.ContainsKey(npc.Template.NpcId)) { player.ShowHtmPlain("no teleports available for you", npc); player.SendActionFailed(); return; } ABTeleportGroup group = _teleports.Npcs[npc.Template.NpcId].Groups[groupId]; StringBuilder sb = new StringBuilder("&$556;<br><br>"); foreach (ABTeleportEntry e in group.Teles.Values) { string cost = string.Empty; int id = itemId != -1 ? itemId : e.ItemId; if (player.Level >= 40) { cost = $" - {e.Cost} &#{id};"; } sb.Append($"<a action=\"bypass -h teleport_next?ask={groupId}&reply={e.Id}\" msg=\"811;{e.Name}\">{e.Name}{cost}</a><br1>"); } player.TeleportPayId = itemId; player.ShowHtmPlain(sb.ToString(), npc); }
public void Initialize() { string webRootPath = _hostingEnvironment.WebRootPath; InitialiseItems(webRootPath); var files = Directory.GetFileSystemEntries(webRootPath + "\\xml\\npcs"); Dictionary <int, L2Npc> npcs = new Dictionary <int, L2Npc>(); foreach (var file in files) { var content = File.ReadAllText(file); XmlDocument doc = new XmlDocument(); doc.LoadXml(content); XmlNodeList xnList = doc.SelectNodes("list/npc"); //.ChildNodes; foreach (XmlNode node in xnList) { int id = int.Parse(node.Attributes["id"].InnerText); string name = node.Attributes["name"].InnerText; var npc = new L2Npc { NpcId = id, Name = name }; npcs.Add(id, npc); } } _npcs = new ConcurrentDictionary <int, L2Npc>(npcs); }
public override void OnDialog(L2Player player, int ask, int reply, L2Npc npc) { switch (ask) { case -1425: { switch (reply) { case 1: if (player.Level < 75) { player.ShowHtm(FnLowLevel, npc); } else { if (player.GetAdena() >= 150000) { player.InstantTeleportWithItem(-149406, 255247, -85, 57, 150000); } else { player.ShowHtm(FnNotHaveAdena, npc); } } break; } } break; } }
public void Buylist(L2Player player, L2Npc trader, short reply) { if (!Shops.ContainsKey(trader.Template.NpcId)) { player.SendMessage("you shop was not found"); player.SendActionFailed(); return; } NDShop shop = Shops[trader.Template.NpcId]; GameserverPacket pk; if (!shop.Lists.ContainsKey(reply)) { reply -= 2; // примерка if (!shop.Lists.ContainsKey(reply)) { player.SendMessage($"your shop id was just wrong {reply}"); player.SendActionFailed(); } else { pk = new ShopPreviewList(player, shop.Lists[reply], reply); } } else { player.SendPacket(new ExBuySellListBuy(player, shop.Lists[reply], 1.10, 1.0, reply)); player.SendPacket(new ExBuySellListSell(player)); } }
public L2Npc Spawn(bool notifyOthers = true) { L2Npc npc; if (Type.GetType("L2dotNET.Models.Npcs." + Template.Type) != null) { //TODO this is shit. Change it npc = (L2Npc)Activator.CreateInstance(Type.GetType("L2dotNET.Models.Npcs." + Template.Type), _spawnTable, _idFactory.NextId(), Template, this); npc.X = Location.X; npc.Y = Location.Y; npc.Z = Location.Z; npc.Heading = Location.Heading; } else { npc = new L2Npc(_spawnTable, _idFactory.NextId(), Template, this) { X = Location.X, Y = Location.Y, Z = Location.Z, Heading = Location.Heading }; } npc.SpawnMeAsync(notifyOthers); return(npc); }
private void ShowGroup(L2Player player, L2Npc npc, int group) { List <int[]> ar = _data.Where(d => d[0] == group).ToList(); string text = $"&$650;<br>{string.Join(string.Empty, ar.Select(val => $"<a action=\"bypass -h menu_select?ask=-3&reply={val[1]}\">&${val[1]};</a><br1>").ToArray())}"; player.ShowHtmPlain(text, npc); }
public override void OnDialog(L2Player player, int ask, int reply, L2Npc npc) { switch (ask) { case -2: ShowGroup(player, npc, reply); break; case -3: ObserveIt(player, reply); break; } }
public L2Npc Spawn(bool notifyOthers = true) { L2Npc npc = new L2Npc(IdFactory.Instance.NextId(), Template) { X = Location.X, Y = Location.Y, Z = Location.Z, Heading = Location.Heading }; npc.SpawnMe(notifyOthers); return(npc); }
public override void OnShowChat(L2Player player, L2Npc npc) { List <int> ar = new List <int>(); foreach (int[] d in _data.Where(d => !ar.Contains(d[0]))) { ar.Add(d[0]); } string text = string.Join(string.Empty, ar.Select(val => $"<a action=\"bypass -h menu_select?ask=-2&reply={val}\">&${val};</a><br1>").ToArray()); player.ShowHtmPlain(text, npc); }
private L2Npc GetNpc() { Log.Info($"bypass '{_alias}'"); L2Npc npc = (L2Npc)_client.CurrentPlayer.Target; if (npc != null) { return(npc); } _client.CurrentPlayer.SendMessage("no npc found"); _client.CurrentPlayer.SendActionFailed(); return(null); }
public void RequestTeleport(L2Npc npc, L2Player player, int type, int entryId) { ABTeleportGroup group; try { group = _teleports.Npcs[npc.Template.NpcId].Groups[type]; } catch { Log.Error($"ND:RequestTeleport cant find teleport group {type}"); player.SendActionFailed(); return; } ABTeleportEntry e = group.Teles[entryId]; //if (!player.hasItem(e.itemId, e.cost)) //{ // switch (e.itemId) // { // case 57: // player.sendSystemMessage(SystemMessage.SystemMessageId.YOU_NOT_ENOUGH_ADENA); // break; // case 6651: // player.ShowHtm("fornonoblessitem.htm", npc); // break; // default: // player.sendSystemMessage(SystemMessage.SystemMessageId.NOT_ENOUGH_REQUIRED_ITEMS); // break; // } // player.sendActionFailed(); // return; //} switch (e.ItemId) { case 57: player.ReduceAdena(e.Cost); break; default: player.DestroyItemById(e.ItemId, e.Cost); break; } }
internal void SetNpc(int id) { if (npcs == null) { npcs = new SortedList <int, L2Npc>(); } NpcTemplate t = new NpcTemplate(new StatsSet()); //NpcTable.Instance.GetNpcTemplate(id); L2Npc npc = null; switch (t.NpcId) { case 35461: npc = new L2HideoutManager(this); break; case 35462: npc = new L2Doormen(this); break; } //npc.setTemplate(t); if (npc == null) { return; } StructureSpawn ss = StructureTable.Instance.GetSpawn(id); npc.X = ss.X; npc.Y = ss.Y; npc.Z = ss.Z; npc.Heading = ss.Heading; npcs.Add(t.NpcId, npc); }
public void ShowList(L2Player player, L2Npc npc, int listId) { if (!Lists.ContainsKey(listId)) { player.SendMessage($"Multsell list #{listId} was not found"); player.SendActionFailed(); return; } MultiSellList list = Lists[listId]; player.LastRequestedMultiSellId = listId; if (list.All == 1) { player.SendPacket(new MultiSellListEx(list)); player.CustomMultiSellList = null; } else { MultiSellList newlist = new MultiSellList { Id = list.Id }; L2Item[] pitems = player.GetAllItems().ToArray(); foreach (MultiSellEntry entry in list.Container) { MultiSellItem msitem = entry.Take[0]; if (msitem.Template == null) { continue; } foreach (L2Item item in pitems) { if (item.IsEquipped == 1) { continue; } if (item.Template.ItemId != msitem.Id) { continue; } MultiSellEntry edentry = new MultiSellEntry(); edentry.Take.AddRange(entry.Take); edentry.Give.AddRange(entry.Give); edentry.Take[0].L2Item = item; edentry.Give[0].L2Item = item; newlist.Container.Add(edentry); } } MultiSellListEx mlist = new MultiSellListEx(newlist); player.CustomMultiSellList = newlist; player.SendPacket(mlist); } }
public static void CreateClan(L2Player player, string name, L2Npc npc) { }
public static void OnReply(L2Player player, int reply, L2Npc npc) { switch (reply) { case 0: //new clan { if (player.Level < 10) { player.ShowHtm("pl002.htm", npc); return; } if (player.Clan != null) { if (player.Clan.LeaderId == player.ObjId) { player.ShowHtm("pl003.htm", npc); } else { player.ShowHtm("pl004.htm", npc); } return; } player.ShowHtm("pl005.htm", npc); } break; case 1: //Повысить player.ShowHtm("pl013.htm", npc); break; case 2: //Распустить break; case 3: //Восстановить break; case 4: //Умения break; case 5: //Управлять Академией break; case 6: //Управлять Подразделениями Стражей break; case 9: //УправлятьПодразделениями Рыцарей break; case 13: //.Передать Полномочия Лидера Клана break; case 100: //main player.ShowHtm("pl001.htm", npc); break; } }
public virtual void OnTalkToNpcQm(L2Player player, L2Npc npc, int reply) { }
public virtual bool CanTalk(L2Player player, L2Npc npc) { return(TalkNpcs.Any(id => npc.Template.NpcId == id)); }
public NpcInfo(L2Npc npc) { _npc = npc; }
public void QuestAccept(L2Player player, L2Npc npc, int questId) { QuestOrigin qo = Quests[questId]; qo.OnAccept(player, npc); }
public void TalkSelection(L2Player player, L2Npc npc) { List <object[]> qlist = new List <object[]>(); List <int> ilist = new List <int>(); List <int> clist = new List <int>(); bool nullex = false; foreach (QuestInfo qi in player.Quests) { if (qi.Completed) { clist.Add(qi.Id); continue; } if (!qi.Template.CanTalk(player, npc)) { continue; } qlist.Add(new object[] { qi.Template, $"<a action=\"bypass -h quest_continue?quest_id={qi.Id}\">[{qi.Template.QuestName} (In Progress)]</a><br1>", qi.Template.QuestId }); ilist.Add(qi.Id); } foreach (QuestOrigin qo in Quests.Values.Where(qo => !ilist.Contains(qo.QuestId)).Where(qo => qo.StartNpc == npc.Template.NpcId)) { if (clist.Contains(qo.QuestId)) { qlist.Add(new object[] { null, $"[{qo.QuestName} (Completed)]<br1>", 0 }); nullex = true; continue; } qlist.Add(new object[] { qo, $"<a action=\"bypass -h quest_tryaccept?quest_id={qo.QuestId}\">[{qo.QuestName}]</a><br1>", qo.QuestId }); } if (!nullex && (qlist.Count == 1)) { foreach (object[] o in qlist) { if (((string)o[1]).Contains("(In Progress)")) { player.quest_Talk(npc, ((QuestOrigin)o[0]).QuestId); } else { ((QuestOrigin)o[0]).TryAccept(player, npc); } } return; } if (qlist.Count == 0) { player.ShowHtmPlain("No quests for you now. Talk to others", npc); return; } StringBuilder sb = new StringBuilder(); foreach (object[] ur in qlist) { sb.Append((string)ur[1]); } player.ShowHtmPlain(sb.ToString(), npc); qlist.Clear(); ilist.Clear(); clist.Clear(); }
internal void Preview(L2Player talker, L2Npc myself, int p) { throw new NotImplementedException(); }
public virtual void TryAccept(L2Player player, L2Npc npc) { }
public override void RunImpl() { L2Player player = _client.CurrentPlayer; if (_count <= 0) { player.SendActionFailed(); return; } L2Npc trader = player.FolkNpc; if (trader == null) { player.SendSystemMessage(SystemMessage.SystemMessageId.TradeAttemptFailed); player.SendActionFailed(); return; } NDShop shop = NpcData.Instance.Shops[trader.Template.NpcId]; if (shop == null) { player.SendSystemMessage(SystemMessage.SystemMessageId.TradeAttemptFailed); player.SendActionFailed(); return; } NdShopList list = shop.Lists[(short)_listId]; if (list == null) { player.SendSystemMessage(SystemMessage.SystemMessageId.TradeAttemptFailed); player.SendActionFailed(); return; } int adena = 0; int slots = 0, weight = 0; for (int i = 0; i < _count; i++) { int itemId = _items[i * 2]; bool notfound = true; foreach (NDShopItem item in list.Items.Where(item => item.Item.ItemId == itemId)) { adena += item.Item.ReferencePrice * _items[(i * 2) + 1]; if (!item.Item.Stackable) { slots++; } //else //{ // if (!player.HasItem(item.item.ItemID)) // slots++; //} weight += item.Item.Weight * _items[(i * 2) + 1]; notfound = false; break; } if (!notfound) { continue; } player.SendSystemMessage(SystemMessage.SystemMessageId.TradeAttemptFailed); player.SendActionFailed(); return; } if (adena > player.GetAdena()) { player.SendSystemMessage(SystemMessage.SystemMessageId.YouNotEnoughAdena); return; } player.ReduceAdena(adena); for (int i = 0; i < _count; i++) { int itemId = _items[i * 2]; int count = _items[(i * 2) + 1]; player.AddItem(itemId, count); } player.SendPacket(new ExBuySellListClose()); }
public void RequestTeleportList(L2Npc npc, L2Player player, int groupId) { RequestTeleportList(npc, player, groupId, -1); }
public override void RunImpl() { L2Player player = _client.CurrentPlayer; L2Npc npc = player.FolkNpc; if (npc == null) { player.SendActionFailed(); return; } int slots = 0; for (int i = 0; i < _count; i++) { int objectId = _items[i * 2]; int count = _items[(i * 2) + 1]; L2Item item = null; //player._warehouse.Items[objectId]; if (item == null) { Log.Info($"cant find item {objectId} in warehouse {player.Name}"); player.SendActionFailed(); return; } if (item.Template.Stackable) { slots += 1; } else { slots += count; } } //InvPrivateWarehouse pw = player._warehouse ?? new InvPrivateWarehouse(player); //int itsize = 0; //else // itsize = pw.Items.Count; if (player.ItemLimitInventory < (player.GetAllItems().Count + slots)) { player.SendSystemMessage(SystemMessage.SystemMessageId.SlotsFull); player.SendActionFailed(); return; } List <int[]> transfer = new List <int[]>(); for (int i = 0; i < _count; i++) { int objectId = _items[i * 2]; int count = _items[(i * 2) + 1]; transfer.Add(new[] { objectId, count }); } //pw.transferFrom(player, transfer, false); //if(npc.Template.fnBye != null) //{ // player.sendPacket(new NpcHtmlMessage(player, npc.Template.fnBye, npc.ObjID, 0)); //} player.SendItemList(true); }
public Packet NpcInfo(L2Npc npc) { byte opcode = 0x16; Packet p = new Packet(opcode); p.WriteInt(npc.ObjId); p.WriteInt(npc.NpcTemplate.NpcId + 1000000); p.WriteInt(0); p.WriteInt((int)npc.Position.x); p.WriteInt((int)npc.Position.y); p.WriteInt((int)npc.Position.z); p.WriteInt(0); p.WriteInt(0x00); double spd = 150; //_npc.CharacterStat.GetStat(EffectType.PSpeed); double atkspd = 1200; //_npc.CharacterStat.GetStat(EffectType.BAttackSpd); double cast = 1200; //_npc.CharacterStat.GetStat(EffectType.BCastingSpd); double anim = (spd * 1f) / 120; double anim2 = (1.1 * atkspd) / 277; p.WriteInt((int)cast); p.WriteInt((int)atkspd); p.WriteInt((int)spd); p.WriteInt((int)(spd * .8)); p.WriteInt(0); // swimspeed p.WriteInt(0); // swimspeed p.WriteInt(0); p.WriteInt(0); p.WriteInt(0); p.WriteInt(0); p.WriteDouble(anim); p.WriteDouble(anim2); p.WriteDouble(npc.NpcTemplate.CollisionRadius); p.WriteDouble(npc.NpcTemplate.CollisionHeight); p.WriteInt(0); // right hand weapon p.WriteInt(0); p.WriteInt(0); // left hand weapon p.WriteByte(1); // name above char 1=true ... ?? p.WriteByte(0); p.WriteByte(0); p.WriteByte(0); p.WriteByte(0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation) p.WriteString(npc.Name); p.WriteString(npc.Title); p.WriteInt(0x00); // Title color 0=client default p.WriteInt(0x00); //pvp flag p.WriteInt(0x00); // karma p.WriteInt(0); p.WriteInt(0); //_npc.ClanId p.WriteInt(0); //_npc.ClanCrestId p.WriteInt(0); //_npc.AllianceId p.WriteInt(0); //_npc.AllianceCrestId p.WriteByte(0); // C2 p.WriteByte(0); p.WriteDouble(13); p.WriteDouble(11.5); p.WriteInt(0); // enchant p.WriteInt(0); // C6 return(p); }
public override async Task RunImpl() { await Task.Run(() => { L2Player player = _client.CurrentPlayer; L2Npc npc = player.FolkNpc; if (npc == null) { player.SendActionFailedAsync(); return; } int totalCost = 0; int weight = 0; for (int i = 0; i < _count; i++) { int objectId = _items[(i * 3) + 0]; int count = _items[(i * 3) + 2]; //if ((count < 0) || (count > int.MaxValue)) if (count < 0) { player.SendSystemMessage(SystemMessage.SystemMessageId.SellAttemptFailed); player.SendActionFailedAsync(); return; } L2Item item = player.Inventory.Items[objectId]; if (item.Template.Stackable) { totalCost += (int)(item.Count * (item.Template.ReferencePrice * .5)); } else { totalCost += (int)(item.Template.ReferencePrice * .5); } weight += item.Template.Weight; } //if (totalCost > long.MaxValue) //{ // player.sendSystemMessage(SystemMessage.SystemMessageId.SELL_ATTEMPT_FAILED); // player.sendActionFailed(); // return; //} int added, currentAdena = player.GetAdena(); if ((currentAdena + totalCost) >= int.MaxValue) { added = int.MaxValue - currentAdena; } else { added = totalCost; } List <int[]> transfer = new List <int[]>(); //InventoryUpdate iu = new InventoryUpdate(); for (int i = 0; i < _count; i++) { int objectId = _items[(i * 3) + 0]; int count = _items[(i * 3) + 2]; transfer.Add(new[] { objectId, count }); } //player.Refund.transferHere(player, transfer, false); //player.Refund.validate(); player.AddAdena(added, true); player.SendItemList(true); player.SendPacketAsync(new ExBuySellListClose()); if (weight != 0) { player.UpdateWeight(); } //if (npc.Template.fnSell != null) //{ // player.sendPacket(new NpcHtmlMessage(player, npc.Template.fnSell, npc.ObjID, 0)); //} }); }
public virtual void OnTalkToNpc(L2Player player, L2Npc npc, int stage) { }
public override async Task RunImpl() { await Task.Run(() => { L2Player player = _client.CurrentPlayer; L2Npc npc = player.FolkNpc; if (npc == null) { player.SendActionFailedAsync(); return; } int fee = _count * 30; int slots = 0; int adenatransfer = 0; for (int i = 0; i < _count; i++) { int objectId = _items[i * 2]; int count = _items[(i * 2) + 1]; L2Item item = player.GetItemByObjId(objectId); if (item == null) { Log.Info($"cant find item {objectId} in inventory {player.Name}"); player.SendActionFailedAsync(); return; } if (item.Template.Stackable) { slots += 1; } else { slots += count; } if (item.Template.ItemId == 57) { adenatransfer += count; } } if ((player.GetAdena() - adenatransfer) < fee) { player.SendSystemMessage(SystemMessage.SystemMessageId.YouNotEnoughAdenaPayFee); player.SendActionFailedAsync(); return; } //InvPrivateWarehouse pw = player._warehouse; //int itsize = 0; //if (pw == null) // pw = new InvPrivateWarehouse(player); //else // itsize = pw.Items.Count; //if (player.ItemLimit_Warehouse < (itsize + slots)) //{ // player.sendSystemMessage(SystemMessage.SystemMessageId.WAREHOUSE_FULL); // player.sendActionFailed(); // return; //} player.ReduceAdena(fee); List <int[]> transfer = new List <int[]>(); for (int i = 0; i < _count; i++) { int objectId = _items[i * 2]; int count = _items[(i * 2) + 1]; transfer.Add(new[] { objectId, count }); } // pw.transferHere(player, transfer, false); //if(npc.Template.fnBye != null) //{ // player.sendPacket(new NpcHtmlMessage(player, npc.Template.fnBye, npc.ObjID, 0)); //} player.SendItemList(true); }); }
void DrawNpc(Graphics g, L2Npc npc, int x, int y, int width) { if (Settings.ObjectsList.ShowMP) { hpBar5.Draw(g, x + 12, y + 1, npc.CurHP, npc.MaxHP); mpBar5.Draw(g, x + 12, y + 6, npc.CurMP, npc.MaxMP); } else hpBar.Draw(g, x + 12, y + 1, npc.CurHP, npc.MaxHP); g.DrawString(npc.Name, GUI.Font, GUI.NpcBrush, x + 84, y); }