public static void Buy(UserCharacter u, int store_no, int item_no, int number) { if (List.ContainsKey(store_no)) { Store storeData = List[store_no]; if (number <= 0) { u.userData.clientData.SendPacket(Packet.Dialog(0, "구매 불가", "구매 개수를 정확히 입력해주세요.")); return; } if (storeData.Items[item_no].number >= number || storeData.Items[item_no].number == -1) { int gold = storeData.Items[item_no].price * number; if (u.gold >= gold) { if (storeData.Items[item_no].number != -1) { storeData.Items[item_no].number -= number; } u.loseGold(gold); Command.gainItem(u, storeData.Items[item_no].item_no, number); u.userData.clientData.SendPacket(Packet.StoreItem(storeData, storeData.Items[item_no])); u.userData.clientData.SendPacket(Packet.Dialog(0, "구매 완료", $"{Item.Items[storeData.Items[item_no].item_no].name} 아이템을 {number}개 구매했습니다.")); } else { u.userData.clientData.SendPacket(Packet.Dialog(0, "구매 불가", "보유 금액이 부족합니다.")); } } else { u.userData.clientData.SendPacket(Packet.Dialog(0, "구매 불가", "상점의 아이템 개수가 부족합니다.")); } } }
public static Hashtable CharacterCreate(UserCharacter c) { Hashtable msg = new Hashtable(); msg.Add("part", CHARACTER_CREATE); msg.Add("no", c.no); msg.Add("name", c.name); msg.Add("str", c.str); msg.Add("dex", c.dex); msg.Add("int", c.Int); msg.Add("luk", c.luk); msg.Add("maxhp", c.maxhp); msg.Add("hp", c.hp); msg.Add("maxmp", c.maxmp); msg.Add("mp", c.mp); msg.Add("move_speed", c.move_speed); msg.Add("level", c.level); msg.Add("x", c.x); msg.Add("y", c.y); msg.Add("dir", c.direction); msg.Add("image", c.image); msg.Add("mapid", c.mapid); return(msg); }
public static void gainItem(UserCharacter u, int item_no, int num) { Item item = Item.Items[item_no]; if (item.type == 0) { string field, values; field = "item_no,max_ability,ability,trade,sell,`use`,`character`"; values = $"'{item.no}','{item.max_ability}','{item.ability}',"; values += $"'{(item.trade ? 1 : 0)}','{(item.sell ? 1 : 0)}','{(item.use ? 1 : 0)}','{u.name}'"; DataTable rs; Item obj; for (int i = 0; i < num; i++) { Mysql.Query($"INSERT INTO storage_equipment ({field}) VALUES ({values})"); rs = Mysql.Query($"SELECT * FROM storage_equipment WHERE `character` = '{u.name}'"); Mysql.Query($"UPDATE storage_equipment SET `character` = '' WHERE no = '{rs.Rows[0]["no"]}'"); obj = new Item(rs.Rows[0], item); Item.Equipments.Add(obj.no, obj); u.gainItem(obj, 0); } } else { u.gainItem(item, num); } }
// 드랍아이템을 획득합니다. public void gainDropItem(UserCharacter u, int index) { DropItem item = DropItems[index]; item.gain(u); deleteDropItem(index); }
public static Hashtable SelectCharacter(UserCharacter c) { Hashtable msg = new Hashtable(); msg.Add("part", USER_SELECT_CHARACTER); msg.Add("name", c.name); msg.Add("map_id", c.mapid); msg.Add("map_x", c.x); msg.Add("map_y", c.y); msg.Add("direction", c.direction); msg.Add("image", c.image); msg.Add("exp", c.exp); msg.Add("gold", c.gold); msg.Add("maxexp", Exp.getLevel(c.level)); msg.Add("level", c.level); msg.Add("maxhp", c.maxhp); msg.Add("maxmp", c.maxmp); msg.Add("hp", c.hp); msg.Add("mp", c.mp); msg.Add("str", c.str); msg.Add("dex", c.dex); msg.Add("int", c.Int); msg.Add("luk", c.luk); msg.Add("point", c.point); return(msg); }
public static void Show(UserCharacter u, int no) { Store storeData = List[no]; foreach (StoreItem item in storeData.Items.Values) { u.userData.clientData.SendPacket(Packet.StoreItem(storeData, item)); } }
public static Hashtable DeleteCharacter(UserCharacter c) { Hashtable msg = new Hashtable(); msg.Add("part", CHARACTER_DELETE); msg.Add("name", c.name); return(msg); }
public static Hashtable CharacterAnimation(UserCharacter u, int id) { Hashtable msg = new Hashtable(); msg.Add("part", CHARACTER_ANIMATION); msg.Add("id", id); msg.Add("name", u.name); return(msg); }
public static Hashtable CharacterDamage(UserCharacter u, string damage, bool critical = false) { Hashtable msg = new Hashtable(); msg.Add("part", CHARACTER_DAMAGE); msg.Add("damage", damage); msg.Add("name", u.name); msg.Add("maxhp", u.maxhp); msg.Add("hp", u.hp); msg.Add("cri", critical ? 1 : 0); return(msg); }
public static Hashtable Move(UserCharacter c) { Hashtable msg = new Hashtable(); msg.Add("part", CHARACTER_MOVE); msg.Add("name", c.name); msg.Add("x", c.x); msg.Add("y", c.y); msg.Add("dir", c.direction); msg.Add("image", c.image); msg.Add("mapid", c.fieldData.mapid); return(msg); }
// 필드의 NPC들을 해당 유저에게 로드합니다. public bool loadNPC(UserCharacter u) { if (!Users.ContainsKey(u.no)) { return(false); } foreach (NPC obj in Map.Maps[mapid].npcData.Values) { u.userData.clientData.SendPacket(Packet.NPCCreate(obj)); } return(true); }
// Skill Book public static bool LearnCharacterSkill(UserCharacter u, Item item, int value) { if (!u.Skills.ContainsKey(Skill.Skills[value])) { u.learnSkill(Skill.Skills[value]); } else { u.userData.clientData.SendPacket(Packet.Dialog(0, "아이템 사용 불가", "이미 배운 스킬입니다.")); return(false); } return(true); }
// 필드의 몬스터들을 해당 유저에게 로드합니다. public bool loadEnemy(UserCharacter u) { if (!Users.ContainsKey(u.no)) { return(false); } foreach (Enemy obj in Enemies) { u.userData.clientData.SendPacket(Packet.EnemyCreate(obj)); } return(true); }
// 필드의 드랍아이템들을 해당 유저에게 로드합니다. public bool loadDropItem(UserCharacter u) { if (!Users.ContainsKey(u.no)) { return(false); } foreach (DropItem obj in DropItems.Values) { u.userData.clientData.SendPacket(Packet.DropItemCreate(obj)); } return(true); }
public static void gainItem(UserCharacter u, DropItem dropitem) { Item item; Item obj; if (dropitem.trash && dropitem.dropData.item_type == 0) { item = Item.Equipments[dropitem.dropData.item_no]; } else { item = Item.Items[dropitem.dropData.item_no]; } if (item.type == 0) { if (!dropitem.trash) { DataTable rs; Mysql.Query($"INSERT INTO storage_equipment ({dropitem.field}) VALUES ({dropitem.values})"); // 아이템 재 로드하여 no 번호 추출 및 캐릭터, 변수 업데이트 rs = Mysql.Query($"SELECT * FROM storage_equipment WHERE `character` = '{u.name}'"); Mysql.Query($"UPDATE storage_equipment SET `character` = '' WHERE no = '{rs.Rows[0]["no"]}'"); obj = new Item(rs.Rows[0], item); Item.Equipments.Add(obj.no, obj); // 실제 인벤토리에 추가 u.gainItem(obj, 0); } else { obj = Item.Equipments[dropitem.dropData.item_no]; u.gainItem(obj, 0); } } else { if (!dropitem.trash) { u.gainItem(item, 1); } else { obj = Item.Items[dropitem.dropData.item_no]; u.gainItem(obj, dropitem.number); } } }
// 필드의 유저들을 해당 유저에게 로드합니다. public bool loadUser(UserCharacter u) { if (!Users.ContainsKey(u.no)) { return(false); } foreach (UserCharacter c in Users.Values) { if (c == u) { continue; } u.userData.clientData.SendPacket(Packet.CharacterCreate(c)); } return(true); }
// 필드에 해당 유저를 입장시킵니다. public bool join(UserCharacter u, int _x, int _y) { if (Users.ContainsKey(u.no)) { return(false); } AllSendPacket(Packet.CharacterCreate(u)); u.FieldData = this; Users.Add(u.no, u); u.moveto(_x, _y, u.direction); loadUser(u); loadNPC(u); loadEnemy(u); loadDropItem(u); return(true); }
public void startEvent(UserCharacter u) { if (!u.isMessage) { u.isMessage = true; u.page = default_action; u.npcData = this; } if (u.page != 0) { Actions[u.page].start(u); } else { u.resetMessage(); } }
// 포탈(장소이동) 판정 public bool portal(UserCharacter u) { if (Users.ContainsKey(u.no)) { Map map = Map.Maps[mapid]; // 포탈 판정 if (map.portalData.ContainsKey($"{u.x},{u.y}")) { Portal portal = map.portalData[$"{u.x},{u.y}"]; // 이동시키기 leave(u.no); Map.Maps[portal.move_mapid].Fields[0].join(u, portal.move_x, portal.move_y); return(true); } } return(false); }
public void active(UserCharacter u) { if (!IsActive && wait_time == 0) { IsActive = true; count = skillData.count; delay = 0; // MP 깎아야됨 if (!Skill.userData.ContainsKey(u.no)) { Skill.userData.Add(u.no, u); } } else { // 대기중 또는 사용중 } }
// Function public static void attack(UserCharacter u, UserSkill skill) { int damage = Convert.ToInt32(skill.skillData.power + skill.level * skill.skillData.level_power + (u.Int + Command.rand.Next(u.luk)) * skill.skillData.power_factor); u.animation(skill.skillData.use_animation); foreach (Enemy c in u.fieldData.Enemies) { if (c.IsDead) { continue; } if (IsRange(skill.skillData.range_type, skill.skillData.range, u, c)) { c.animation(skill.skillData.target_animation); c.damage(damage.ToString(), false, u); } } }
public static Hashtable CharacterStatusUpdate(UserCharacter u) { Hashtable msg = new Hashtable(); msg.Add("part", CHARACTER_STATUS); msg.Add("exp", u.exp); msg.Add("gold", u.gold); msg.Add("maxexp", Exp.getLevel(u.level)); msg.Add("level", u.level); msg.Add("maxhp", u.maxhp); msg.Add("maxmp", u.maxmp); msg.Add("hp", u.hp); msg.Add("mp", u.mp); msg.Add("str", u.str); msg.Add("dex", u.dex); msg.Add("int", u.Int); msg.Add("luk", u.luk); msg.Add("point", u.point); return(msg); }
public void loadCharacter() { int index = 0; UserCharacter _char; characters = new Dictionary <int, UserCharacter>(); DataTable u = Mysql.Query($"SELECT * FROM user_character WHERE user_no ='{no}'"); if (u == null) { return; } foreach (DataRow c in u.Rows) { _char = new UserCharacter(this, index); _char.loadData(c); characters.Add(index, _char); index++; } }
public static void Sell(UserCharacter u, Item item, int number) { if (item.type != 0 && number == 0) { u.userData.clientData.SendPacket(Packet.Dialog(0, "판매 불가", "판매 개수를 정확히 입력해주세요.")); return; } if (u.Inventory[item].number >= number) { int gold = number == 0 ? item.price : item.price * number; u.gainGold(gold); u.loseItem(item, number); u.userData.clientData.SendPacket(Packet.Dialog(0, "판매 완료", $"아이템을 {gold}골드에 판매하였습니다.")); if (item.type == 0) { Mysql.Query($"DELETE FROM storage_equipment WHERE no = '{item.no}'"); Item.Equipments.Remove(item.no); } } else { u.userData.clientData.SendPacket(Packet.Dialog(0, "판매 불가", "아이템의 개수를 확인해주세요.")); } }
public static void testFunction(UserCharacter u, NPC npcData) { Msg.Info(u.name); Msg.Info(npcData.name); }
// Recovery Value public static bool RecoveryHpValue(UserCharacter u, Item item, int value) { u.animation(item.animation_id); u.damage((-value).ToString(), false); return(true); }
public static bool RecoveryAllRate(UserCharacter u, Item item, int value) { return(true); }
// Enemy public static bool addEnemy(UserCharacter u, Item item, int value) { u.fieldData.addEnemy(value, u.x, u.y - 1); return(true); }
public void gain(UserCharacter u) { values += $"'{u.name}'"; Command.gainItem(u, this); u.userData.clientData.SendPacket(Packet.EventTrigger()); }
public static void Dead(Enemy e, UserCharacter u) { // delegate 호출 DelegateQuestEvent?.Invoke(e, u); }