Advertisement
Guest User

Untitled

a guest
May 25th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 192.92 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. using TofanProject.Network;
  7. using TofanProject.Network.GamePackets;
  8. using System.Collections;
  9. using TofanProject.Interfaces;
  10. using TofanProject.Database;
  11. using System.Collections.Concurrent;
  12. using TofanProject.Client;
  13. using TofanProject.GamePackets;
  14.  
  15.  
  16. namespace TofanProject.Game
  17. {
  18. public class Entity : Writer, Interfaces.IBaseEntity, Interfaces.IMapObject
  19. {
  20.  
  21. public Dictionary<uint, FloorItem> FloorItems = new Dictionary<uint, FloorItem>();
  22. public ConcurrentDictionary<ushort, Game.Attacking.FloorSpell.ClientFloorSpells> FloorSpells = new ConcurrentDictionary<ushort, Game.Attacking.FloorSpell.ClientFloorSpells>();
  23. public Dictionary<uint, uint> Wings = new Dictionary<uint, uint>();
  24. public WardrobeTitles WTitles;
  25. public List<string> NowEquippedWing = new List<string>();
  26. public List<string> NowEquippedTitle = new List<string>();
  27. public byte[] DailySignDays;
  28. public byte DailySignRewards;
  29. public byte DailySignVIPChances;
  30. public bool OnUnionWar = false;
  31. public uint PlanderP { get; set; }
  32. public List<string> BlackList;
  33. public int SelectedStage;
  34. public int SelectedAttribute;
  35. public bool SwordSoul = false;
  36. public bool InSteedRace;
  37. public bool BansheeSpirit = false;
  38. public byte XPCountTwist = 0;
  39. public Time32 ManiacDance;
  40. public uint lacb;
  41. public Time32 XpBlueStamp;
  42. public Time32 BackfireStamp;
  43. public byte GuiHeavenBlessing = 0;
  44. public Time32 WaveofBlood;
  45. public bool WrathoftheEmperor { get; set; }
  46. public DateTime WrathoftheEmperorStamp { get; set; }
  47. public Time32 ScarofEarth;
  48. public byte WaveofBloodXp = 8;
  49. public Time32 BlockStamp;
  50. public int BlockTime;
  51. public void JoinPlunder()
  52. {
  53. OnUnionWar = true;
  54. PKMode = Game.Enums.PKMode.Union;
  55. Owner.Send(new Data(true)
  56. {
  57. UID = UID,
  58. ID = Data.ChangePKMode,
  59. dwParam = (uint)PKMode
  60. });
  61. }
  62. public bool EpicWarrior()
  63. {
  64. if (EntityFlag == Game.EntityFlag.Player)
  65. {
  66. var weapons = Owner.Weapons;
  67. if (weapons.Item1 != null && weapons.Item2 != null)
  68. if (weapons.Item1.ID / 1000 == 624 && weapons.Item2.ID / 1000 == 624)
  69. return true;
  70. }
  71. return false;
  72. }
  73. public void SendSysMesage(string mesaj)
  74. {
  75. byte[] buffer = new Message(mesaj, Message.System).ToArray();
  76. this.Owner.Send(buffer);
  77. }
  78. #region ScurvyBomb
  79. public byte ScurbyBomb;
  80. public Time32 ScurbyBombStamp, ScurbyBomb2Stamp;
  81. #endregion
  82. #region Values
  83. #region Method
  84. public InnerPower InnerPower;
  85. public Entity SpookDetails;
  86. public Map TOMM;
  87. private Enums.PKMode _PKMode;
  88. public Game.Features.Flowers MyFlowers;
  89. private EntityFlag _EntityFlag;
  90. private MapObjectType _MapObjectType;
  91. public Enums.Mode Mode;
  92. public Database.MonsterInformation MonsterInfo;
  93. private BitVector32 BitVector32 = new BitVector32(32 * 5);
  94. public Enums.AppearanceType AppearanceBkp;
  95. public Achievement MyAchievement;
  96. public Features.Flowers Flowers;
  97. public Enums.PKMode PrevPKMode;
  98. public Features.Tournaments.TeamElitePk.Match SkillTeamWatchingElitePKMatch;
  99. public Action<Entity> OnDeath;
  100. public Network.GamePackets.Attack AttackPacket;
  101. public Network.GamePackets.Attack VortexPacket;
  102. private Client.GameClient _Owner;
  103.  
  104. public Tournaments.Elite_client Elite;
  105. private WareHousePassword.Nextaction _NextAction = WareHousePassword.Nextaction.Nothing;
  106. public Game.JiangHu.AttackFlag AttackJiang = JiangHu.AttackFlag.None;
  107. public Network.GamePackets.Gambleing Gambleing;
  108. public ConquerItem LottoItem = null;
  109. public ConquerItem LotteryPrize;
  110. public TofanProject.Game.JiangHu MyJiang;
  111. public Game.Subclasses SubClasses = new Game.Subclasses();
  112. public Game.Tournaments.Team_client Team;
  113. public Game.Tournaments.Skill_client Skill;
  114. private Network.GamePackets.Update update;
  115. #endregion
  116. private uint clan_shared_bp = 0;
  117. public void SetSharedClanBP(uint uid, uint bp)
  118. {
  119. lock (CBpSyncRoot)
  120. {
  121. ExtraBattlePower -= clan_shared_bp;
  122. clan_shared_bp = bp;
  123. ExtraBattlePower += bp;
  124. if (Owner.Team != null && Owner.Team.Teammates != null)
  125. {
  126. Leadership ship = new Leadership();
  127. ship.LeaderUID =
  128. Owner.Team.Teammates.Where(p => (p.Team != null && p.Team.TeamLeader)).FirstOrDefault().Entity.UID;
  129. ship.UID = UID;
  130. if (ship.UID != ship.LeaderUID)
  131. {
  132. ship.Type = 2;
  133. Owner.Send(ship);
  134. ship.Type = 1;
  135. Owner.Send(ship);
  136. }
  137. }
  138. if (bp != 0)
  139. {
  140. Update update = new Update(true);
  141. update.UID = UID;
  142. if (uid == 0) uid = UID;
  143. update.Append(Network.GamePackets.Update.ClanSharedBattlePower, uid);
  144. update.Append(Network.GamePackets.Update.ClanSharedBattlePower, bp);
  145. Owner.Send(update);
  146. }
  147. Update update1 = new Update(true);
  148. update1.UID = UID;
  149. update1.Append(Network.GamePackets.Update.ClanSharedBattlePower, uid);
  150. update1.Append(Network.GamePackets.Update.ClanSharedBattlePower, bp);
  151. Owner.Send(update1);
  152. }
  153. }
  154. #region Lists And Dictionaries
  155. public List<Game.ConquerStructures.ChiRetreatStructure> RetreatChiPowers = new List<Game.ConquerStructures.ChiRetreatStructure>();
  156. public ConcurrentDictionary<TitlePacket.Titles, DateTime> Titles;
  157. public List<ushort> MonstersSpells = null;
  158. public List<Clone> MyClones = new List<Clone>();
  159. public Time32 ClonePacket;
  160. public Dictionary<uint, ConquerItem> StorageItems;
  161. #endregion
  162. #region Bytes & SB
  163. public byte AzureShieldLevel = 0;
  164. public byte TOMQ = 255;
  165. public byte TOM = 0;
  166. public byte TOMRC = 3;
  167. public byte EditNameTimes = 50;
  168. public byte GLCTF;
  169. public byte AutoRev = 0;
  170. public byte ClaimedActivenessGift1 = 0;
  171. public byte ClaimedActivenessGift2= 0;
  172. public byte ETHAPItemAmount = 0;
  173. public byte StarterPackLevel = 0;
  174. public byte SpiritBeadsType = 0;
  175. public byte RareMaterialsAmount;
  176. public byte ClaimedActivenessGift3 = 0;
  177. private byte _Dodge;
  178. public byte CountKilling;
  179. private byte _vipLevel;
  180. public static byte ScreenDistance = 0;
  181. byte cls, secls, seclss;
  182. private byte _stamina, _class, _reborn = 0, _level;
  183. public static sbyte[] XDir = new sbyte[] { 0, -1, -1, -1, 0, 1, 1, 1 };
  184. public static sbyte[] YDir = new sbyte[] { 1, 1, 0, -1, -1, -1, 0, 1 };
  185. public static sbyte[] XDir2 = new sbyte[] { 0, -2, -2, -2, 0, 2, 2, 2, -1, -2, -2, -1, 1, 2, 2, 1, -1, -2, -2, -1, 1, 2, 2, 1 };
  186. public static sbyte[] YDir2 = new sbyte[] { 2, 2, 0, -2, -2, -2, 0, 2, 2, 1, -1, -2, -2, -1, 1, 2, 2, 1, -1, -2, -2, -1, 1, 2 };
  187. public byte FirstRebornLevel, SecondRebornLevel;
  188. public byte[] SpawnPacket;
  189. public byte ToxicFogLeft, FlashingNameTime, FlyTime, InvisibilityTime, StarOfAccuracyTime, DodgeTime, AccuracyTime, ShieldTime, MagicDefenderSecs;
  190. private byte _receivedEnlighenPoints;
  191. public ushort MagicShieldTime = 0;
  192. public ushort StigmaTime = 0;
  193. public byte LotteryJadeAdd;
  194. #endregion
  195. #region Uints
  196. public uint Aura_actLevel;
  197. public uint OnlineTraining, BlessedHunting;
  198. public uint RareMaterialsItemID = 0;
  199. public uint KingdomDeed = 0;
  200. public uint StrikePoints = 0;
  201. public uint TeamXorOrasPoints;
  202. public Time32 TeamXorOrasPointsStamp;
  203. public uint TodayStrikePoints = 0;
  204. public uint totalperfectionscore_ = 0;
  205. public uint TotalPerfectionScore
  206. {
  207. get
  208. {
  209. if (Owner == null) return totalperfectionscore_;
  210. uint points = 0;
  211. points += Owner.Equipment.GetFullEquipmentEnumPoints;
  212. points += Owner.Equipment.GetFullEquipmentSocketPoints;
  213. points += Owner.Equipment.GetFullEquipmentGemPoints;
  214. points += Owner.Equipment.GetFullEquipmentPlusPoints;
  215. points += Owner.Equipment.GetFullEquipmentBlessPoints;
  216. points += Owner.Equipment.GetFullEquipmentRefinePoints;
  217. points += Owner.Equipment.GetFullEquipmentSoulPoints;
  218. points += Owner.Equipment.GetFullEquipmentEnchantPoints;
  219. points += Owner.Equipment.GetFullEquipmentPerfecetionLevelPoints;
  220. points += Owner.Equipment.GetFullEquipmentLevelPoints;
  221. points += (uint)MsgUserAbilityScore.CalculatePerfectionChiPoints(Owner);
  222. points += (uint)MsgUserAbilityScore.CalculatePerfectionJiangPoints(Owner);
  223. points += (uint)((Vitality + Spirit + Strength + Agility + Atributes) * 5);
  224. points += (uint)(Level < 140 ? Level * 20 : Level * 25);
  225. if (InnerPower != null) points += InnerPower.TotalScore * 2;
  226. points += (uint)((uint)NobilityRank * 1000);
  227. points += (uint)(Reborn * 1000);
  228. points += (StorageManager.PerfectionPoints(Owner, true));
  229. points += (StorageManager.PerfectionPoints(Owner, false));
  230. points += (uint)(MsgUserAbilityScore.CalculateSubClassPoints(Owner));
  231. return points;
  232. }
  233. set
  234. {
  235. totalperfectionscore_ = value;
  236. }
  237. }
  238. public static void SendWorldMessage(string Messages)
  239. {
  240. Kernel.SendWorldMessage(new Message(Messages, System.Drawing.Color.Yellow, Message.World), Program.GamePool);
  241. }
  242. public uint NormalGems;
  243. public uint ChiStudyTimes = 0;
  244. public uint StrResID = 0;
  245. public uint JiangStudyTimes = 0;
  246. public byte EnlightmentTimes = 0;
  247. public byte HoursTimes = 0;
  248. public bool DidTIB = false;
  249. public uint ETHAPItemID = 0;
  250. uint _ExtraInventory;
  251. public uint KillArena1 = 0, KillArena2 = 0, KillArena3 = 0, KillArena4 = 0, KillArena5 = 0, KillArena6 = 0, KillArena7 = 0;
  252. public uint TransformationMaxHP = 0;
  253. private uint _heavenblessing, _money, _uid, _hitpoints, _maxhitpoints;
  254. private uint _conquerpoints, _boundCps, _TreasuerPoints;
  255. public uint TransformationAttackRange = 0;
  256. public uint LotteryItemID = 0;
  257. public uint InteractionType = 0;
  258. public uint InteractionWith = 0;
  259. public uint ItemHP = 0;
  260. public uint Weight;
  261. private uint _MinAttack, _MaxAttack, _MagicAttack;
  262. public uint BaseMinAttack, BaseMaxAttack, BaseMagicAttack, BaseMagicDefence;
  263. private uint _TransMinAttack, _TransMaxAttack, _TransDodge, _TransPhysicalDefence, _TransMagicDefence;
  264. public uint Accurity = 0;
  265. public uint MAttack;
  266. public uint MDefense;
  267. private uint guildBP = 0;
  268. public uint Aura_actPower;
  269. public uint LotteryItemPlus;
  270. public uint LotteryItemSocket1;
  271. public uint LotteryItemSoc2;
  272. public uint LotteryItemColor;
  273. public uint LotteryItemSoc1;
  274. #endregion
  275. #region Ushorts
  276. public ushort Detoxication;
  277. private ushort _doubleexp, _superpotion, _body, _transformationid, _face, _strength, _agility, _spirit, _vitality, _atributes, _mana, _maxmana, _hairstyle, _mapid, _previousmapid, _x, _y, _pkpoints;
  278. public ushort _Flag;
  279. public bool KilledPluto = false;
  280. public ushort Intensification;
  281. public ushort InteractionX = 0;
  282. public ushort SpiritBeadsCount = 0;
  283. public ushort InteractionY = 0;
  284. public ushort FinalMagicDmgPlus;
  285. public ushort FinalMagicDmgReduct;
  286. public ushort FinalDmgPlus;
  287. public ushort FinalDmgReduct;
  288. public ushort DragonSwingPower;
  289. public ushort ShieldBlockPercent;
  290. private ushort _actionX, _actionY;
  291. public ushort KOSpell = 0;
  292. private double _enlightenPoints;
  293. private ushort _enlightmenttime;
  294. public ushort KOCount = 0;
  295. private ushort _MDefence, _MDefencePercent;
  296. public ushort BaseDefence;
  297. public ushort ItemMP = 0, PhysicalDamageDecrease = 0, PhysicalDamageIncrease = 0, MagicDamageDecrease = 0, MagicDamageIncrease = 0, AttackRange = 1, Vigor = 0;
  298.  
  299. public ushort HitRate { get; set; }
  300. public ushort AzureShieldDefence = 0;
  301. public bool AllowToAttack = false;
  302. public ushort EquipAgility = 0;
  303. #endregion
  304. #region Shorts
  305. public short CycloneTime = 0, SuperCycloneTime = 0, SupermanTime = 0, NoDrugsTime = 0, FatalStrikeTime = 0, ShurikenVortexTime = 0, OblivionTime = 0, AuraTime = 0, ShackleTime = 0, ChaosTime = 0, AzureTime;
  306. #endregion
  307. #region Ints
  308. public int lianhuaranLeft;
  309. public int Shock;
  310. public int FrozenTime;
  311. public int SuperItemBless;
  312. int _Energy = 0;
  313. public int TransformationTime = 0;
  314. public int Accuracy;
  315. public int AzureDamage = 0;
  316. public int ChainboltTime;
  317. public int EarthResistance;
  318. public int Penetration;
  319. public int Counteraction;
  320. public int MetalResistance;
  321. public int WoodResistance;
  322. public int WaterResistance;
  323. public int FireResistance;
  324. public int Immunity;
  325. public int FatigueSecs;
  326. public int Breaktrough;
  327. public int CriticalStrike;
  328. public int SkillCStrike;
  329. public int Material;
  330. public int Block;
  331. public int[] Gems = new int[GemTypes.Last];
  332. public int BlackSpotStepSecs;
  333. public int Fright;
  334. public int DragonFuryTime;
  335. public const int DefaultDefense2 = 10000;
  336. #endregion
  337. #region Ulongs
  338. public ulong Aura_actType2;
  339. public ulong AutoHuntEXP { get; set; }
  340. private ulong _experience;
  341. public ulong Aura_actType;
  342. public ulong Merchant;
  343. #endregion
  344. #region Longs
  345. #endregion
  346. #region Strings
  347. public string LoweredName;
  348. private string _Name, _Spouse;
  349. public string NewName = "";
  350. #endregion
  351. #region Times
  352. public Time32 DragonFlowStamp, AutoRevStamp;
  353. public Time32 DragonCyclone;
  354. public Time32 DeathStamp, AttackStamp, StaminaStamp, VortexAttackStamp, CycloneStamp, SupermanStamp, FatigueStamp, CannonBarrageStamp,
  355. StigmaStamp, StarOfAccuracyStamp, DragonFlow, InvisibilityStamp, MagicShieldStamp, DodgeStamp, EnlightmentStamp, BlackSpotStamp, BlackbeardsRageStamp, DefensiveStanceStamp,
  356. AccuracyStamp, ScurvyBombStamp, ShieldStamp, FlyStamp, NoDrugsStamp, ToxicFogStamp, FatalStrikeStamp, DoubleExpStamp, BladeTempest, MagicDefenderStamp,
  357. ShurikenVortexStamp, IntensifyStamp, SpiritFocusStamp, TransformationStamp, CounterKillStamp, PKPointDecreaseStamp,
  358. HeavenBlessingStamp, OblivionStamp, AuraStamp, ShackleStamp, AzureStamp, StunStamp, GuildRequest = Time32.Now,
  359. BladeFlurryStamp, SuperCycloneStamp, IncreaseFinalMDamageStamp, IncreaseFinalPDamageStamp, IncreaseFinalMAttackStamp,
  360. IncreaseFinalPAttackStamp, IncreaseImunityStamp, IncreaseAntiBreackStamp, IncreasePStrikeStamp, IncreaseBreackStamp, GodlyShieldStamp,
  361. IncreaseAttributeStamp;
  362. public Time32 DivineGuardStamp, ShieldBreakStamp;
  363. public Time32 DragonSwingStamp;
  364. public Time32 DragonFuryStamp;
  365. public Time32 lianhuaranStamp;
  366. public DateTime LastGetEnergy;
  367. public DateTime PledgeStamp;
  368. public DateTime FlashingNameStamp;
  369. public DateTime AzureShieldStamp = DateTime.Now;
  370. private Time32 spiritFocusStamp;
  371. public Time32 EagleEyeStamp;
  372. public Time32 MortalWoundStamp;
  373. public Time32 SpellStamp;
  374. public Time32 ChainboltStamp;
  375. public Time32 FrozenStamp;
  376. public Time32 Cursed;
  377. public Time32 DragonCycloneStamp { get; set; }
  378. public Time32 DragonFury { get; set; }
  379. public DateTime CongeladoTimeStamp;
  380. public Time32 GaleBombStamp { get; set; }
  381. public Time32 BladeTempestStamp { get; set; }
  382. public Time32 ShockStamp;
  383. #endregion
  384. #region Booleans
  385. public bool CauseOfDeathIsMagic = false;
  386. public bool LoadedActivenessSystem = false;
  387. public bool AnsweredKingdomQuiz;
  388. public bool DidTOM = false;
  389. public bool DidBrightFortune = false;
  390. public bool IncreaseFinalMDamage = false,
  391. IncreaseFinalPDamage = false,
  392. IncreaseFinalMAttack = false,
  393. IncreaseFinalPAttack = false,
  394. IncreaseImunity = false,
  395. IncreaseAntiBreack = false,
  396. IncreasePStrike = false,
  397. IncreaseBreack = false,
  398. IncreaseAttribute = false,
  399. GodlyShield = false;
  400. public bool ClaimedTOM = false;
  401. public bool InTOM = false;
  402. public bool CounterKillSwitch = false;
  403. public byte FirstCredit;
  404. public bool DidFirstHeavenTreasury = false;
  405. public bool Companion;
  406. public bool KilledThirllingSpook = false;
  407. public bool Stunned = false, Confused = false;
  408. public bool InteractionSet = false;
  409. public bool Aura_isActive;
  410. private bool spiritFocus;
  411. public bool DragonSwing = false;
  412. public bool FrozenD;
  413. public bool IsDropped = false;
  414. public bool HasMagicDefender = false;
  415. public bool IsDefensiveStance = false;
  416. public bool MagicDefenderOwner = false;
  417. public bool Tournament_Signed = false;
  418. public bool InteractionInProgress = false;
  419. public bool InSkillPk = false;
  420. public bool Invisable, IsBlackSpotted, IsEagleEyeShooted = false;
  421. public bool InTeamArenaorArena;
  422. public bool InTeamArena;
  423. public bool InTeamArenaMap;
  424. public bool OnDragonSwing;
  425. public bool IsShieldBlock;
  426. public bool Killed = false;
  427. public bool awayTeleported = false;
  428. public bool WearsGoldPrize = false;
  429. public bool InAutoHunt;
  430. public bool FullyLoaded = false, HandleTiming = false;
  431. public Boolean IsGreen(Entity Entity) { return (Entity.Level - Level) >= 3; }
  432. public Boolean IsWhite(Entity Entity) { return (Entity.Level - Level) >= 0 && (Entity.Level - Level) < 3; }
  433. public Boolean IsRed(Entity Entity) { return (Entity.Level - Level) >= -4 && (Entity.Level - Level) < 0; }
  434. public Boolean IsBlack(Entity Entity) { return (Entity.Level - Level) < -4; }
  435. public bool SendUpdates = false;
  436. public bool UseItem = false;
  437. #endregion
  438. #region Objects
  439. public object SwitchJiang { get; set; }
  440. public static object[] name;
  441. public object CBpSyncRoot = new object();
  442. public object FlusterTime;
  443. #endregion
  444. #region Double And Floats
  445. public float ToxicFogPercent, StigmaIncrease, MagicShieldIncrease, DodgeIncrease, ShieldIncrease;
  446. public double ItemBless = 1.0;
  447. public float lianhuaranPercent;
  448. public double DragonGems;
  449. public double PhoenixGems;
  450. public float IntensifyPercent;
  451. #endregion
  452. public Time32 Tofanpointstamp;
  453. public Time32 LEtamp;
  454. public Time32 OnlinePointStamp;
  455. public Time32 MonstersPointstamp;
  456. #endregion
  457. public uint BankCps;
  458. private void UpdateDatabase(string column, long value)
  459. {
  460. if (EntityFlag == Game.EntityFlag.Player)
  461. if (FullyLoaded)
  462. new Database.MySqlCommand(MySqlCommandType.UPDATE).Update("entities").Set(column, value).Where("UID", UID).Execute();
  463.  
  464. }
  465.  
  466. public int EquippedTitle
  467. {
  468. get
  469. {
  470. return BitConverter.ToInt32(SpawnPacket, 288);
  471. }
  472. set
  473. {
  474. WriteInt32(value, 288, SpawnPacket);
  475. foreach (var player in Owner.Screen.Objects.Where(p => p.MapObjType == MapObjectType.Player))
  476. if (player != null)
  477. if ((player as Entity) != null)
  478. (player as Entity).Owner.Send(SpawnPacket);
  479. }
  480. }
  481. public int TitlePoints;
  482.  
  483. private uint Flor;
  484. public uint FlowerRank
  485. {
  486. get { return Flor; }
  487. set
  488. {
  489. Flor = value;
  490. Writer.Write(value + 10000, 137 + 9 + 4, SpawnPacket);
  491. }
  492. }
  493. public int UTitlePoints
  494. {
  495. get
  496. {
  497. return BitConverter.ToInt32(SpawnPacket, 292);
  498. }
  499. set
  500. {
  501. Writer.Write(value, 292, SpawnPacket);
  502. Update(89, (uint)value, false);
  503. foreach (var player in Owner.Screen.Objects.Where(p => p.MapObjType == MapObjectType.Player))
  504. if (player != null)
  505. if ((player as Entity) != null)
  506. (player as Entity).Owner.Send(SpawnPacket);
  507. }
  508. }
  509. public int EquippedWing
  510. {
  511. get
  512. {
  513. return BitConverter.ToInt32(SpawnPacket, 296);
  514. }
  515. set
  516. {
  517. Writer.Write(value, 296, SpawnPacket);
  518. foreach (var player in Owner.Screen.Objects.Where(p => p.MapObjType == MapObjectType.Player))
  519. if (player != null)
  520. if ((player as Entity) != null)
  521. (player as Entity).Owner.Send(SpawnPacket);
  522. }
  523. }
  524. public uint QuestKO
  525. {
  526. get
  527. {
  528. if (EntityFlag == Game.EntityFlag.Player)
  529. return Owner["QuestKO"];
  530. return 0;
  531. }
  532. set
  533. {
  534. if (EntityFlag == Game.EntityFlag.Player)
  535. Owner["QuestKO"] = value;
  536. }
  537. }
  538. public ushort PX
  539. {
  540. get;
  541. set;
  542. }
  543. public ushort PY
  544. {
  545. get;
  546. set;
  547. }
  548. public bool IsBowEquipped
  549. {
  550. get
  551. {
  552. if (EntityFlag == Game.EntityFlag.Player)
  553. {
  554. var right = Owner.Equipment.TryGetItem(ConquerItem.RightWeapon);
  555. if (right != null)
  556. {
  557. return PacketHandler.IsBow(right.ID);
  558. }
  559. }
  560. return false;
  561. // return Equipment.Select(ItemPosition.WeaponRight, (x) => x.IsBow);
  562. }
  563. }
  564. public Time32 ShieldBlockStamp;
  565. public int AdjustWeaponDamage(Entity target, int damage)
  566. {
  567. return MathHelper.MulDiv((int)damage, GetDefense2(target), DefaultDefense2);
  568. }
  569. public int GetDefense2(Entity target)
  570. {
  571. if (Reborn == 0) return DefaultDefense2;
  572.  
  573. var defense2 = (FirstRebornClass % 10) >= 3 ? 7000 : DefaultDefense2;
  574. if (Reborn < 2)
  575. {
  576. return defense2;
  577. }
  578.  
  579. if (target.EntityFlag == Game.EntityFlag.Monster)
  580. {
  581. return DefaultDefense2;
  582. }
  583.  
  584. var targetHero = target as Entity;
  585. if (targetHero != null)
  586. {
  587. return targetHero.Reborn < 2 ? 5000 : 7000;
  588. }
  589.  
  590. return defense2;
  591. }
  592. public int AdjustMagicDamage(Entity target, int damage)
  593. {
  594. return MathHelper.MulDiv(damage, GetDefense2(target), DefaultDefense2);
  595. }
  596. public bool RebornSpell(ushort skillid)
  597. {
  598. if (skillid == 9876 || skillid == 6002 || skillid == 10315 || skillid == 10311 || skillid == 10313 ||
  599. skillid == 6003 || skillid == 10405 || skillid == 30000 || skillid == 10310 || skillid == 3050 ||
  600. skillid == 3060 || skillid == 3080 || skillid == 3090)
  601. return true;
  602. else
  603. return false;
  604. }
  605. public int AdjustData(int data, int adjust, int maxData = 0)
  606. {
  607. return MathHelper.AdjustDataEx(data, adjust, maxData);
  608. }
  609. public bool OnIntensify()
  610. {
  611. return ContainsFlag(Network.GamePackets.Update.Flags.Intensify);
  612. }
  613. public int AdjustAttack(int attack)
  614. {
  615. // var addAttack = 0;
  616. if (OnIntensify())
  617. //attack = (int)((double)attack * IntensifyPercent); //PvP Reduction!
  618. attack = (int)((double)attack * 1.5); //PvP Reduction!
  619. else if (ContainsFlag(Network.GamePackets.Update.Flags.Stigma))
  620. attack += (int)((double)attack * 0.3);
  621. //{
  622. // addAttack += Math.Max(0, AdjustData((int)attack, 30)) - (int)attack;
  623. // attack = (attack + (addAttack * attack / 100));
  624. //}
  625. if (OnSuperman())
  626. attack += (int)((double)attack * 0.2); //PvP Reduction!
  627. if (OnSuperCyclone())
  628. attack += (int)((double)attack * 0.2); //PvP Reduction!
  629.  
  630. if (OnOblivion())
  631. attack += (int)((double)attack * 0.2); //PvP Reduction!
  632. if (OnFatalStrike())
  633. attack += (int)((double)attack * 0.2); //PvP Reduction!
  634.  
  635. //if (TryGetStatus(StatusType.KeepBow, out status))
  636. //{
  637. // addAttack += Math.Max(0, AdjustData(attack, status.Power)) - attack;
  638. //}
  639.  
  640. return attack;
  641. }
  642. public int AdjustDefense(int defense)
  643. {
  644. // var addDefense = 0;
  645.  
  646.  
  647. if (ContainsFlag(Network.GamePackets.Update.Flags.MagicShield))
  648. defense += (int)((double)defense * 0.3); //PvP Reduction!
  649. if (ContainsFlag3(Network.GamePackets.Update.Flags3.WarriorEpicShield))
  650. defense += (int)((double)defense * 0.4); //PvP Reduction!
  651.  
  652. return defense;
  653. }
  654. public int AdjustBowDefense(int defense)
  655. {
  656. return defense;
  657. }
  658. public int AdjustHitrate(int hitrate)
  659. {
  660. var addHitrate = 0;
  661.  
  662.  
  663. if (ContainsFlag(Network.GamePackets.Update.Flags.StarOfAccuracy))
  664. {
  665. addHitrate += Math.Max(0, AdjustData(hitrate, 30)) - hitrate;
  666. }
  667.  
  668. return hitrate + addHitrate;
  669. }
  670. public uint ArmorId
  671. {
  672. get
  673. {
  674. if (EntityFlag == Game.EntityFlag.Player)
  675. {
  676. var item = Owner.Equipment.TryGetItem(ConquerItem.Armor);
  677. if (item !=null)
  678. return item.ID;
  679. }
  680. return 0;
  681. }
  682. }
  683. public uint MonstersPoints;
  684. public uint OnlinePoints;
  685. public uint Tofanpoints;
  686. public uint LE;
  687. public int ReduceDamage { get { return (int)ItemBless; } }
  688. public void AzureShieldPacket()
  689. {
  690. var Remain = AzureShieldStamp.AddSeconds(MagicShieldTime) - DateTime.Now;
  691. Network.GamePackets.Update aupgrade = new Network.GamePackets.Update(true);
  692. aupgrade.UID = UID;
  693. aupgrade.Append(49
  694. , 93
  695. , (uint)Remain.TotalSeconds, AzureShieldDefence, AzureShieldLevel);
  696. Owner.Send(aupgrade);
  697. }
  698. public uint ExtraInventory
  699. {
  700. get { return _ExtraInventory; }
  701. set
  702. {
  703. if (EntityFlag == EntityFlag.Player)
  704. {
  705. Update(Network.GamePackets.Update.AvailableSlots, 300, false);
  706. Update(Network.GamePackets.Update.ExtraInventory, value, false);
  707. _ExtraInventory = value;
  708. }
  709. }
  710. }
  711. public ushort actionX
  712. {
  713. get { return _actionX; }
  714. set { _actionX = value; }
  715. }
  716. public ushort actionY
  717. {
  718. get { return _actionY; }
  719. set { _actionY = value; }
  720. }
  721. public WareHousePassword.Nextaction NextAction
  722. {
  723. get { return _NextAction; }
  724. set { _NextAction = value; }
  725. }
  726. public byte JiangTalent
  727. {
  728. get
  729. {
  730. return this.SpawnPacket[_JingHu_Talen];
  731. }
  732. set
  733. {
  734. Network.Writer.Write(value, (ushort)_JingHu_Talen, this.SpawnPacket);
  735. }
  736. }
  737. public bool JiangActive
  738. {
  739. get
  740. {
  741. return (this.SpawnPacket[_JiangHuActive] == 1);
  742. }
  743. set
  744. {
  745. Network.Writer.Write(value ? ((byte)1) : ((byte)0), (ushort)_JiangHuActive, this.SpawnPacket);
  746. }
  747. }
  748. public byte _SubClass;
  749. private uint _SubClassLevel;
  750. public byte SubClass
  751. {
  752. get
  753. {
  754. return this._SubClass;
  755. }
  756. set
  757. {
  758. this._SubClass = value;
  759. this.SpawnPacket[233] = (this.EntityFlag != TofanProject.Game.EntityFlag.Monster) ? this._SubClass : ((byte)0);
  760.  
  761. }
  762. }
  763. public uint SubClassLevel
  764. {
  765. get { return _SubClassLevel; }
  766. set
  767. {
  768. _SubClassLevel = value;
  769.  
  770. }
  771. }
  772. public byte SubClassesActive
  773. {
  774. get { return SpawnPacket[_ActiveSubclass]; }
  775. set { SpawnPacket[_ActiveSubclass] = value; }
  776. }
  777. #region offsets
  778. public static int
  779. _Mesh = 8,
  780. _UID = 12,
  781. _GuildID = 16,
  782. _GuildRank = 20,
  783. _StatusFlag = 26,
  784. _StatusFlag2 = 34,
  785. _StatusFlag3 = 42,
  786. _AppearanceType = 50,
  787. _Hitpoints = 103 + 4,
  788. _MonsterLevel = 109 + 4,
  789. _X = 111 + 4,
  790. _Y = 113 + 4,
  791. _HairStyle = 115 + 4,
  792. _Facing = 117 + 4,
  793. _Action = 118 + 4,
  794. _Reborn = 125 + 4,
  795. _Level = 130,
  796. _WindowSpawn = 128 + 4,
  797. _Away = 129 + 4,
  798. _ExtraBattlepower = 130 + 4,
  799. _FlowerIcon = 146 + 4,
  800. _NobilityRank = 150 + 4,
  801. _QuizPoints = 160 + 4,
  802. _ClanUID = 186 + 4,
  803. _ClanRank = 190 + 4,
  804. _Title = 198 + 4,
  805. _ShowArenaGlow = 209 + 4,
  806. _Boss = 212 + 4,
  807. _RaceItem = 214 + 4,
  808. _SubClass1 = 220 + 4,
  809. _SubClassesActive1 = 226 + 4,
  810. _ActiveSubclass = 229 + 4,
  811. _FirstRebornClass = 242,
  812. _SecondRebornClass = 244,
  813. _Class = 246,
  814. _AssassinColor = 241 + 9,
  815. _CountryCode = 244 + 4,
  816. _BattlePower = 250 + 4,
  817. _skillsoul = 253 + 4,
  818. _JingHu_Talen = 254 + 4,
  819. _JiangHuActive = 255 + 4,
  820. _skillsoul2 = 256 + 4,
  821. _CUID = 266 + 4,
  822. _NameClan = 296,
  823. _UnionName = 300 + 12,
  824. _UnionMember = 274,
  825. _UnionPoints = 278,
  826. _UnionColor = 279,
  827. _UnionLeader = 286,
  828. _UnionColor2 = 287,
  829. _AssassinAsBattlePower = 233 + 4 + 4 + 9 + 4,
  830. _WingColor = 278,
  831. _EpicColor = 250 + 4 + 9 + 4,
  832. _Names = 300;
  833. #endregion
  834.  
  835. public bool IsWarTop(ulong Title)
  836. {
  837. return Title >= 11 && Title <= 26;
  838. }
  839. public ConcurrentDictionary<ulong, DateTime> Halos;
  840. public void AddTopStatus(UInt64 Title, DateTime EndsOn, Boolean Db = true)
  841. {
  842. Title = TopStatusToInt(Title);
  843. Boolean HasFlag = false;
  844. if (IsWarTop(Title))
  845. {
  846. HasFlag = Titles.ContainsKey((TitlePacket.Titles)Title);
  847. Titles.TryAdd((TitlePacket.Titles)Title, EndsOn);
  848. }
  849. else
  850. {
  851. ulong T = (ulong)Title;
  852. HasFlag = Halos.ContainsKey(T);
  853. Halos[T] = EndsOn;
  854. if (Title == 7 || Title == 8
  855. || Title == 23 || Title == 24
  856. || Title == 25 || Title == 26
  857. || Title == 27 || Title == 28
  858. || Title == 29 || Title == 30
  859. || Title == 31 || Title == 32
  860. || Title == 33 || Title == 34
  861. || Title == 35 || Title == 36
  862. || Title == 37 || Title == 38
  863. || Title == 39 || Title == 40
  864. || Title == 22) AddFlag2(IntToTopStatus(Title));
  865. else AddFlag(IntToTopStatus(Title));
  866. }
  867. if (Db)
  868. {
  869. if (HasFlag)
  870. {
  871. MySqlCommand cmd = new MySqlCommand(MySqlCommandType.UPDATE);
  872. cmd.Update("status").Set("time", Kernel.ToDateTimeInt(EndsOn))
  873. .Where("status", Title).And("entityid", (UInt32)UID);
  874. cmd.Execute();
  875. }
  876. else
  877. {
  878. MySqlCommand cmd = new MySqlCommand(MySqlCommandType.INSERT);
  879. cmd.Insert("status")
  880. .Insert("entityid", (UInt32)UID)
  881. .Insert("status", Title)
  882. .Insert("time", Kernel.ToDateTimeInt(EndsOn));
  883. cmd.Execute();
  884. }
  885. }
  886. }
  887. public void AddTopStatus(UInt64 Title, byte flagtype, DateTime EndsOn, Boolean Db = true)
  888. {
  889. Boolean HasFlag = false;
  890. if (IsWarTop(Title))
  891. {
  892. HasFlag = Titles.ContainsKey((TitlePacket.Titles)Title);
  893. Titles.TryAdd((TitlePacket.Titles)Title, EndsOn);
  894. }
  895. else
  896. {
  897. switch (flagtype)
  898. {
  899. case 1:
  900. HasFlag = ContainsFlag(Title);
  901. AddFlag(Title);
  902. break;
  903. case 2:
  904. HasFlag = ContainsFlag2(Title);
  905. AddFlag2(Title);
  906. break;
  907. case 3:
  908. HasFlag = ContainsFlag3(Title);
  909. AddFlag3(Title);
  910. break;
  911. }
  912. }
  913. if (Db)
  914. {
  915. if (HasFlag)
  916. {
  917. MySqlCommand cmd = new MySqlCommand(MySqlCommandType.UPDATE);
  918. cmd.Update("status").Set("time", Kernel.ToDateTimeInt(EndsOn))
  919. .Where("status", Title).And("flagtype", flagtype).And("entityid", (UInt32)UID);
  920. cmd.Execute();
  921. }
  922. else
  923. {
  924. MySqlCommand cmd = new MySqlCommand(MySqlCommandType.INSERT);
  925. cmd.Insert("status").Insert("entityid", (UInt32)UID).Insert("status", Title).Insert("flagtype", flagtype).Insert("time", Kernel.ToDateTimeInt(EndsOn));
  926. cmd.Execute();
  927. }
  928. }
  929. }
  930. public void RemoveTopStatus(UInt64 Title, byte flagtype = 0)
  931. {
  932. ulong baseFlag = Title;//TopStatusToInt(Title);
  933. MySqlCommand cmd = new MySqlCommand(MySqlCommandType.DELETE);
  934. cmd.Delete("status", "entityid", UID).And("status", baseFlag).And("flagtype", flagtype).Execute();
  935.  
  936.  
  937. switch (flagtype)
  938. {
  939. case 0:
  940. {
  941. var title = (TitlePacket.Titles)baseFlag;
  942. if (Titles.ContainsKey(title))
  943. {
  944. Titles.Remove(title);
  945. if (MyTitle == title)
  946. MyTitle = Network.GamePackets.TitlePacket.Titles.None;
  947.  
  948. Owner.SendScreenSpawn(this, true);
  949. }
  950. break;
  951. }
  952. case 1:
  953. RemoveFlag(baseFlag);
  954. break;
  955. case 2:
  956. RemoveFlag2(baseFlag);
  957. break;
  958. case 3:
  959. RemoveFlag3(baseFlag);
  960. break;
  961. }
  962. }
  963. public void LoadTopStatus()
  964. {
  965. using (MySqlCommand Command = new MySqlCommand(MySqlCommandType.SELECT))
  966. {
  967. Command.Select("status").Where("entityid", UID).Execute();
  968. using (MySqlReader Reader = new MySqlReader(Command))
  969. {
  970. while (Reader.Read())
  971. {
  972. UInt64 Title = Reader.ReadUInt64("status");
  973. byte flagtype = Reader.ReadByte("flagtype");
  974. DateTime Time = Kernel.FromDateTimeInt(Reader.ReadUInt64("time"));
  975. if (DateTime.Now > Time)
  976. RemoveTopStatus(Title, flagtype);
  977. else
  978. {
  979. //if (!ContainsFlag(IntToTopStatus(Title)))
  980. AddTopStatus(Title, flagtype, Time, false);
  981. //else DeleteStatus(Title);
  982. }
  983. }
  984. }
  985. }
  986. }
  987. public uint CUID
  988. {
  989. get
  990. {
  991. if (SpawnPacket != null)
  992. return BitConverter.ToUInt32(SpawnPacket, _CUID);
  993. else
  994. return _uid;
  995. }
  996. set
  997. {
  998. _uid = value;
  999. Write(value, _CUID, SpawnPacket);
  1000. }
  1001. }
  1002. public TitlePacket.Titles MyTitle
  1003. {
  1004. get { return (TitlePacket.Titles)SpawnPacket[_Title]; }
  1005. set
  1006. {
  1007. SpawnPacket[_Title] = (Byte)value;
  1008. if (FullyLoaded)
  1009. {
  1010. MySqlCommand cmd = new MySqlCommand(MySqlCommandType.UPDATE);
  1011. cmd.Update("entities").Set("My_Title", (Byte)value).Where("uid", UID).Execute();
  1012. }
  1013. }
  1014. }
  1015. public short KOSpellTime
  1016. {
  1017. get
  1018. {
  1019. if (KOSpell == 1110)
  1020. {
  1021. if (ContainsFlag(Network.GamePackets.Update.Flags.Cyclone))
  1022. {
  1023. return CycloneTime;
  1024. }
  1025. }
  1026. else if (KOSpell == 1025)
  1027. {
  1028. if (ContainsFlag(Network.GamePackets.Update.Flags.Superman))
  1029. {
  1030. return SupermanTime;
  1031. }
  1032. }
  1033. return 0;
  1034. }
  1035. set
  1036. {
  1037. if (KOSpell == 1110)
  1038. {
  1039. if (ContainsFlag(Network.GamePackets.Update.Flags.Cyclone))
  1040. {
  1041. int Seconds = CycloneStamp.AddSeconds(value).AllSeconds() - Time32.Now.AllSeconds();
  1042. if (Seconds >= 20)
  1043. {
  1044. CycloneTime = 20;
  1045. CycloneStamp = Time32.Now;
  1046. }
  1047. else
  1048. {
  1049. CycloneTime = (short)Seconds;
  1050. CycloneStamp = Time32.Now;
  1051. }
  1052. }
  1053. }
  1054. if (KOSpell == 1025)
  1055. {
  1056. if (ContainsFlag(Network.GamePackets.Update.Flags.Superman))
  1057. {
  1058. int Seconds = SupermanStamp.AddSeconds(value).AllSeconds() - Time32.Now.AllSeconds();
  1059. if (Seconds >= 20)
  1060. {
  1061. SupermanTime = 20;
  1062. SupermanStamp = Time32.Now;
  1063. }
  1064. else
  1065. {
  1066. SupermanTime = (short)Seconds;
  1067. SupermanStamp = Time32.Now;
  1068. }
  1069. }
  1070. }
  1071. }
  1072. }
  1073. public bool DragonWarrior()
  1074. {
  1075. if (EntityFlag == Game.EntityFlag.Player)
  1076. {
  1077. var weapons = Owner.Weapons;
  1078. if (weapons.Item1 != null)
  1079. if (weapons.Item1.ID / 1000 == 617)
  1080. return true;
  1081. else if (weapons.Item2 != null)
  1082. if (weapons.Item2.ID / 1000 == 617)
  1083. return true;
  1084. }
  1085. return false;
  1086. }
  1087. public bool Transformed
  1088. {
  1089. get
  1090. {
  1091. return TransformationID != 98 && TransformationID != 99 && TransformationID != 0;
  1092. }
  1093. }
  1094. public byte FirstRebornClass
  1095. {
  1096. get
  1097. {
  1098. return cls;
  1099. }
  1100. set
  1101. {
  1102. cls = value;
  1103. SpawnPacket[_FirstRebornClass] = value;
  1104. Update(Network.GamePackets.Update.FirsRebornClass, value, false);
  1105. }
  1106. }
  1107. public byte SecondRebornClass
  1108. {
  1109. get
  1110. {
  1111. return secls;
  1112. }
  1113. set
  1114. {
  1115. secls = value;
  1116. SpawnPacket[_SecondRebornClass] = value;
  1117. Update(Network.GamePackets.Update.SecondRebornClass, value, false);
  1118. }
  1119. }
  1120. public byte ThirdRebornClass
  1121. {
  1122. get
  1123. {
  1124. return seclss;
  1125. }
  1126. set
  1127. {
  1128. seclss = value;
  1129. SpawnPacket[_Class] = value;
  1130. }
  1131. }
  1132. public Time32 LastTimeUseSlide = Time32.Now;
  1133. public uint MaxVigor
  1134. {
  1135. get
  1136. {
  1137. uint MaxVigor2 = 0;
  1138. if (!Owner.Equipment.Free(12))
  1139. {
  1140. ConquerItem dbi = Owner.Equipment.TryGetItem(12);
  1141. if (dbi.Plus == 1)
  1142. MaxVigor2 += 50;
  1143. if (dbi.Plus == 2)
  1144. MaxVigor2 += 120;
  1145. if (dbi.Plus == 3)
  1146. MaxVigor2 += 200;
  1147. if (dbi.Plus == 4)
  1148. MaxVigor2 += 350;
  1149. if (dbi.Plus == 5)
  1150. MaxVigor2 += 650;
  1151. if (dbi.Plus == 6)
  1152. MaxVigor2 += 1000;
  1153. if (dbi.Plus == 7)
  1154. MaxVigor2 += 1400;
  1155. if (dbi.Plus == 8)
  1156. MaxVigor2 += 2000;
  1157. if (dbi.Plus == 9)
  1158. MaxVigor2 += 2800;
  1159. if (dbi.Plus == 10)
  1160. MaxVigor2 += 3100;
  1161. if (dbi.Plus == 11)
  1162. MaxVigor2 += 3500;
  1163. if (dbi.Plus == 12)
  1164. MaxVigor2 += 4000;
  1165. MaxVigor2 += 30;
  1166. if (!Owner.Equipment.Free(ConquerItem.SteedCrop))
  1167. {
  1168. if (Owner.Equipment.Objects[18] != null)
  1169. {
  1170. if (Owner.Equipment.Objects[18].ID % 10 == 9)
  1171. {
  1172. MaxVigor2 += 1000;
  1173. }
  1174. else if (Owner.Equipment.Objects[18].ID % 10 == 8)
  1175. {
  1176. MaxVigor2 += 700;
  1177. }
  1178. else if (Owner.Equipment.Objects[18].ID % 10 == 7)
  1179. {
  1180. MaxVigor2 += 500;
  1181. }
  1182. else if (Owner.Equipment.Objects[18].ID % 10 == 6)
  1183. {
  1184. MaxVigor2 += 300;
  1185. }
  1186. else if (Owner.Equipment.Objects[18].ID % 10 == 5)
  1187. {
  1188. MaxVigor2 += 100;
  1189. }
  1190. }
  1191. }
  1192. }
  1193. return MaxVigor2;
  1194. }
  1195. }
  1196. public bool IsFire()
  1197. {
  1198. if (this.EntityFlag == Game.EntityFlag.Player)
  1199. {
  1200. if (this.Class >= 140 && this.Class <= 145)
  1201. {
  1202. return true;
  1203. }
  1204. else
  1205. return false;
  1206. }
  1207. else
  1208. return false;
  1209. }
  1210. public bool IsWater()
  1211. {
  1212. if (this.EntityFlag == Game.EntityFlag.Player)
  1213. {
  1214. if (this.Class >= 130 && this.Class <= 135)
  1215. {
  1216. return true;
  1217. }
  1218. else
  1219. return false;
  1220. }
  1221. else
  1222. return false;
  1223. }
  1224. public bool EpicTaoist()
  1225. {
  1226. if (EntityFlag == Game.EntityFlag.Player)
  1227. {
  1228. var weapons = Owner.Weapons;
  1229. if (weapons.Item1 != null && weapons.Item2 != null)
  1230. if (weapons.Item1.ID / 1000 == 620 && weapons.Item2.ID / 1000 == 619)//Backsword,Hossu
  1231. return true;
  1232.  
  1233. }
  1234. return false;
  1235. }
  1236. public int Energy
  1237. {
  1238. get { return _Energy; }
  1239. set
  1240. {
  1241. if (EntityFlag == EntityFlag.Player)
  1242. {
  1243. if (DataHolder.IsWather(this.Class) && EpicTaoist())
  1244. {
  1245. RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.FlameLotus);
  1246. if (value > 220)
  1247. value = 220;
  1248. Update upgrade = new Update(true);
  1249. upgrade.UID = UID;
  1250. upgrade.Append(78, 172, 5, (uint)value, 0);
  1251. this.Owner.SendScreen(upgrade.ToArray(), true);
  1252. if (value >= 200)
  1253. {
  1254. if (!ContainsFlag3((ulong)Network.GamePackets.Update.Flags3.AuroraLotus))
  1255. {
  1256. AddFlag3((ulong)Network.GamePackets.Update.Flags3.AuroraLotus);
  1257. }
  1258. }
  1259. }
  1260. else if (DataHolder.IsFire(this.Class) && EpicTaoist())
  1261. {
  1262. RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.AuroraLotus);
  1263. if (value > 330)
  1264. value = 330;
  1265. Update upgrade = new Update(true);
  1266. upgrade.UID = UID;
  1267. upgrade.Append(78, 173, 5, (uint)value, 0);
  1268. this.Owner.SendScreen(upgrade.ToArray(), true);
  1269. if (value >= 300)
  1270. {
  1271. if (!ContainsFlag3((ulong)Network.GamePackets.Update.Flags3.FlameLotus))
  1272. {
  1273. AddFlag3((ulong)Network.GamePackets.Update.Flags3.FlameLotus);
  1274. }
  1275. }
  1276. }
  1277. else
  1278. {
  1279. RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.AuroraLotus);
  1280. RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.FlameLotus);
  1281. }
  1282. }
  1283. _Energy = value;
  1284. }
  1285.  
  1286. }
  1287. /* public UInt16 BattlePowerCalc(Entity e)
  1288. {
  1289. UInt16 BP = (ushort)(e.Level + ExtraBattlePower);
  1290.  
  1291. if (e == null) return 0;
  1292. if (e.Owner == null) return 0;
  1293. var weapons = e.Owner.Weapons;
  1294. foreach (ConquerItem i in e.Owner.Equipment.Objects)
  1295. {
  1296. if (i == null) continue;
  1297. int pos = i.Position; if (pos > 20) pos -= 20;
  1298. if (pos != ConquerItem.Bottle &&
  1299. pos != ConquerItem.Garment && pos != ConquerItem.RightWeaponAccessory && pos != ConquerItem.LeftWeaponAccessory && pos != ConquerItem.SteedArmor)
  1300. {
  1301. if (!i.IsWorn) continue;
  1302. if (pos == ConquerItem.RightWeapon || pos == ConquerItem.LeftWeapon)
  1303. continue;
  1304. BP += ItemBatlePower(i);
  1305. }
  1306. }
  1307. if (weapons.Item1 != null)
  1308. {
  1309. var i = weapons.Item1;
  1310. Byte Multiplier = 1;
  1311. if (i.IsTwoHander())
  1312. Multiplier = weapons.Item2 == null ? (Byte)2 : (Byte)1;
  1313. BP += (ushort)(ItemBatlePower(i) * Multiplier);
  1314. }
  1315. if (weapons.Item2 != null)
  1316. BP += ItemBatlePower(weapons.Item2);
  1317. if (EntityFlag == Game.EntityFlag.Player)
  1318. {
  1319. BP += (Byte)e.NobilityRank;
  1320. }
  1321. BP += (Byte)(e.Reborn * 5);
  1322. BP += (Byte)GuildBattlePower;
  1323.  
  1324.  
  1325. return BP;
  1326. }*/
  1327. public ushort BattlePowerCalc(Entity e)
  1328. {
  1329. UInt16 BP = (ushort)(e.Level + ExtraBattlePower);
  1330.  
  1331. if (e == null) return 0;
  1332. if (e.Owner == null) return 0;
  1333. var weapons = e.Owner.Weapons;
  1334. foreach (ConquerItem i in e.Owner.Equipment.Objects)
  1335. {
  1336. if (i == null) continue;
  1337. int pos = i.Position;
  1338. if (pos > 20) pos -= 20;
  1339. if (pos != ConquerItem.Bottle &&
  1340. pos != ConquerItem.Garment && pos != ConquerItem.RightWeaponAccessory &&
  1341. pos != ConquerItem.LeftWeaponAccessory && pos != ConquerItem.SteedArmor)
  1342. {
  1343. if (!i.IsWorn) continue;
  1344. if (pos == ConquerItem.RightWeapon || pos == ConquerItem.LeftWeapon)
  1345. continue;
  1346. BP += ItemBatlePower(i);
  1347. }
  1348. }
  1349. if (weapons.Item1 != null)
  1350. {
  1351. var i = weapons.Item1;
  1352. Byte Multiplier = 1;
  1353. if (i.IsTwoHander())
  1354. Multiplier = weapons.Item2 == null ? (Byte)2 : (Byte)1;
  1355. BP += (ushort)(ItemBatlePower(i) * Multiplier);
  1356. }
  1357. if (weapons.Item2 != null)
  1358. {
  1359. BP += ItemBatlePower(weapons.Item2);
  1360. }
  1361. if (EntityFlag == Game.EntityFlag.Player)
  1362. {
  1363. BP += (Byte)e.NobilityRank;
  1364. }
  1365. BP += (Byte)(e.Reborn * 5);
  1366. BP += (Byte)GuildBattlePower;
  1367. BP += (ushort)ExtraBattlePower;
  1368. // EquipmentColor = BP;
  1369. return BP;
  1370. }
  1371. private ushort ItemBatlePower(ConquerItem i)
  1372. {
  1373. Byte Multiplier = 1;
  1374. Byte quality = (Byte)(i.ID % 10);
  1375. int BP = 0;
  1376. if (quality >= 6)
  1377. {
  1378. BP += (Byte)((quality - 5) * Multiplier);
  1379. }
  1380. if (i.SocketOne != 0)
  1381. {
  1382. BP += (Byte)(1 * Multiplier);
  1383. if ((Byte)i.SocketOne % 10 == 3)
  1384. BP += (Byte)(1 * Multiplier);
  1385. if (i.SocketTwo != 0)
  1386. {
  1387. BP += (Byte)(1 * Multiplier);
  1388. if ((Byte)i.SocketTwo % 10 == 3)
  1389. BP += (Byte)(1 * Multiplier);
  1390. }
  1391. }
  1392. BP += (Byte)(i.Plus * Multiplier);
  1393. return (ushort)BP;
  1394. }
  1395. public Entity(EntityFlag Flag, bool companion)
  1396. {
  1397. Companion = companion;
  1398. this.EntityFlag = Flag;
  1399. Mode = Enums.Mode.None;
  1400. update = new TofanProject.Network.GamePackets.Update(true);
  1401. update.UID = UID;
  1402. switch (Flag)
  1403. {
  1404. case EntityFlag.Player:
  1405. MapObjType = Game.MapObjectType.Player;
  1406. Halos = new ConcurrentDictionary<ulong, DateTime>();
  1407. break;
  1408. case EntityFlag.Monster: MapObjType = Game.MapObjectType.Monster; break;
  1409. }
  1410. SpawnPacket = new byte[0];
  1411. }
  1412. public void Ressurect()
  1413. {
  1414. if (EntityFlag == EntityFlag.Player)
  1415. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  1416. }
  1417. public void RemoveFlags()
  1418. {
  1419. RemoveFlag(Network.GamePackets.Update.Flags.Fly);
  1420. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  1421. RemoveFlag(Network.GamePackets.Update.Flags.Cyclone);
  1422. RemoveFlag(Network.GamePackets.Update.Flags.Superman);
  1423. RemoveFlag2(Network.GamePackets.Update.Flags2.CannonBarrage);
  1424. RemoveFlag(Network.GamePackets.Update.Flags.XPList);
  1425. RemoveFlag3((uint)(Network.GamePackets.Update.Flags3.SuperCyclone));
  1426. RemoveFlag3(Network.GamePackets.Update.Flags3.BladeFlurry);
  1427. RemoveFlag(Network.GamePackets.Update.Flags.FatalStrike);
  1428. RemoveFlag(Network.GamePackets.Update.Flags.FlashingName);
  1429. RemoveFlag(Network.GamePackets.Update.Flags.ShurikenVortex);
  1430. RemoveFlag2(Network.GamePackets.Update.Flags2.Oblivion);
  1431. RemoveFlag2(Network.GamePackets.Update.Flags2.AzureShield);
  1432. RemoveFlag2(Network.GamePackets.Update.Flags2.CarryingFlag);
  1433. RemoveFlag(Network.GamePackets.Update.Flags.CastPray);
  1434. RemoveFlag(Network.GamePackets.Update.Flags.Praying);
  1435. RemoveFlag2(Network.GamePackets.Update.Flags2.SoulShackle);
  1436. RemoveFlag3((uint)Network.GamePackets.Update.Flags3.DragonCyclone);
  1437. ToxicFogLeft = 0;
  1438. RemoveFlag2(Network.GamePackets.Update.Flags2.SoulShackle);
  1439. NoDrugsTime = 0;
  1440. RemoveFlag3(Network.GamePackets.Update.Flags3.GoldBrickNormal);
  1441. RemoveFlag3(Network.GamePackets.Update.Flags3.GoldBrickRefined);
  1442. RemoveFlag3(Network.GamePackets.Update.Flags3.GoldBrickUnique);
  1443. RemoveFlag3(Network.GamePackets.Update.Flags3.GoldBrickElite);
  1444. RemoveFlag3(Network.GamePackets.Update.Flags3.GoldBrickSuper);
  1445. RemoveFlag(Network.GamePackets.Update.Flags.Stigma);
  1446. RemoveFlag(Network.GamePackets.Update.Flags.MagicShield);
  1447. RemoveFlag3(Network.GamePackets.Update.Flags3.WarriorEpicShield);
  1448. RemoveFlag(Network.GamePackets.Update.Flags2.FendAura);
  1449. RemoveFlag(Network.GamePackets.Update.Flags2.TyrantAura);
  1450. RemoveFlag(Network.GamePackets.Update.Flags3.KineticSpark);
  1451. RemoveFlag(Network.GamePackets.Update.Flags2.EarthAura);
  1452. RemoveFlag(Network.GamePackets.Update.Flags2.EarthAura2);
  1453. RemoveFlag(Network.GamePackets.Update.Flags2.FendAura2);
  1454. RemoveFlag(Network.GamePackets.Update.Flags2.FireAura);
  1455. RemoveFlag(Network.GamePackets.Update.Flags2.FireAura2);
  1456. RemoveFlag(Network.GamePackets.Update.Flags2.MetalAura);
  1457. RemoveFlag(Network.GamePackets.Update.Flags2.MetalAura2);
  1458. RemoveFlag(Network.GamePackets.Update.Flags2.TyrantAura2);
  1459. RemoveFlag(Network.GamePackets.Update.Flags2.WaterAura);
  1460. RemoveFlag(Network.GamePackets.Update.Flags2.WaterAura2);
  1461. RemoveFlag(Network.GamePackets.Update.Flags2.WoodAura);
  1462. RemoveFlag(Network.GamePackets.Update.Flags2.WoodAura2);
  1463. RemoveFlag2(Network.GamePackets.Update.Flags2.ShieldBlock);
  1464. RemoveFlag3(Network.GamePackets.Update.Flags3.DivineGuard);
  1465. }
  1466. public void BringToLife()
  1467. {
  1468. Hitpoints = MaxHitpoints;
  1469. TransformationID = 0;
  1470. Stamina = 100;
  1471. FlashingNameTime = 0;
  1472. FlashingNameStamp = DateTime.Now;
  1473. RemoveFlag(Network.GamePackets.Update.Flags.FlashingName);
  1474. RemoveFlag(Network.GamePackets.Update.Flags.Dead | Network.GamePackets.Update.Flags.Ghost);
  1475. if (EntityFlag == EntityFlag.Player)
  1476. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status });
  1477. if (EntityFlag == Game.EntityFlag.Player)
  1478. {
  1479. Owner.Entity.AutoRev = 0;
  1480. Owner.ReviveStamp = Time32.Now;
  1481. Owner.Attackable = false;
  1482. Owner.Entity.LoadTopStatus();
  1483. }
  1484. }
  1485. public void DropRandomStuff(Entity KillerName)
  1486. {
  1487. if (Owner.Inventory.Count > 0)
  1488. {
  1489. var array = Owner.Inventory.Objects.ToArray();
  1490. uint count = (uint)(array.Length / 4);
  1491. byte startfrom = (byte)Kernel.Random.Next((int)count);
  1492. for (int c = 0; c < count; c++)
  1493. {
  1494. int index = c + startfrom;
  1495. if (array[index] != null)
  1496. {
  1497. if (PKPoints > 99)
  1498. {
  1499. if (array[index].Lock == 0)
  1500. {
  1501. if (array[index].UnlockEnd > DateTime.Now.AddDays(1))
  1502. {
  1503. if (!array[index].Bound && !array[index].Inscribed && array[index].ID != 723753)
  1504. {
  1505. if (!array[index].Suspicious && array[index].ID != 3000550)
  1506. {
  1507. var Item = array[index];
  1508. if (Item.ID >= 729960 && Item.ID <= 729970) return;
  1509. Item.Lock = 0;
  1510. var infos = Database.ConquerItemInformation.BaseInformations[(uint)Item.ID];
  1511. ushort x = X, y = Y;
  1512. Game.Map Map = Kernel.Maps[MapID];
  1513. if (Map.SelectCoordonates(ref x, ref y))
  1514. {
  1515. FloorItem floorItem = new FloorItem(true);
  1516. Owner.Inventory.Remove(Item, Enums.ItemUse.Remove);
  1517. floorItem.Item = Item;
  1518. floorItem.ValueType = FloorItem.FloorValueType.Item;
  1519. floorItem.ItemID = (uint)Item.ID;
  1520. floorItem.MapID = MapID;
  1521. floorItem.MapObjType = MapObjectType.Item;
  1522. floorItem.X = x;
  1523. floorItem.Y = y;
  1524. floorItem.Type = FloorItem.Drop;
  1525. floorItem.OnFloor = Time32.Now;
  1526. floorItem.ItemColor = floorItem.Item.Color;
  1527. floorItem.UID = FloorItem.FloorUID.Next;
  1528. while (Map.Npcs.ContainsKey(floorItem.UID))
  1529. floorItem.UID = FloorItem.FloorUID.Next;
  1530. Map.AddFloorItem(floorItem);
  1531. Owner.SendScreenSpawn(floorItem, true);
  1532. }
  1533.  
  1534. }
  1535. }
  1536. }
  1537. }
  1538. }
  1539. }
  1540. }
  1541. }
  1542. if (PKPoints >= 30 && Killer != null && Killer.Owner != null)
  1543. {
  1544. foreach (var Item in Owner.Equipment.Objects)
  1545. {
  1546. if (Item != null)
  1547. {
  1548. if (Item.Position == 9 || Item.Position == 12 || Item.Position == 17) return;
  1549. if (Item.Position == 5)
  1550. if (Item.ID.ToString().StartsWith("105")) return;
  1551. if (Kernel.Rate(35 + (int)(PKPoints > 30 ? 75 : 0)))
  1552. {
  1553. ushort x = X, y = Y;
  1554. Game.Map Map = Kernel.Maps[MapID];
  1555. if (Map.SelectCoordonates(ref x, ref y))
  1556. {
  1557. Owner.Equipment.RemoveToGround(Item.Position);
  1558. var infos = Database.ConquerItemInformation.BaseInformations[(uint)Item.ID];
  1559. FloorItem floorItem = new FloorItem(true);
  1560. floorItem.Item = Item;
  1561. floorItem.ValueType = FloorItem.FloorValueType.Item;
  1562. floorItem.ItemID = (uint)Item.ID;
  1563. floorItem.MapID = MapID;
  1564. floorItem.MapObjType = MapObjectType.Item;
  1565. floorItem.X = x;
  1566. floorItem.Y = y;
  1567. floorItem.Type = FloorItem.DropDetain;
  1568. floorItem.OnFloor = Time32.Now;
  1569. floorItem.ItemColor = floorItem.Item.Color;
  1570. floorItem.UID = FloorItem.FloorUID.Next;
  1571. while (Map.Npcs.ContainsKey(floorItem.UID))
  1572. floorItem.UID = FloorItem.FloorUID.Next;
  1573. Owner.SendScreenSpawn(floorItem, true);
  1574. Database.DetainedItemTable.DetainItem(Item, Owner, Killer.Owner);
  1575. Owner.Equipment.UpdateEntityPacket();
  1576. ClientEquip eq = new ClientEquip(Owner);
  1577. eq.DoEquips(Owner);
  1578. Owner.Send(eq);
  1579. break;
  1580. }
  1581. }
  1582. }
  1583. }
  1584. }
  1585. if (PKPoints > 99)
  1586. {
  1587. if (KillerName.EntityFlag == EntityFlag.Player)
  1588. {
  1589. foreach (var client in Kernel.GamePool.Values)
  1590. client.Send(new Network.GamePackets.Message(Name + " has been captured by " + KillerName.Name + " and sent in jail! The world is now safer!", Message.System));
  1591. Teleport(6000, 32, 73);
  1592. }
  1593. else
  1594. {
  1595. foreach (var client in Kernel.GamePool.Values)
  1596. client.Send(new Network.GamePackets.Message(Name + " has been captured and sent in jail! The world is now safer!", Message.System));
  1597. Teleport(6000, 32, 73);
  1598. }
  1599. }
  1600. }
  1601. public void Update(byte type, string value, uint UIDs, bool screen)
  1602. {
  1603. if (!SendUpdates) return;
  1604. _String update = new _String(true);
  1605. update.UID = UIDs;
  1606. update.Type = type;
  1607. update.TextsCount = 1;
  1608. update.Texts.Add(value);
  1609. if (EntityFlag == EntityFlag.Player)
  1610. {
  1611. if (!screen)
  1612. update.Send(Owner as Client.GameClient);
  1613. else (Owner as Client.GameClient).SendScreen(update, true);
  1614. }
  1615. else
  1616. {
  1617. MonsterInfo.SendScreen(update);
  1618. }
  1619. }
  1620. public void Die(UInt32 killer)
  1621. {
  1622. if (MyClones.Count != 0)
  1623. {
  1624. foreach (var clone in MyClones)
  1625. clone.RemoveThat();
  1626. MyClones.Clear();
  1627. }
  1628. this.RemoveFlag2(18014398509481984uL);
  1629. if (EntityFlag == EntityFlag.Player)
  1630. {
  1631. Owner.XPCount = 0;
  1632. if (OnDeath != null) OnDeath(this);
  1633. if (Owner.Booth != null)
  1634. {
  1635. Owner.Booth.Remove();
  1636. Owner.Booth = null;
  1637. }
  1638. }
  1639. Killed = true;
  1640. Hitpoints = 0;
  1641. DeathStamp = Time32.Now;
  1642. ToxicFogLeft = 0;
  1643. if (Companion)
  1644. {
  1645. AddFlag(Network.GamePackets.Update.Flags.Ghost | Network.GamePackets.Update.Flags.Dead | Network.GamePackets.Update.Flags.FadeAway);
  1646. Network.GamePackets.Attack attack = new Network.GamePackets.Attack(true);
  1647. attack.Attacked = UID;
  1648. attack.AttackType = Network.GamePackets.Attack.Kill;
  1649. attack.X = X;
  1650. attack.Y = Y;
  1651. MonsterInfo.SendScreen(attack);
  1652. Owner.Map.RemoveEntity(this);
  1653.  
  1654. Owner.Companion = null;
  1655. }
  1656. if (EntityFlag == EntityFlag.Player)
  1657. {
  1658. if (Constants.PKFreeMaps.Contains(MapID))
  1659. goto Over;
  1660. Over:
  1661. AddFlag(Network.GamePackets.Update.Flags.Ghost);
  1662. AddFlag((ulong)Network.GamePackets.Update.Flags.Dead);
  1663. RemoveFlag((ulong)Network.GamePackets.Update.Flags.Fly);
  1664. RemoveFlag((ulong)Network.GamePackets.Update.Flags.Ride);
  1665. RemoveFlag((ulong)Network.GamePackets.Update.Flags.Cyclone);
  1666. RemoveFlag((ulong)Network.GamePackets.Update.Flags.Superman);
  1667. RemoveFlag((ulong)Network.GamePackets.Update.Flags.FatalStrike);
  1668. RemoveFlag((ulong)Network.GamePackets.Update.Flags.FlashingName);
  1669. RemoveFlag((ulong)Network.GamePackets.Update.Flags.ShurikenVortex);
  1670. RemoveFlag((ulong)Network.GamePackets.Update.Flags.CastPray);
  1671. RemoveFlag((ulong)Network.GamePackets.Update.Flags.Praying);
  1672. RemoveFlag2((ulong)Network.GamePackets.Update.Flags2.Oblivion);
  1673. RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.SuperCyclone);
  1674. RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.DragonCyclone);
  1675. RemoveFlag2((ulong)Network.GamePackets.Update.Flags2.AzureShield);
  1676. RemoveFlag((ulong)Network.GamePackets.Update.Flags.GodlyShield);
  1677. RemoveFlag2((ulong)Network.GamePackets.Update.Flags2.CarryingFlag);
  1678. Attack attack = new Attack(true);
  1679. attack.AttackType = Network.GamePackets.Attack.Kill;
  1680. attack.X = X;
  1681. attack.Y = Y;
  1682. attack.Attacked = UID;
  1683. attack.Attacker = killer;
  1684. attack.Damage = 0;
  1685. Owner.SendScreen(attack, true);
  1686. if (Body % 10 < 3)
  1687. TransformationID = 99;
  1688. else
  1689. TransformationID = 98;
  1690.  
  1691. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  1692.  
  1693. Owner.EndQualifier();
  1694. Data data = new Data(true);
  1695. data.UID = UID;
  1696. data.ID = Data.OpenCustom;
  1697. data.dwParam = Data.CustomCommands.HideGUI;
  1698. Owner.Send(data);
  1699. }
  1700. else
  1701. {
  1702. Kernel.Maps[MapID].Floor[X, Y, MapObjType, this] = true;
  1703. }
  1704. if (EntityFlag == EntityFlag.Player)
  1705. if (OnDeath != null) OnDeath(this);
  1706. }
  1707. public Entity Killer;
  1708. public SafeDictionary<uint, PkExploits> PkExplorer = new SafeDictionary<uint, PkExploits>();
  1709. private byte _TalentStaus;
  1710. public byte TalentStaus
  1711. {
  1712. get
  1713. {
  1714. SpawnPacket[245] = _TalentStaus;
  1715. return _TalentStaus;
  1716. }
  1717. set
  1718. {
  1719. if (EntityFlag == EntityFlag.Player)
  1720. {
  1721. _TalentStaus = value;
  1722. SpawnPacket[245] = value;
  1723. SpawnPacket[246] = 1;
  1724. }
  1725. if (EntityFlag == EntityFlag.Monster)
  1726. {
  1727. _TalentStaus = value;
  1728. SpawnPacket[245] = value;
  1729. SpawnPacket[246] = 1;
  1730. }
  1731. }
  1732. }
  1733. public uint First;
  1734. public bool GmHide;
  1735. public bool cantdie = false;
  1736. public void Die(Entity killer)
  1737. {
  1738. if (cantdie)
  1739. return;
  1740. if (EntityFlag == EntityFlag.Player && killer.EntityFlag == EntityFlag.Player)
  1741. {
  1742. if (killer.MapID == 3355)
  1743. killer.Owner.ElitePk += 1;
  1744. if (Owner.Spells.ContainsKey(12660) && Owner.Entity.EpicWarrior())
  1745. {
  1746. XPCountTwist = Owner.XPCount;
  1747. }
  1748. if (ContainsFlag3((ulong)1UL << 53))
  1749. RemoveFlag3((ulong)1UL << 53);
  1750. #region Perfection
  1751. Game.Enums.PerfectionEffect effect = Enums.PerfectionEffect.StraightLife;
  1752. byte chance = 0;
  1753. new MsgRefineEffect().HandleStraightLife(this, ref chance);
  1754. if (Kernel.Rate(chance))
  1755. {
  1756. new MsgRefineEffect().SendEffect(this, killer, effect);
  1757. }
  1758. #endregion
  1759. #region PlunderWar
  1760. if ((DateTime.Now.DayOfWeek >= DayOfWeek.Wednesday && DateTime.Now.DayOfWeek <= DayOfWeek.Friday) && (DateTime.Now.Hour == 21) && (DateTime.Now.Minute <= 30))
  1761. {
  1762. if (MapID == 3935 && killer.MapID == 3935)
  1763. {
  1764. killer.KingdomDeed += 3;
  1765. if (killer.Owner.Team != null)
  1766. {
  1767. foreach (var tm in killer.Owner.Team.Teammates)
  1768. {
  1769. tm.Entity.KingdomDeed += 3;
  1770. }
  1771. }
  1772. }
  1773. }
  1774. #endregion
  1775. if (!Constants.PKFreeMaps.Contains(MapID))
  1776. {
  1777. if (Level < 140 && Experience != 0)
  1778. {
  1779. ulong amount = 0;
  1780. if (VIPLevel < 4)
  1781. {
  1782. Experience -= Math.Min(Hitpoints * MaxHitpoints * Level, Experience);
  1783. amount = Math.Min(Hitpoints * MaxHitpoints * Level, Experience);
  1784. killer.Owner.IncreaseExperience(amount, false);
  1785. }
  1786. else
  1787. {
  1788. Experience -= Math.Min(Hitpoints * MaxHitpoints * Level, Experience) / 2;
  1789. amount = Math.Min(Hitpoints * MaxHitpoints * Level, Experience) / 2;
  1790. killer.Owner.IncreaseExperience(amount, false);
  1791. }
  1792. Owner.Send(new Message("You lost " + amount + " EXP!", System.Drawing.Color.Red, Message.System));
  1793. }
  1794. }
  1795. Owner.Send(new Message("You are dead.", System.Drawing.Color.Red, Message.System));
  1796.  
  1797. }
  1798. if (MyClones.Count != 0)
  1799. {
  1800. foreach (var clone in MyClones)
  1801. clone.RemoveThat();
  1802. MyClones.Clear();
  1803. }
  1804. killer.CountKilling++;
  1805. #region CaptureTheFlag
  1806. if (killer.GuildID != 0 && killer.MapID == CaptureTheFlag.MapID && CaptureTheFlag.IsWar)
  1807. {
  1808. if (GuildID != 0)
  1809. {
  1810. if (killer.GuildID != GuildID) { CaptureTheFlag.AddScore(1, killer.Owner.Guild); CaptureTheFlag.AddExploits(1, killer.Owner.AsMember); }
  1811. }
  1812. if (ContainsFlag2((ulong)Network.GamePackets.Update.Flags2.CarryingFlag))
  1813. {
  1814. RemoveFlag2((ulong)Network.GamePackets.Update.Flags2.CarryingFlag);
  1815. killer.AddFlag2((ulong)Network.GamePackets.Update.Flags2.CarryingFlag);
  1816. }
  1817. if (Program.World.CTF.Bases.ContainsKey(UID))
  1818. {
  1819. var _base = Program.World.CTF.Bases[UID];
  1820. _base.Capture();
  1821. }
  1822. }
  1823. #endregion
  1824. if (killer.CountKilling >= 100 && killer.HeavenBlessing > 0 && killer.BlessedHunting < 4578)
  1825. {
  1826. killer.CountKilling = 0;
  1827. killer.BlessedHunting += 1;
  1828. }
  1829. else if (killer.BlessedHunting >= 4578)
  1830. {
  1831. killer.Owner.MessageBox("You have reached the maximum amount of EXP available from bonus hunting. Would you like to claim it, now?",
  1832. (p) =>
  1833. {
  1834. killer.Owner.IncreaseExperience((ulong)(killer.BlessedHunting / 600.0 * killer.Owner.ExpBall), false);
  1835. killer.BlessedHunting = 0;
  1836. MentorPremio Premio = new MentorPremio();
  1837. Premio.Action = MentorPremio.Show;
  1838. Premio.OnlineTraining = killer.OnlineTraining;
  1839. Premio.BlessedHunting = killer.BlessedHunting;
  1840. killer.Owner.Send(Premio.ToArray());
  1841. });
  1842. }
  1843.  
  1844. #region Die Guild System
  1845. if (killer.EntityFlag == EntityFlag.Player && EntityFlag == EntityFlag.Player)
  1846. {
  1847.  
  1848. if (Owner.Guild != null && killer.Owner.Guild != null && Owner.Map.ID == 1015)
  1849. {
  1850. Owner.Guild.pkp_donation += 2;
  1851. Owner.Guild.pkp_donation -= 2;
  1852. foreach (var client in Kernel.GamePool.Values)
  1853. {
  1854. client.Send(new Message("The " + killer.Owner.AsMember.Rank + " " + killer.Name + " of the Guild " + killer.Owner.Guild.Name + " has killed the " + killer.Owner.AsMember.Rank + " " + Name + " of the Guild " + Owner.Guild.Name + " at BirdIsland!", System.Drawing.Color.Yellow, Network.GamePackets.Message.Guild));
  1855. }
  1856. }
  1857. if (Owner.Guild != null && killer.Owner.Guild != null && Owner.Map.ID == 1020)
  1858. {
  1859. Owner.Guild.pkp_donation += 2;
  1860. Owner.Guild.pkp_donation -= 2;
  1861. foreach (var client in Kernel.GamePool.Values)
  1862. client.Send(new Message("The " + killer.Owner.AsMember.Rank + " " + killer.Name + " of the Guild " + killer.Owner.Guild.Name + " has killed the " + killer.Owner.AsMember.Rank + " " + Name + " of the Guild " + Owner.Guild.Name + " at ApeCity!", System.Drawing.Color.Yellow, Network.GamePackets.Message.Guild));
  1863. }
  1864. if (Owner.Guild != null && killer.Owner.Guild != null && Owner.Map.ID == 1011)
  1865. {
  1866. Owner.Guild.pkp_donation += 2;
  1867. Owner.Guild.pkp_donation -= 2;
  1868. foreach (var client in Kernel.GamePool.Values)
  1869. client.Send(new Message("The " + killer.Owner.AsMember.Rank + " " + killer.Name + " of the Guild " + killer.Owner.Guild.Name + " has killed the " + killer.Owner.AsMember.Rank + " " + Name + " of the Guild " + Owner.Guild.Name + " at PhoenixCastle!", System.Drawing.Color.Yellow, Network.GamePackets.Message.Guild));
  1870. }
  1871. if (Owner.Guild != null && killer.Owner.Guild != null && Owner.Map.ID == 1000)
  1872. {
  1873. Owner.Guild.pkp_donation += 2;
  1874. Owner.Guild.pkp_donation -= 2;
  1875. foreach (var client in Kernel.GamePool.Values)
  1876. client.Send(new Message("The " + killer.Owner.AsMember.Rank + " " + killer.Name + " of the Guild " + killer.Owner.Guild.Name + " has killed the " + killer.Owner.AsMember.Rank + " " + Name + " of the Guild " + Owner.Guild.Name + " at DesertCity!", System.Drawing.Color.Yellow, Network.GamePackets.Message.Guild));
  1877. }
  1878. }
  1879. #endregion
  1880. RemoveFlags();
  1881. if (EntityFlag == EntityFlag.Player)
  1882. {
  1883. Owner.XPCount = 0;
  1884. if (OnDeath != null) OnDeath(this);
  1885. if (Owner.Booth != null)
  1886. {
  1887. Owner.Booth.Remove();
  1888. Owner.Booth = null;
  1889. }
  1890. }
  1891. Killer = killer;
  1892. Hitpoints = 0;
  1893. DeathStamp = Time32.Now;
  1894. ToxicFogLeft = 0;
  1895. if (Companion)
  1896. {
  1897. AddFlag(Network.GamePackets.Update.Flags.Ghost | Network.GamePackets.Update.Flags.Dead | Network.GamePackets.Update.Flags.FadeAway);
  1898. Network.GamePackets.Attack zattack = new Network.GamePackets.Attack(true);
  1899. zattack.Attacked = UID;
  1900. zattack.AttackType = Network.GamePackets.Attack.Kill;
  1901. zattack.X = X;
  1902. zattack.Y = Y;
  1903. MonsterInfo.SendScreen(zattack);
  1904. Owner.Map.RemoveEntity(this);
  1905. Owner.Companion = null;
  1906. }
  1907.  
  1908. if (EntityFlag == EntityFlag.Player)
  1909. {
  1910. if (killer.EntityFlag == EntityFlag.Player)
  1911. {
  1912. #region PKFreeMaps
  1913. if (Constants.PKFreeMaps.Contains(killer.MapID))
  1914. goto Over;
  1915. if (killer.Owner.Map.BaseID == 700)
  1916. goto Over;
  1917. #endregion
  1918. #region JiangHu
  1919. if (killer.PKMode == Enums.PKMode.Jiang && killer.JiangActive == true)
  1920. {
  1921. if (PKMode == Enums.PKMode.Jiang || JiangActive == true)
  1922. {
  1923. if (killer.MyJiang != null && MyJiang != null)
  1924. {
  1925. if ((killer.MyJiang.Talent >= 1 && killer.MyJiang.Talent <= 5) && (MyJiang.Talent >= 1 && MyJiang.Talent <= 5))
  1926. {
  1927. #region killed > killer
  1928. if (MyJiang.Talent > killer.MyJiang.Talent)
  1929. {
  1930. if (MyJiang.Talent >= 2)
  1931. {
  1932. MyJiang.Talent -= 1;
  1933. }
  1934. if (killer.MyJiang.Talent == 5)
  1935. {
  1936. //return;
  1937. }
  1938. else
  1939. {
  1940. killer.MyJiang.Talent += 1;
  1941. }
  1942. Killer.MyJiang.FreeCourse += 10000;
  1943. }
  1944. #endregion
  1945. #region killed < killer
  1946. else if (MyJiang.Talent < killer.MyJiang.Talent)
  1947. {
  1948. if (killer.MyJiang.Talent == 5)
  1949. {
  1950. //return;
  1951. }
  1952. Killer.MyJiang.FreeCourse += 10000;
  1953. }
  1954. #endregion
  1955. #region killed = killer
  1956. else if (MyJiang.Talent == killer.MyJiang.Talent)
  1957. {
  1958. if (MyJiang.Talent > 1)
  1959. {
  1960. MyJiang.Talent -= 1;
  1961. if (killer.MyJiang.Talent == 5)
  1962. {
  1963. //return;
  1964. }
  1965. else
  1966. {
  1967. killer.MyJiang.Talent += 1;
  1968. }
  1969. }
  1970. else if (MyJiang.Talent == 1)
  1971. {
  1972. killer.MyJiang.Talent += 1;
  1973. }
  1974. Killer.MyJiang.FreeCourse += 10000;
  1975. }
  1976. #endregion
  1977. #region TalentStatus
  1978. #region Killer Status
  1979. Killer.TalentStaus = Killer.MyJiang.Talent;
  1980. Killer.JiangActive = Killer.MyJiang.OnJiangMode;
  1981. Writer.WriteByte(Killer.TalentStaus, 245, Killer.SpawnPacket);
  1982. MyJiang.SendInfo(Killer.Owner, 7, new string[] { Killer.UID.ToString(), Killer.TalentStaus.ToString(), Killer.MyJiang.OnJiangMode ? "1" : "2" });
  1983. MyJiang.SendInfo(Killer.Owner, 5, Killer.ToString(), Killer.MyJiang.Talent.ToString());
  1984. Killer.Owner.SendScreen(Killer.SpawnPacket, false);
  1985. #endregion
  1986. #region Killed Status
  1987. TalentStaus = MyJiang.Talent;
  1988. JiangActive = MyJiang.OnJiangMode;
  1989. Writer.WriteByte(TalentStaus, 245, SpawnPacket);
  1990. MyJiang.SendInfo(Owner, 7, new string[] { UID.ToString(), TalentStaus.ToString(), MyJiang.OnJiangMode ? "1" : "2" });
  1991. MyJiang.SendInfo(Owner, 5, ToString(), MyJiang.Talent.ToString());
  1992. Owner.SendScreen(SpawnPacket, false);
  1993. #endregion
  1994. Database.JiangHu.SaveJiangHu();
  1995. #endregion
  1996. goto Over;
  1997. }
  1998. }
  1999. }
  2000. }
  2001. #endregion
  2002. if (((killer.PKMode != TofanProject.Game.Enums.PKMode.Jiang) && (killer.PKMode != TofanProject.Game.Enums.PKMode.Guild) && (killer.PKMode != TofanProject.Game.Enums.PKMode.Revenge) && (!ContainsFlag(Network.GamePackets.Update.Flags.FlashingName) && !ContainsFlag(Network.GamePackets.Update.Flags.BlackName)) && !this.ContainsFlag(1L)) && !this.ContainsFlag(0x8000L))
  2003. {
  2004. killer.AddFlag(Network.GamePackets.Update.Flags.FlashingName);
  2005. killer.FlashingNameStamp = DateTime.Now;
  2006. killer.FlashingNameTime = 60;
  2007. if (killer.GuildID != 0)
  2008. {
  2009. if (killer.Owner.Guild.Enemy.ContainsKey(GuildID))
  2010. {
  2011. killer.PKPoints += 3;
  2012. killer.Cursed = Time32.Now;
  2013. Update update = new Update(true) { UID = killer.UID };
  2014. update.Append(Network.GamePackets.Update.CursedTimer, UID);
  2015. killer.AddFlag(Network.GamePackets.Update.Flags.Cursed);
  2016. killer.Owner.Send(update.ToArray());
  2017. }
  2018. else
  2019. {
  2020. if (!killer.Owner.Enemy.ContainsKey(UID))
  2021. killer.PKPoints += 10;
  2022. else
  2023. killer.PKPoints += 5;
  2024. killer.PKPoints += 3;
  2025. killer.Cursed = Time32.Now;
  2026. Update update = new Update(true) { UID = killer.UID };
  2027. update.Append(Network.GamePackets.Update.CursedTimer, UID);
  2028. killer.AddFlag(Network.GamePackets.Update.Flags.Cursed);
  2029. killer.Owner.Send(update.ToArray());
  2030. }
  2031. }
  2032. else
  2033. {
  2034. if (!killer.Owner.Enemy.ContainsKey(UID))
  2035. {
  2036. killer.PKPoints += 10;
  2037. }
  2038. else
  2039. {
  2040. killer.PKPoints += 5;
  2041. }
  2042. killer.Cursed = Time32.Now;
  2043. Update update = new Update(true) { UID = killer.UID };
  2044. update.Append(Network.GamePackets.Update.CursedTimer, UID);
  2045. killer.AddFlag(Network.GamePackets.Update.Flags.Cursed);
  2046. killer.Owner.Send(update.ToArray());
  2047. }
  2048. if (killer.EntityFlag == EntityFlag.Player)
  2049. {
  2050. if (EntityFlag == EntityFlag.Player)
  2051. {
  2052. PkExploits pk = new PkExploits();
  2053. if (!killer.PkExplorer.ContainsKey(UID))
  2054. {
  2055. pk.UID = killer.UID;
  2056. pk.killedUID = UID;
  2057. pk.Name = Name;
  2058. pk.Map = MapID;
  2059. pk.Killing = 1;
  2060. pk.BattlePower = (uint)BattlePower;
  2061. pk.Time = DateTime.Now;
  2062. PkExploitsTable.Insert(killer.Owner, pk);
  2063. }
  2064. else
  2065. {
  2066. pk.UID = killer.UID;
  2067. pk.killedUID = UID;
  2068. pk.Name = Name;
  2069. killer.PkExplorer[UID].Map = MapID;
  2070. pk.Map = killer.PkExplorer[UID].Map;
  2071. killer.PkExplorer[UID].Killing += 1;
  2072. pk.Killing = killer.PkExplorer[UID].Killing;
  2073. killer.PkExplorer[UID].BattlePower = (uint)BattlePower;
  2074. pk.BattlePower = killer.PkExplorer[UID].BattlePower;
  2075. pk.Time = DateTime.Now;
  2076. PkExploitsTable.Update(killer.Owner, pk);
  2077. }
  2078. /* if (killer.HeavenBlessing == 0 && HeavenBlessing != 0)
  2079. {
  2080. killer.CursedTime += 300;
  2081. Chat.SendCursed(killer.CursedTime, killer.Owner);
  2082. Owner.Send("Your heaven Blessing takes effect! you lose no EXP.");
  2083. }
  2084. if (ExpProtectionTime > 600)
  2085. {
  2086. ExpProtectionTime -= 600;
  2087. FlagsUpdate update = new FlagsUpdate(true);
  2088. update.UID = UID;
  2089. update.Append((byte)FlagsUpdate.DataType.ExpProtection, 0, ExpProtectionTime, 1, 0);
  2090. Owner.Send(update.ToArray());
  2091. killer.Owner.Inventory.Add(3002560, 0, 1);
  2092. Owner.Send("Your heaven Protection takes effect! you lose no EXP.");
  2093. }*/
  2094. if (InAutoHunt)
  2095. {
  2096. AutoHunt AutoHunt = new AutoHunt(true);
  2097. AutoHunt.Action = AutoHunt.Mode.KilledBy;
  2098. AutoHunt.Unknown = 3329;
  2099. AutoHunt.KilledName = killer.Name;
  2100. AutoHunt.EXPGained = AutoHuntEXP;
  2101. Owner.IncreaseExperience(Owner.Entity.AutoHuntEXP, false);
  2102. Owner.Entity.AutoHuntEXP = 0;
  2103. Owner.Send(AutoHunt.ToArray());
  2104. AutoRevStamp = Time32.Now;
  2105. AutoRev = 20;
  2106. }
  2107. }
  2108. }
  2109.  
  2110. Network.PacketHandler.AddEnemy(this.Owner, killer.Owner);
  2111. }
  2112. if (killer.PKMode != TofanProject.Game.Enums.PKMode.Jiang)
  2113. {
  2114. if (killer.EntityFlag == TofanProject.Game.EntityFlag.Player)
  2115. {
  2116. if (Kernel.Rate(50))
  2117. {
  2118. DropRandomStuff(Killer);
  2119. }
  2120. }
  2121. }
  2122. }
  2123. }
  2124. Over:
  2125.  
  2126. Network.GamePackets.Attack attack = new Attack(true);
  2127. attack.Attacker = killer.UID;
  2128. attack.Attacked = UID;
  2129. attack.AttackType = Network.GamePackets.Attack.Kill;
  2130. attack.X = X;
  2131. attack.Y = Y;
  2132.  
  2133. if (EntityFlag == EntityFlag.Player)
  2134. {
  2135. AddFlag(Network.GamePackets.Update.Flags.Ghost);
  2136. AddFlag(Network.GamePackets.Update.Flags.Dead);
  2137. RemoveFlags();
  2138. SpiritFocus = false;
  2139. #region Aura
  2140. if (Aura_isActive)
  2141. {
  2142. RemoveFlag2(Aura_actType);
  2143. Owner.removeAuraBonuses(Aura_actType, Aura_actPower, 1);
  2144. Aura_isActive = false;
  2145. AuraTime = 0;
  2146. Aura_actType = 0;
  2147. Aura_actPower = 0;
  2148. }
  2149. #endregion
  2150. if (Body % 10 < 3)
  2151. TransformationID = 99;
  2152. else
  2153. TransformationID = 98;
  2154. Owner.SendScreen(attack, true);
  2155. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  2156.  
  2157. Owner.EndQualifier();
  2158. }
  2159. else
  2160. {
  2161.  
  2162. if (!Companion && !IsDropped)
  2163. MonsterInfo.Drop(killer);
  2164. Kernel.Maps[MapID].Floor[X, Y, MapObjType, this] = true;
  2165. if (killer.EntityFlag == EntityFlag.Player)
  2166. {
  2167. #region Team
  2168. if (killer.Owner.Team != null)
  2169. {
  2170. killer.Owner.IncreaseExperience(MaxHitpoints, true);
  2171. foreach (Client.GameClient teammate in killer.Owner.Team.Teammates)
  2172. {
  2173. if (Kernel.GetDistance(killer.X, killer.Y, teammate.Entity.X, teammate.Entity.Y) <= Constants.pScreenDistance)
  2174. {
  2175. if (killer.UID != teammate.Entity.UID)
  2176. {
  2177. uint extraExperience = MaxHitpoints / 2;
  2178. if (killer.Spouse == teammate.Entity.Name)
  2179. extraExperience = MaxHitpoints * 2;
  2180. byte TLevelN = teammate.Entity.Level;
  2181. if (killer.Owner.Team.CanGetNoobExperience(teammate))
  2182. {
  2183. if (teammate.Entity.Level < 137)
  2184. {
  2185. extraExperience *= 2;
  2186. teammate.IncreaseExperience(extraExperience, false);
  2187. teammate.Send(Constants.NoobTeamExperience(extraExperience));
  2188. }
  2189. }
  2190. else
  2191. {
  2192. if (teammate.Entity.Level < 137)
  2193. {
  2194. teammate.IncreaseExperience(extraExperience, false);
  2195. teammate.Send(Constants.TeamExperience(extraExperience));
  2196. }
  2197. }
  2198. byte TLevelNn = teammate.Entity.Level;
  2199. byte newLevel = (byte)(TLevelNn - TLevelN);
  2200. if (newLevel != 0)
  2201. {
  2202. if (TLevelN < 70)
  2203. {
  2204. for (int i = TLevelN; i < TLevelNn; i++)
  2205. {
  2206. teammate.Team.Teammates[0].VirtuePoints += (uint)(i * 3.83F);
  2207. teammate.Team.SendMessage(new Message("The leader, " + teammate.Team.Teammates[0].Entity.Name + ", has gained " + (uint)(i * 7.7F) + " virtue points for power leveling the rookies.", System.Drawing.Color.Red, Message.Team));
  2208. }
  2209. }
  2210. }
  2211. }
  2212. }
  2213. }
  2214. }
  2215. #endregion
  2216. killer.Owner.XPCount++;
  2217. if (killer.OnKOSpell())
  2218. killer.KOSpellTime++;
  2219. }
  2220. }
  2221. if (EntityFlag == EntityFlag.Player)
  2222. if (OnDeath != null) OnDeath(this);
  2223.  
  2224. }
  2225. public void RemoveMagicDefender()
  2226. {
  2227. if (MagicDefenderOwner && HasMagicDefender)
  2228. {
  2229. if (Owner.Team != null && HasMagicDefender && MagicDefenderOwner)
  2230. {
  2231. foreach (var mate in Owner.Team.Teammates)
  2232. {
  2233. mate.Entity.HasMagicDefender = false;
  2234. mate.Entity.MagicDefenderSecs = 0;
  2235. mate.Entity.RemoveFlag3(TofanProject.Network.GamePackets.Update.Flags3.MagicDefender);
  2236. mate.Entity.Update(mate.Entity.StatusFlag, mate.Entity.StatusFlag2, mate.Entity.StatusFlag3, TofanProject.Network.GamePackets.Update.MagicDefenderIcone, 0x80, 0, 0, false);
  2237. }
  2238. }
  2239. MagicDefenderOwner = false;
  2240. }
  2241. RemoveFlag3(TofanProject.Network.GamePackets.Update.Flags3.MagicDefender);
  2242. Update(StatusFlag, StatusFlag2, StatusFlag3, TofanProject.Network.GamePackets.Update.MagicDefenderIcone, 0x80, 0, 0, false);
  2243. HasMagicDefender = false;
  2244. }
  2245. public void Update(ulong val1, ulong val2, ulong val3, uint val4, uint val5, uint val6, uint val7, bool screen)
  2246. {
  2247.  
  2248. if (this.Owner == null)
  2249. return;
  2250. update = new Update(true);
  2251. update.UID = UID;
  2252. update.Append(val1, val2, val3, val4, val5, val6, val7);
  2253.  
  2254. if (!screen)
  2255. update.Send(Owner);
  2256. else
  2257. Owner.SendScreen(update, true);
  2258. }
  2259. public void Update(byte type, uint value, uint secondvalue)
  2260. {
  2261. Network.GamePackets.Update upd = new Update(true);
  2262. upd.Append(type, value);
  2263. upd.Append(type, secondvalue);
  2264. upd.UID = UID;
  2265. Owner.Send(upd);
  2266. }
  2267. public void Update(byte type, byte value, bool screen)
  2268. {
  2269. if (!SendUpdates)
  2270. return;
  2271. if (this.Owner == null)
  2272. return;
  2273. update = new Update(true);
  2274. update.UID = UID;
  2275. update.Append(type, value, 0, 0, 0, 0, 0, 0, 0);
  2276. if (!screen)
  2277. update.Send(Owner);
  2278. else
  2279. Owner.SendScreen(update, true);
  2280. }
  2281. public void UpdateClan(byte value)
  2282. {
  2283. if (!SendUpdates)
  2284. return;
  2285. if (this.Owner == null)
  2286. return;
  2287. update = new Update(true);
  2288. update.AppendClanBPIcon(Owner,value);
  2289. update.Send(Owner);
  2290. }
  2291. public void Update(byte type, ushort value, bool screen)
  2292. {
  2293. if (!SendUpdates)
  2294. return;
  2295. update = new Update(true);
  2296. update.UID = UID;
  2297. update.Append(type, value);
  2298. if (!screen)
  2299. update.Send(Owner as Client.GameClient);
  2300. else
  2301. (Owner as Client.GameClient).SendScreen(update, true);
  2302. }
  2303. public void Update(byte type, double value, bool screen)
  2304. {
  2305. if (!SendUpdates)
  2306. return;
  2307. update = new Update(true);
  2308. update.UID = UID;
  2309. update.Append(type, value);
  2310. if (!screen)
  2311. update.Send(Owner as Client.GameClient);
  2312. else
  2313. (Owner as Client.GameClient).SendScreen(update, true);
  2314. }
  2315. public void Update(byte type, uint value, bool screen)
  2316. {
  2317. if (!SendUpdates)
  2318. return;
  2319. update = new Update(true);
  2320. update.UID = UID;
  2321. update.Append(type, value);
  2322. if (!screen)
  2323. update.Send(Owner as Client.GameClient);
  2324. else
  2325. (Owner as Client.GameClient).SendScreen(update, true);
  2326. }
  2327. public void Update(byte type, ulong value, bool screen)
  2328. {
  2329. if (!SendUpdates)
  2330. return;
  2331. update = new Update(true);
  2332. update.UID = UID;
  2333. update.Append(type, value);
  2334. if (EntityFlag == EntityFlag.Player)
  2335. {
  2336. if (!screen)
  2337. update.Send(Owner as Client.GameClient);
  2338. else
  2339. (Owner as Client.GameClient).SendScreen(update, true);
  2340. }
  2341. else
  2342. {
  2343. MonsterInfo.SendScreen(update);
  2344. }
  2345. }
  2346. public void Update(byte type, ulong value, ulong value2, bool screen)
  2347. {
  2348. if (!SendUpdates)
  2349. return;
  2350. update = new Update(true);
  2351. update.UID = UID;
  2352. update.PoPAppend(type, value, value2);
  2353. if (!screen)
  2354. update.Send(Owner as Client.GameClient);
  2355. else
  2356. (Owner as Client.GameClient).SendScreen(update, true);
  2357. }
  2358. public void UpdateEffects(bool screen)
  2359. {
  2360.  
  2361. if (!SendUpdates)
  2362. return;
  2363. update = new Update(true);
  2364. update.UID = UID;
  2365. update.AppendFull(0x19, StatusFlag, StatusFlag2, StatusFlag3);
  2366. if (EntityFlag == EntityFlag.Player)
  2367. {
  2368. if (!screen)
  2369. update.Send(Owner as Client.GameClient);
  2370. else
  2371. (Owner as Client.GameClient).SendScreen(update, true);
  2372. }
  2373. else
  2374. {
  2375. MonsterInfo.SendScreen(update);
  2376. }
  2377. }
  2378. public void Update2(byte type, ulong value, bool screen)
  2379. {
  2380. if (!SendUpdates)
  2381. return;
  2382. update = new Update(true);
  2383. update.UID = UID;
  2384. update.Append2(type, value);
  2385. if (EntityFlag == EntityFlag.Player)
  2386. {
  2387. if (!screen)
  2388. update.Send(Owner as Client.GameClient);
  2389. else
  2390. (Owner as Client.GameClient).SendScreen(update, true);
  2391. }
  2392. else
  2393. {
  2394. MonsterInfo.SendScreen(update);
  2395. }
  2396. }
  2397. public void Update(byte type, string value, bool screen)
  2398. {
  2399. if (!SendUpdates)
  2400. return;
  2401. Network.GamePackets._String update = new _String(true);
  2402. update.UID = this.UID;
  2403. update.Type = type;
  2404. update.TextsCount = 1;
  2405. update.Texts.Add(value);
  2406. if (EntityFlag == EntityFlag.Player)
  2407. {
  2408. if (!screen)
  2409. update.Send(Owner as Client.GameClient);
  2410. else
  2411. (Owner as Client.GameClient).SendScreen(update, true);
  2412. }
  2413. else
  2414. {
  2415. MonsterInfo.SendScreen(update);
  2416. }
  2417. }
  2418. public void UpdatePass(string column, long value)
  2419. {
  2420. if (EntityFlag == Game.EntityFlag.Player)
  2421. if (FullyLoaded)
  2422. new Database.MySqlCommand(TofanProject.Database.MySqlCommandType.UPDATE).Update("entities").Set(column, value).Where("UID", UID).Execute();
  2423. }
  2424. public bool UnionActive
  2425. {
  2426. get { return (SpawnPacket[_UnionMember] == 1); }
  2427. set { WriteByte(value ? ((byte)1) : ((byte)0), _UnionMember, SpawnPacket); }
  2428. }
  2429. public byte ServerID
  2430. {
  2431. get { return SpawnPacket[261]; }
  2432. set { SpawnPacket[261] = value; }
  2433. }
  2434. public bool Move(Enums.ConquerAngle Direction, int teleport = 1)
  2435. {
  2436. ushort _X = X, _Y = Y;
  2437. Facing = Direction;
  2438. int dir = ((int)Direction) % XDir.Length;
  2439. sbyte xi = XDir[dir], yi = YDir[dir];
  2440. _X = (ushort)(X + xi);
  2441. _Y = (ushort)(Y + yi);
  2442. Game.Map Map = null;
  2443. if (Kernel.Maps.TryGetValue(MapID, out Map))
  2444. {
  2445. var objType = MapObjType;
  2446. if (Map.Floor[_X, _Y, objType])
  2447. {
  2448. if (objType == MapObjectType.Monster)
  2449. {
  2450. Map.Floor[_X, _Y, MapObjType] = false;
  2451. Map.Floor[X, Y, MapObjType] = true;
  2452. }
  2453. X = _X;
  2454. Y = _Y;
  2455. return true;
  2456. }
  2457. else
  2458. {
  2459. if (Mode == Enums.Mode.None)
  2460. if (EntityFlag != EntityFlag.Monster)
  2461. if (teleport == 1)
  2462. Teleport(MapID, X, Y);
  2463. return false;
  2464. }
  2465. }
  2466. else
  2467. {
  2468. if (EntityFlag != EntityFlag.Monster)
  2469. Teleport(MapID, X, Y);
  2470. else
  2471. return false;
  2472. }
  2473. return true;
  2474. }
  2475. public bool Move(Enums.ConquerAngle Direction, bool slide)
  2476. {
  2477. ushort _X = X, _Y = Y;
  2478. if (!slide)
  2479. return Move((Enums.ConquerAngle)((byte)Direction % 8));
  2480.  
  2481. int dir = ((int)Direction) % XDir2.Length;
  2482. Facing = Direction;
  2483. sbyte xi = XDir2[dir], yi = YDir2[dir];
  2484. _X = (ushort)(X + xi);
  2485. _Y = (ushort)(Y + yi);
  2486.  
  2487. Game.Map Map = null;
  2488.  
  2489. if (Kernel.Maps.TryGetValue(MapID, out Map))
  2490. {
  2491. if (Map.Floor[_X, _Y, MapObjType])
  2492. {
  2493. if (MapObjType == MapObjectType.Monster)
  2494. {
  2495. Map.Floor[_X, _Y, MapObjType] = false;
  2496. Map.Floor[X, Y, MapObjType] = true;
  2497. }
  2498. X = _X;
  2499. Y = _Y;
  2500. return true;
  2501. }
  2502. else
  2503. {
  2504. if (Mode == Enums.Mode.None)
  2505. {
  2506. if (EntityFlag != EntityFlag.Monster)
  2507. Teleport(MapID, X, Y);
  2508. else
  2509. return false;
  2510. }
  2511. }
  2512. }
  2513. else
  2514. {
  2515. if (EntityFlag != EntityFlag.Monster)
  2516. Teleport(MapID, X, Y);
  2517. else
  2518. return false;
  2519. }
  2520. return true;
  2521. }
  2522. public void SendSpawn(Client.GameClient client)
  2523. {
  2524. SendSpawn(client, true);
  2525. }
  2526.  
  2527. public void SendSpawn(Client.GameClient client, bool checkScreen = true)
  2528. {
  2529. if (!this.Invisable)
  2530. {
  2531. if (client.Screen.Add(this) || !checkScreen)
  2532. {
  2533. if (EntityFlag == Game.EntityFlag.Player)
  2534. {
  2535. if (client.InQualifier() && this.Owner.IsWatching() || (this.SkillTeamWatchingElitePKMatch != null || this.Owner.WatchingElitePKMatch != null) || this.Invisable)
  2536. return;
  2537. if (Owner.WatchingElitePKMatch != null)
  2538. return;
  2539. if (Invisable) return;
  2540. if (this.Owner.IsFairy)
  2541. {
  2542. FairySpawn FS = new FairySpawn(true);
  2543. FS.SType = this.Owner.SType;
  2544. FS.FairyType = this.Owner.FairyType;
  2545. FS.UID = this.UID;
  2546. client.Send(FS);
  2547. }
  2548. Data generalData = new Data(true);
  2549. generalData.UID = client.Entity.UID;
  2550. generalData.ID = Data.AppearanceType;
  2551. generalData.dwParam = (uint)client.Entity.Appearance;
  2552. client.SendScreen(generalData, true);
  2553. client.Send(SpawnPacket);
  2554. }
  2555. else
  2556. {
  2557. client.Send(SpawnPacket);
  2558. }
  2559. if (EntityFlag == EntityFlag.Player)
  2560. {
  2561. if (Owner.Booth != null)
  2562. {
  2563. client.Send(Owner.Booth);
  2564. if (Owner.Booth.HawkMessage != null)
  2565. client.Send(Owner.Booth.HawkMessage);
  2566. }
  2567. }
  2568. }
  2569. }
  2570. }
  2571.  
  2572. public void Shift(ushort X, ushort Y)
  2573. {
  2574. if (EntityFlag == EntityFlag.Player)
  2575. {
  2576. if (!Database.MapsTable.MapInformations.ContainsKey(MapID))
  2577. return;
  2578. this.X = X;
  2579. this.Y = Y;
  2580. Network.GamePackets.Data Data = new Network.GamePackets.Data(true);
  2581. Data.UID = UID;
  2582. Data.ID = Network.GamePackets.Data.FlashStep;
  2583. Data.dwParam = MapID;
  2584. Data.wParam1 = X;
  2585. Data.wParam2 = Y;
  2586. Owner.SendScreen(Data, true);
  2587. Owner.Screen.Reload(null);
  2588. }
  2589. }
  2590. public void nAddFlag(int flag)
  2591. {
  2592. BitVector32.Add(flag);
  2593.  
  2594. for (byte x = 0; x < BitVector32.bits.Length; x++)
  2595. Write(BitVector32.bits[x], (ushort)((byte)26 + x * 4), SpawnPacket);
  2596. nUpdateEffects(true);
  2597. }
  2598. public bool nContainsFlag(int flag)
  2599. {
  2600. return BitVector32.Contain(flag);
  2601. }
  2602. public void nRemoveFlag(int flag)
  2603. {
  2604. if (nContainsFlag(flag))
  2605. {
  2606. BitVector32.Remove(flag);
  2607.  
  2608. for (byte x = 0; x < BitVector32.bits.Length; x++)
  2609. Write(BitVector32.bits[x], (ushort)((byte)26 + x * 4), SpawnPacket);
  2610.  
  2611. nUpdateEffects(true);
  2612. }
  2613. }
  2614. public void nUpdateEffects(bool screen)
  2615. {
  2616. if (!SendUpdates)
  2617. return;
  2618. update = new Update(true);
  2619. update.UID = UID;
  2620. update.Append(Network.GamePackets.Update.StatusFlag, BitVector32.bits);
  2621. if (EntityFlag == EntityFlag.Player)
  2622. {
  2623. if (EntityFlag == EntityFlag.Player)
  2624. {
  2625. if (!screen)
  2626. update.Send(Owner as Client.GameClient);
  2627. else
  2628. (Owner as Client.GameClient).SendScreen(update, true);
  2629. }
  2630. else
  2631. {
  2632. MonsterInfo.SendScreen(update);
  2633. }
  2634. }
  2635. }
  2636. public void AddFlag(ulong flag)
  2637. {
  2638. StatusFlag |= flag;
  2639. }
  2640. public bool ContainsFlag(ulong flag)
  2641. {
  2642. ulong aux = StatusFlag;
  2643. aux &= ~flag;
  2644. return !(aux == StatusFlag);
  2645. }
  2646. public void RemoveFlag(ulong flag)
  2647. {
  2648. if (ContainsFlag(flag))
  2649. {
  2650. StatusFlag &= ~flag;
  2651. }
  2652. }
  2653. public void AddFlag2(ulong flag)
  2654. {
  2655. if (flag == Network.GamePackets.Update.Flags2.SoulShackle) { StatusFlag2 |= flag; return; }
  2656. if (!ContainsFlag(Network.GamePackets.Update.Flags.Dead) && !ContainsFlag(Network.GamePackets.Update.Flags.Ghost))
  2657. StatusFlag2 |= flag;
  2658. }
  2659.  
  2660. public UInt64 TopStatusToInt(UInt64 top)
  2661. {
  2662. switch (top)
  2663. {
  2664. case Network.GamePackets.Update.Flags.TopWaterTaoist:
  2665. return 1;
  2666. case Network.GamePackets.Update.Flags.TopWarrior:
  2667. return 2;
  2668. case Network.GamePackets.Update.Flags.TopTrojan:
  2669. return 3;
  2670. case Network.GamePackets.Update.Flags.TopArcher:
  2671. return 4;
  2672. case Network.GamePackets.Update.Flags.TopNinja:
  2673. return 5;
  2674. case Network.GamePackets.Update.Flags.TopFireTaoist:
  2675. return 6;
  2676. case Network.GamePackets.Update.Flags2.TopMonk:
  2677. return 7;
  2678. case Network.GamePackets.Update.Flags.TopSpouse:
  2679. return 8;
  2680. case Network.GamePackets.Update.Flags.TopGuildLeader:
  2681. return 9;
  2682. case Network.GamePackets.Update.Flags.TopDeputyLeader:
  2683. return 10;
  2684. case Network.GamePackets.Update.Flags.MonthlyPKChampion:
  2685. return 20;
  2686. case Network.GamePackets.Update.Flags.WeeklyPKChampion:
  2687. return 21;
  2688. case Network.GamePackets.Update.Flags2.TopPirate:
  2689. return 22;
  2690. }
  2691.  
  2692. return top;
  2693. }
  2694. public UInt64 IntToTopStatus(UInt64 top)
  2695. {
  2696. switch (top)
  2697. {
  2698. case 1:
  2699. return Network.GamePackets.Update.Flags.TopWaterTaoist;
  2700. case 2:
  2701. return Network.GamePackets.Update.Flags.TopWarrior;
  2702. case 3:
  2703. return Network.GamePackets.Update.Flags.TopTrojan;
  2704. case 4:
  2705. return Network.GamePackets.Update.Flags.TopArcher;
  2706. case 5:
  2707. return Network.GamePackets.Update.Flags.TopNinja;
  2708. case 6:
  2709. return Network.GamePackets.Update.Flags.TopFireTaoist;
  2710. case 7:
  2711. return Network.GamePackets.Update.Flags2.TopMonk;
  2712. case 8:
  2713. return Network.GamePackets.Update.Flags.TopSpouse;
  2714. case 9:
  2715. return Network.GamePackets.Update.Flags.TopGuildLeader;
  2716. case 10:
  2717. return Network.GamePackets.Update.Flags.TopDeputyLeader;
  2718. case 20:
  2719. return Network.GamePackets.Update.Flags.MonthlyPKChampion;
  2720. case 21:
  2721. return Network.GamePackets.Update.Flags.WeeklyPKChampion;
  2722. case 22:
  2723. return Network.GamePackets.Update.Flags2.TopPirate;
  2724. }
  2725. return top;
  2726. }
  2727. public bool ContainsFlag2(ulong flag)
  2728. {
  2729. ulong aux = StatusFlag2;
  2730. aux &= ~flag;
  2731. return !(aux == StatusFlag2);
  2732. }
  2733. public void RemoveFlag2(ulong flag)
  2734. {
  2735. if (ContainsFlag2(flag))
  2736. {
  2737. StatusFlag2 &= ~flag;
  2738. }
  2739. }
  2740. public void AddFlag3(ulong flag)
  2741. {
  2742. StatusFlag3 |= flag;
  2743. }
  2744. public bool ContainsFlag3(ulong flag)
  2745. {
  2746. ulong aux = StatusFlag3;
  2747. aux &= ~flag;
  2748. return !(aux == StatusFlag3);
  2749. }
  2750. public void RemoveFlag3(ulong flag)
  2751. {
  2752. if (ContainsFlag3(flag))
  2753. {
  2754. StatusFlag3 &= ~flag;
  2755. }
  2756. }
  2757. public Enums.AppearanceType Appearance
  2758. {
  2759. get { return (Enums.AppearanceType)BitConverter.ToUInt16(SpawnPacket, _AppearanceType); }
  2760. set {Writer.Write((ushort)value, _AppearanceType, SpawnPacket); }
  2761. }
  2762. public bool fMove(Enums.ConquerAngle Direction, ref ushort _X, ref ushort _Y)
  2763. {
  2764. Facing = Direction;
  2765. sbyte xi = 0, yi = 0;
  2766. switch (Direction)
  2767. {
  2768. case Enums.ConquerAngle.North: xi = -1; yi = -1; break;
  2769. case Enums.ConquerAngle.South: xi = 1; yi = 1; break;
  2770. case Enums.ConquerAngle.East: xi = 1; yi = -1; break;
  2771. case Enums.ConquerAngle.West: xi = -1; yi = 1; break;
  2772. case Enums.ConquerAngle.NorthWest: xi = -1; break;
  2773. case Enums.ConquerAngle.SouthWest: yi = 1; break;
  2774. case Enums.ConquerAngle.NorthEast: yi = -1; break;
  2775. case Enums.ConquerAngle.SouthEast: xi = 1; break;
  2776. }
  2777. _X = (ushort)(_X + xi);
  2778. _Y = (ushort)(_Y + yi);
  2779. if (EntityFlag == Game.EntityFlag.Player)
  2780. {
  2781. if (Owner.Map.Floor[_X, _Y, MapObjType, null])
  2782. return true;
  2783. else
  2784. return false;
  2785. }
  2786. else
  2787. {
  2788. Game.Map Map = null;
  2789. if (Kernel.Maps.TryGetValue(MapID, out Map))
  2790. {
  2791. if (Map.Floor[_X, _Y, MapObjType, null])
  2792. return true;
  2793. else
  2794. return false;
  2795. }
  2796. return true;
  2797. }
  2798. }
  2799. public void SetLocation(ushort MapID, ushort X, ushort Y)
  2800. {
  2801. if (EntityFlag == EntityFlag.Player)
  2802. {
  2803. this.X = X;
  2804. this.Y = Y;
  2805. this.MapID = MapID;
  2806. }
  2807. }
  2808. public void Teleport(ushort MapID, ushort X, ushort Y, bool Old_Cordinates = true, bool remove = false)
  2809. {
  2810. if (MyClones.Count != 0)
  2811. {
  2812. foreach (var clone in MyClones)
  2813. clone.RemoveThat();
  2814. MyClones.Clear();
  2815. }
  2816. if (EntityFlag == EntityFlag.Player)
  2817. {
  2818. if (Owner.Entity.InAutoHunt)
  2819. {
  2820. AutoHunt AutoHunt = new AutoHunt(false);
  2821. AutoHunt.Action = AutoHunt.Mode.ChangedMap;
  2822. AutoHunt.EXPGained = Owner.Entity.AutoHuntEXP;
  2823. Owner.Send(AutoHunt.ToArray());
  2824.  
  2825. AutoHunt.Action = AutoHunt.Mode.EXPGained;
  2826. AutoHunt.EXPGained = Owner.Entity.AutoHuntEXP;
  2827. Owner.Send(AutoHunt.ToArray());
  2828.  
  2829. Owner.Entity.RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.AutoHunting);
  2830. Owner.Entity.AutoHuntEXP = 0;
  2831. Owner.Entity.InAutoHunt = false;
  2832. }
  2833. ushort baseID = 0;
  2834. if (!Kernel.Maps.ContainsKey(MapID))
  2835. {
  2836. if (!Database.MapsTable.MapInformations.ContainsKey(MapID) && Owner.QualifierGroup == null)
  2837. {
  2838. baseID = MapID = 1002;
  2839. X = 432;
  2840. Y = 378;
  2841. }
  2842. else
  2843. {
  2844. baseID = Database.MapsTable.MapInformations[MapID].BaseID;
  2845. }
  2846. }
  2847. else
  2848. {
  2849. baseID = Kernel.Maps[MapID].BaseID;
  2850. }
  2851.  
  2852. if (EntityFlag == EntityFlag.Player)
  2853. {
  2854. if (Owner.InQualifier())
  2855. if (MapID != 700 && MapID < 11000)
  2856. Owner.EndQualifier();
  2857. }
  2858. if (MapID == this.MapID)
  2859. {
  2860. Teleport(X, Y);
  2861. return;
  2862. }
  2863. this.X = X;
  2864. this.Y = Y;
  2865. this.PreviousMapID = this.MapID;
  2866. this.MapID = MapID;
  2867. Network.GamePackets.Data Data = new Network.GamePackets.Data(true);
  2868. Data.UID = UID;
  2869. Data.ID = Network.GamePackets.Data.Teleport;
  2870. Data.dwParam = baseID;
  2871. Data.wParam1 = X;
  2872. Data.wParam2 = Y;
  2873. Owner.Send(Data);
  2874. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  2875. Owner.Entity.Action = TofanProject.Game.Enums.ConquerAction.None;
  2876. Owner.ReviveStamp = Time32.Now;
  2877. Owner.Attackable = false;
  2878. Owner.Screen.Reload(null);
  2879. Owner.ReshareClan();
  2880. if (Owner.Team != null)
  2881. foreach (var teammate in Owner.Team.Teammates)
  2882. teammate.ReshareClan();
  2883. Owner.Entity.addeffect("moveback");
  2884. if (!Owner.Equipment.Free(12))
  2885. if (Owner.Map.ID == 1036 && Owner.Equipment.TryGetItem((byte)12).Plus < 6)
  2886. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  2887.  
  2888.  
  2889. }
  2890. }
  2891. public void addeffect(string effect)
  2892. {
  2893. _String str = new _String(true);
  2894. str.UID = this.UID;
  2895. str.Type = _String.Effect;
  2896. str.Texts.Add(effect);
  2897. str.TextsCount = 1;
  2898. if (EntityFlag == Game.EntityFlag.Player)
  2899. {
  2900. this.SendScreen(str);
  2901. }
  2902. }
  2903. public void TeleportTeam(ushort MapID, ushort X, ushort Y)
  2904. {
  2905. if (Owner.Team != null)
  2906. {
  2907. foreach (var someone in Owner.Team.Teammates)
  2908. {
  2909. #region AutoHunt
  2910. if (someone.Entity.InAutoHunt)
  2911. {
  2912. AutoHunt AutoHunt = new AutoHunt(false);
  2913. AutoHunt.Action = AutoHunt.Mode.ChangedMap;
  2914. AutoHunt.EXPGained = someone.Entity.AutoHuntEXP;
  2915. someone.Send(AutoHunt.ToArray());
  2916.  
  2917. AutoHunt.Action = AutoHunt.Mode.EXPGained;
  2918. AutoHunt.EXPGained = someone.Entity.AutoHuntEXP;
  2919. someone.Send(AutoHunt.ToArray());
  2920. someone.IncreaseExperience(someone.Entity.AutoHuntEXP, false);
  2921. someone.Entity.RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.AutoHunting);
  2922. someone.Entity.AutoHuntEXP = 0;
  2923. someone.Entity.InAutoHunt = false;
  2924. }
  2925. #endregion
  2926. if (MyClones.Count != 0)
  2927. {
  2928. foreach (var clone in MyClones)
  2929. clone.RemoveThat();
  2930. MyClones.Clear();
  2931. }
  2932. #region Pets
  2933. if (someone.Companion != null)
  2934. {
  2935. someone.Map.RemoveEntity(someone.Companion);
  2936. Data data = new Data(true);
  2937. data.UID = someone.Companion.UID;
  2938. data.ID = Network.GamePackets.Data.RemoveEntity;
  2939. someone.Companion.MonsterInfo.SendScreen(data);
  2940. someone.Companion = null;
  2941. }
  2942. #endregion
  2943. if (EntityFlag == EntityFlag.Player)
  2944. {
  2945. ushort baseID = 0;
  2946. if (!Kernel.Maps.ContainsKey(MapID)) return;
  2947. else
  2948. {
  2949. baseID = Kernel.Maps[MapID].BaseID;
  2950. }
  2951. if (someone.InQualifier())
  2952. if (MapID != 700 && MapID < 11000)
  2953. someone.EndQualifier();
  2954. someone.Entity.PrevX = someone.Entity.X;
  2955. someone.Entity.PrevY = someone.Entity.Y;
  2956. someone.Entity.X = X;
  2957. someone.Entity.Y = Y;
  2958. someone.Entity.PreviousMapID = someone.Entity.MapID;
  2959. someone.Entity.MapID = MapID;
  2960. Network.GamePackets.Data Data = new Network.GamePackets.Data(true);
  2961. Data.UID = UID;
  2962. Data.ID = Network.GamePackets.Data.Teleport;
  2963. Data.dwParam = baseID;
  2964. Data.wParam1 = X;
  2965. Data.wParam2 = Y;
  2966. someone.Send(Data);
  2967. someone.Send(new MapStatus() { BaseID = someone.Map.BaseID, ID = someone.Map.ID, Status = Database.MapsTable.MapInformations[someone.Map.ID].Status, Weather = Database.MapsTable.MapInformations[someone.Map.ID].Weather });
  2968. someone.Entity.Action = TofanProject.Game.Enums.ConquerAction.None;
  2969. someone.ReviveStamp = Time32.Now;
  2970. someone.Attackable = false;
  2971. someone.Screen.Reload(null);
  2972. someone.ReshareClan();
  2973. if (!someone.Equipment.Free(12))
  2974. if (someone.Map.ID == 1036 && someone.Equipment.TryGetItem((byte)12).Plus < 6)
  2975. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  2976. }
  2977. }
  2978. }
  2979. else
  2980. {
  2981. if (this != null && Owner != null)
  2982. {
  2983. if (this.MapID == 3935 && MapID != 3935)
  2984. {
  2985. byte[] buf = new byte[28 + 8];
  2986. buf[0] = 28;
  2987. Writer.Write(2501, 2, buf);
  2988. buf[4] = 1;
  2989. Writer.Write(this.UID, 8, buf);
  2990. Writer.Write(uint.MaxValue - this.UID, 12, buf);
  2991. Owner.Send(buf);
  2992. PKMode = Game.Enums.PKMode.Capture;
  2993. Owner.Send(new Data(true) { UID = UID, ID = Data.ChangePKMode, dwParam = (uint)PKMode });
  2994. }
  2995. #region AutoHunt
  2996. if (Owner.Entity.InAutoHunt)
  2997. {
  2998. AutoHunt AutoHunt = new AutoHunt(false);
  2999. AutoHunt.Action = AutoHunt.Mode.ChangedMap;
  3000. AutoHunt.EXPGained = Owner.Entity.AutoHuntEXP;
  3001. Owner.Send(AutoHunt.ToArray());
  3002.  
  3003. AutoHunt.Action = AutoHunt.Mode.EXPGained;
  3004. AutoHunt.EXPGained = Owner.Entity.AutoHuntEXP;
  3005. Owner.Send(AutoHunt.ToArray());
  3006. Owner.IncreaseExperience(Owner.Entity.AutoHuntEXP, false);
  3007. Owner.Entity.RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.AutoHunting);
  3008. Owner.Entity.AutoHuntEXP = 0;
  3009. Owner.Entity.InAutoHunt = false;
  3010. }
  3011. #endregion
  3012. if (MyClones.Count != 0)
  3013. {
  3014. foreach (var clone in MyClones)
  3015. clone.RemoveThat();
  3016. MyClones.Clear();
  3017. }
  3018. #region Pets
  3019. if (Owner.Companion != null)
  3020. {
  3021. Owner.Map.RemoveEntity(Owner.Companion);
  3022. Data data = new Data(true);
  3023. data.UID = Owner.Companion.UID;
  3024. data.ID = Network.GamePackets.Data.RemoveEntity;
  3025. Owner.Companion.MonsterInfo.SendScreen(data);
  3026. Owner.Companion = null;
  3027. }
  3028. #endregion
  3029. if (EntityFlag == EntityFlag.Player)
  3030. {
  3031. #region IfThePlayerInSameMapThatWillTeleportToIt
  3032. if (this.MapID == MapID)
  3033. {
  3034. if (!Database.MapsTable.MapInformations.ContainsKey(MapID) && !Owner.InQualifier())
  3035. {
  3036. MapID = 1002;
  3037. X = 300;
  3038. Y = 278;
  3039. }
  3040. this.X = X;
  3041. this.Y = Y;
  3042. Network.GamePackets.Data Data = new Network.GamePackets.Data(true);
  3043. Data.UID = UID;
  3044. Data.ID = Network.GamePackets.Data.Teleport;
  3045. Data.dwParam = Database.MapsTable.MapInformations[MapID].BaseID;
  3046. Data.wParam1 = X;
  3047. Data.wParam2 = Y;
  3048. Owner.Send(Data);
  3049. Owner.Screen.FullWipe();
  3050. Owner.Screen.Reload(null);
  3051. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  3052. return;
  3053. }
  3054. #endregion
  3055. ushort baseID = 0;
  3056. if (!Kernel.Maps.ContainsKey(MapID) && !MapsTable.MapInformations.ContainsKey(MapID)) return;
  3057. else
  3058. {
  3059. baseID = Kernel.Maps[MapID].BaseID;
  3060. }
  3061. if (Owner.InQualifier())
  3062. if (MapID != 700 && MapID < 11000)
  3063. Owner.EndQualifier();
  3064. this.PrevX = this.X;
  3065. this.PrevY = this.Y;
  3066. this.X = X;
  3067. this.Y = Y;
  3068. this.PreviousMapID = this.MapID;
  3069. this.MapID = MapID;
  3070. Network.GamePackets.Data data = new Network.GamePackets.Data(true);
  3071. data.UID = UID;
  3072. data.ID = Network.GamePackets.Data.Teleport;
  3073. data.dwParam = baseID;
  3074. data.wParam1 = X;
  3075. data.wParam2 = Y;
  3076. Owner.Send(data);
  3077. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  3078. Owner.Entity.Action = TofanProject.Game.Enums.ConquerAction.None;
  3079. Owner.ReviveStamp = Time32.Now;
  3080. Owner.Attackable = false;
  3081. Owner.Screen.Reload(null);
  3082. Owner.ReshareClan();
  3083. if (!Owner.Equipment.Free(12))
  3084. if (Owner.Map.ID == 1036 && Owner.Equipment.TryGetItem((byte)12).Plus < 6)
  3085. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  3086. if (!Owner.Equipment.Free(12))
  3087. if (Owner.Equipment.TryGetItem((byte)12).Plus < 4)
  3088. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  3089. }
  3090. }
  3091. }
  3092.  
  3093. }
  3094. public void Teleport(ushort X, ushort Y)
  3095. {
  3096. if (EntityFlag == EntityFlag.Player)
  3097. {
  3098. if (!Database.MapsTable.MapInformations.ContainsKey(MapID) && !Owner.InQualifier())
  3099. {
  3100. MapID = 1002;
  3101. X = 300;
  3102. Y = 278;
  3103. }
  3104. this.X = X;
  3105. this.Y = Y;
  3106. Network.GamePackets.Data Data = new Network.GamePackets.Data(true);
  3107. Data.UID = UID;
  3108. Data.ID = Network.GamePackets.Data.Teleport;
  3109. Data.dwParam = Database.MapsTable.MapInformations[MapID].BaseID;
  3110. Data.wParam1 = X;
  3111. Data.wParam2 = Y;
  3112. Owner.Send(Data);
  3113. Owner.Screen.FullWipe();
  3114. Owner.Screen.Reload(null);
  3115. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  3116. }
  3117. }
  3118. public void Teleport(ushort MapID, ushort X, ushort Y)
  3119. {
  3120. if (this != null && Owner != null)
  3121. {
  3122. /* if (this.MapID == 3935 && MapID != 3935)
  3123. {
  3124. byte[] buf = new byte[28 + 8];
  3125. buf[0] = 28;
  3126. Writer.Write(2501, 2, buf);
  3127. buf[4] = 1;
  3128. Writer.Write(this.UID, 8, buf);
  3129. Writer.Write(uint.MaxValue - this.UID, 12, buf);
  3130. Owner.Send(buf);
  3131. PKMode = Game.Enums.PKMode.Capture;
  3132. Owner.Send(new Data(true) { UID = UID, ID = Data.ChangePKMode, dwParam = (uint)PKMode });
  3133. }*/
  3134. if (this.MapID == 3856 && MapID != 3856)
  3135. {
  3136. Data data = new Data(true);
  3137. data.UID = UID;
  3138. data.ID = 104;
  3139. data.TimeStamp = Time32.Now;
  3140. data.dwParam = 0;
  3141. Owner.Send(data);
  3142. Owner.SendScreen(data, true);
  3143. }
  3144. #region AutoHunt
  3145. if (Owner.Entity.InAutoHunt)
  3146. {
  3147. AutoHunt AutoHunt = new AutoHunt(false);
  3148. AutoHunt.Action = AutoHunt.Mode.ChangedMap;
  3149. AutoHunt.EXPGained = Owner.Entity.AutoHuntEXP;
  3150. Owner.Send(AutoHunt.ToArray());
  3151.  
  3152. AutoHunt.Action = AutoHunt.Mode.EXPGained;
  3153. AutoHunt.EXPGained = Owner.Entity.AutoHuntEXP;
  3154. Owner.Send(AutoHunt.ToArray());
  3155. Owner.IncreaseExperience(Owner.Entity.AutoHuntEXP, false);
  3156. Owner.Entity.RemoveFlag3((ulong)Network.GamePackets.Update.Flags3.AutoHunting);
  3157. Owner.Entity.AutoHuntEXP = 0;
  3158. Owner.Entity.InAutoHunt = false;
  3159. }
  3160. #endregion
  3161. if (MyClones.Count != 0)
  3162. {
  3163. foreach (var clone in MyClones)
  3164. clone.RemoveThat();
  3165. MyClones.Clear();
  3166. }
  3167. #region Pets
  3168. if (Owner.Companion != null)
  3169. {
  3170. Owner.Map.RemoveEntity(Owner.Companion);
  3171. Data data = new Data(true);
  3172. data.UID = Owner.Companion.UID;
  3173. data.ID = Network.GamePackets.Data.RemoveEntity;
  3174. Owner.Companion.MonsterInfo.SendScreen(data);
  3175. Owner.Companion = null;
  3176. }
  3177. #endregion
  3178. if (EntityFlag == EntityFlag.Player)
  3179. {
  3180. #region IfThePlayerInSameMapThatWillTeleportToIt
  3181. if (this.MapID == MapID)
  3182. {
  3183. if (!Database.MapsTable.MapInformations.ContainsKey(MapID) && !Owner.InQualifier())
  3184. {
  3185. MapID = 1002;
  3186. X = 300;
  3187. Y = 278;
  3188. }
  3189. this.X = X;
  3190. this.Y = Y;
  3191. Network.GamePackets.Data Data = new Network.GamePackets.Data(true);
  3192. Data.UID = UID;
  3193. Data.ID = Network.GamePackets.Data.Teleport;
  3194. Data.dwParam = Database.MapsTable.MapInformations[MapID].BaseID;
  3195. Data.wParam1 = X;
  3196. Data.wParam2 = Y;
  3197. Owner.Send(Data);
  3198. Owner.Screen.FullWipe();
  3199. Owner.Screen.Reload(null);
  3200. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  3201. return;
  3202. }
  3203. #endregion
  3204. ushort baseID = 0;
  3205. if (!Kernel.Maps.ContainsKey(MapID) && !MapsTable.MapInformations.ContainsKey(MapID)) return;
  3206. else
  3207. {
  3208. baseID = Kernel.Maps[MapID].BaseID;
  3209. }
  3210. if (Owner.InQualifier())
  3211. if (MapID != 700 && MapID < 11000)
  3212. Owner.EndQualifier();
  3213. this.PrevX = this.X;
  3214. this.PrevY = this.Y;
  3215. this.X = X;
  3216. this.Y = Y;
  3217. this.PreviousMapID = this.MapID;
  3218. this.MapID = MapID;
  3219. Network.GamePackets.Data data = new Network.GamePackets.Data(true);
  3220. data.UID = UID;
  3221. data.ID = Network.GamePackets.Data.Teleport;
  3222. data.dwParam = baseID;
  3223. data.wParam1 = X;
  3224. data.wParam2 = Y;
  3225. Owner.Send(data);
  3226. Owner.Send(new MapStatus() { BaseID = Owner.Map.BaseID, ID = Owner.Map.ID, Status = Database.MapsTable.MapInformations[Owner.Map.ID].Status, Weather = Database.MapsTable.MapInformations[Owner.Map.ID].Weather });
  3227. Owner.Entity.Action = TofanProject.Game.Enums.ConquerAction.None;
  3228. Owner.ReviveStamp = Time32.Now;
  3229. Owner.Attackable = false;
  3230. Owner.Screen.Reload(null);
  3231. Owner.ReshareClan();
  3232. if (!Owner.Equipment.Free(12))
  3233. if (Owner.Map.ID == 1036 && Owner.Equipment.TryGetItem((byte)12).Plus < 6)
  3234. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  3235. if (!Owner.Equipment.Free(12))
  3236. if (Owner.Equipment.TryGetItem((byte)12).Plus < 4)
  3237. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  3238. MonstersPointstamp = Time32.Now;
  3239. OnlinePointStamp = Time32.Now;
  3240. Tofanpointstamp = Time32.Now;
  3241. LEtamp = Time32.Now;
  3242. }
  3243. }
  3244.  
  3245. }
  3246. public void SoulShackleRemover()
  3247. {
  3248. ShackleTime = 0;
  3249. RemoveFlag2(Network.GamePackets.Update.Flags2.SoulShackle);
  3250. }
  3251. public ushort PrevX, PrevY;
  3252. public void Teleport(ushort BaseID, ushort DynamicID, ushort X, ushort Y)
  3253. {
  3254. if (MyClones.Count != 0)
  3255. {
  3256. foreach (var clone in MyClones)
  3257. clone.RemoveThat();
  3258. MyClones.Clear();
  3259. }
  3260. if (EntityFlag == EntityFlag.Player)
  3261. {
  3262. if (!Database.DMaps.MapPaths.ContainsKey(BaseID))
  3263. return;
  3264.  
  3265. if (Owner.InQualifier())
  3266. if (BaseID != 700 && BaseID < 11000)
  3267. Owner.EndQualifier();
  3268. if (!Kernel.Maps.ContainsKey(DynamicID)) new Map(DynamicID, BaseID, Database.DMaps.MapPaths[BaseID]);
  3269. this.PrevX = this.X;
  3270. this.PrevY = this.Y;
  3271. this.X = X;
  3272. this.Y = Y;
  3273. this.PreviousMapID = this.MapID;
  3274. this.MapID = DynamicID;
  3275. Network.GamePackets.Data Data = new Network.GamePackets.Data(true);
  3276. Data.UID = UID;
  3277. Data.ID = Network.GamePackets.Data.Teleport;
  3278. Data.dwParam = BaseID;
  3279. Data.wParam1 = X;
  3280. Data.wParam2 = Y;
  3281. Owner.Send(Data);
  3282. Owner.Entity.Action = TofanProject.Game.Enums.ConquerAction.None;
  3283. Owner.ReviveStamp = Time32.Now;
  3284. Owner.Attackable = false;
  3285. Owner.Screen.Reload(null);
  3286.  
  3287. if (!Owner.Equipment.Free(12))
  3288. if (Owner.Map.ID == 1036 && Owner.Equipment.TryGetItem((byte)12).Plus < 6)
  3289. RemoveFlag(Network.GamePackets.Update.Flags.Ride);
  3290. }
  3291. }
  3292. public bool OnKOSpell()
  3293. {
  3294. return OnCyclone() || OnSuperman() || OnSuperCyclone();
  3295. }
  3296. public bool OnSuperCyclone()
  3297. {
  3298. return ContainsFlag3(Network.GamePackets.Update.Flags3.SuperCyclone) || ContainsFlag2(Network.GamePackets.Update.Flags3.SuperCyclone) || ContainsFlag(Network.GamePackets.Update.Flags3.SuperCyclone);
  3299. }
  3300. public bool OnOblivion()
  3301. {
  3302. return ContainsFlag2(Network.GamePackets.Update.Flags2.Oblivion);
  3303. }
  3304. public bool OnCyclone()
  3305. {
  3306. return ContainsFlag(Network.GamePackets.Update.Flags.Cyclone);
  3307. }
  3308. public bool OnSuperman()
  3309. {
  3310. return ContainsFlag(Network.GamePackets.Update.Flags.Superman);
  3311. }
  3312. public bool OnScurvyBomb()
  3313. {
  3314. return ContainsFlag2(Network.GamePackets.Update.Flags2.ScurvyBomb);
  3315. }
  3316. public bool OnFatalStrike()
  3317. {
  3318. return ContainsFlag(Network.GamePackets.Update.Flags.FatalStrike);
  3319. }
  3320. public String ToHex(byte[] buf)
  3321. {
  3322. var builder = new StringBuilder();
  3323. foreach (var b in buf)
  3324. builder.Append(b.ToString("X2") + " ");
  3325. return builder.ToString();
  3326. }
  3327. public void Untransform()
  3328. {
  3329. if (MapID == 1036 && TransformationTime == 3600)
  3330. return;
  3331. this.TransformationID = 0;
  3332.  
  3333. double maxHP = TransformationMaxHP;
  3334. double HP = Hitpoints;
  3335. double point = HP / maxHP;
  3336.  
  3337. Hitpoints = (uint)(MaxHitpoints * point);
  3338. Update(Network.GamePackets.Update.MaxHitpoints, MaxHitpoints, false);
  3339. }
  3340. public byte[] WindowSpawn()
  3341. {
  3342. byte[] buffer = new byte[SpawnPacket.Length];
  3343. SpawnPacket.CopyTo(buffer, 0);
  3344. buffer[_WindowSpawn] = 1;
  3345. return buffer;
  3346. }
  3347. public int getFan(bool Magic)
  3348. {
  3349. if (Owner.Equipment.Free(10))
  3350. return 0;
  3351.  
  3352. ushort magic = 0;
  3353. ushort physical = 0;
  3354. ushort gemVal = 0;
  3355.  
  3356. #region Get
  3357. ConquerItem Item = this.Owner.Equipment.TryGetItem(10);
  3358.  
  3359. if (Item != null)
  3360. {
  3361. if (Item.ID > 0)
  3362. {
  3363. switch (Item.ID % 10)
  3364. {
  3365. case 3:
  3366. case 4:
  3367. case 5: physical += 300; magic += 150; break;
  3368. case 6: physical += 500; magic += 200; break;
  3369. case 7: physical += 700; magic += 300; break;
  3370. case 8: physical += 900; magic += 450; break;
  3371. case 9: physical += 1200; magic += 750; break;
  3372. }
  3373.  
  3374. switch (Item.Plus)
  3375. {
  3376. case 0: break;
  3377. case 1: physical += 200; magic += 100; break;
  3378. case 2: physical += 400; magic += 200; break;
  3379. case 3: physical += 600; magic += 300; break;
  3380. case 4: physical += 800; magic += 400; break;
  3381. case 5: physical += 1000; magic += 500; break;
  3382. case 6: physical += 1200; magic += 600; break;
  3383. case 7: physical += 1300; magic += 700; break;
  3384. case 8: physical += 1400; magic += 800; break;
  3385. case 9: physical += 1500; magic += 900; break;
  3386. case 10: physical += 1600; magic += 950; break;
  3387. case 11: physical += 1700; magic += 1000; break;
  3388. case 12: physical += 1800; magic += 1050; break;
  3389. }
  3390. switch (Item.SocketOne)
  3391. {
  3392. case Enums.Gem.NormalThunderGem: gemVal += 100; break;
  3393. case Enums.Gem.RefinedThunderGem: gemVal += 300; break;
  3394. case Enums.Gem.SuperThunderGem: gemVal += 500; break;
  3395. }
  3396. switch (Item.SocketTwo)
  3397. {
  3398. case Enums.Gem.NormalThunderGem: gemVal += 100; break;
  3399. case Enums.Gem.RefinedThunderGem: gemVal += 300; break;
  3400. case Enums.Gem.SuperThunderGem: gemVal += 500; break;
  3401. }
  3402. }
  3403. }
  3404. #endregion
  3405.  
  3406. magic += gemVal;
  3407. physical += gemVal;
  3408.  
  3409. if (Magic)
  3410. return (int)magic;
  3411. else
  3412. return (int)physical;
  3413. }
  3414. public int getTower(bool Magic)
  3415. {
  3416. if (Owner.Equipment.Free(11))
  3417. return 0;
  3418.  
  3419. ushort magic = 0;
  3420. ushort physical = 0;
  3421. ushort gemVal = 0;
  3422.  
  3423. #region Get
  3424. ConquerItem Item = this.Owner.Equipment.TryGetItem(11);
  3425.  
  3426. if (Item != null)
  3427. {
  3428. if (Item.ID > 0)
  3429. {
  3430. switch (Item.ID % 10)
  3431. {
  3432. case 3:
  3433. case 4:
  3434. case 5: physical += 250; magic += 100; break;
  3435. case 6: physical += 400; magic += 150; break;
  3436. case 7: physical += 550; magic += 200; break;
  3437. case 8: physical += 700; magic += 300; break;
  3438. case 9: physical += 1100; magic += 600; break;
  3439. }
  3440.  
  3441. switch (Item.Plus)
  3442. {
  3443. case 0: break;
  3444. case 1: physical += 150; magic += 50; break;
  3445. case 2: physical += 350; magic += 150; break;
  3446. case 3: physical += 550; magic += 250; break;
  3447. case 4: physical += 750; magic += 350; break;
  3448. case 5: physical += 950; magic += 450; break;
  3449. case 6: physical += 1100; magic += 550; break;
  3450. case 7: physical += 1200; magic += 625; break;
  3451. case 8: physical += 1300; magic += 700; break;
  3452. case 9: physical += 1400; magic += 750; break;
  3453. case 10: physical += 1500; magic += 800; break;
  3454. case 11: physical += 1600; magic += 850; break;
  3455. case 12: physical += 1700; magic += 900; break;
  3456. }
  3457. switch (Item.SocketOne)
  3458. {
  3459. case Enums.Gem.NormalGloryGem: gemVal += 100; break;
  3460. case Enums.Gem.RefinedGloryGem: gemVal += 300; break;
  3461. case Enums.Gem.SuperGloryGem: gemVal += 500; break;
  3462. }
  3463. switch (Item.SocketTwo)
  3464. {
  3465. case Enums.Gem.NormalGloryGem: gemVal += 100; break;
  3466. case Enums.Gem.RefinedGloryGem: gemVal += 300; break;
  3467. case Enums.Gem.SuperGloryGem: gemVal += 500; break;
  3468. }
  3469. }
  3470. }
  3471. #endregion
  3472.  
  3473. magic += gemVal;
  3474. physical += gemVal;
  3475.  
  3476. if (Magic)
  3477. return (int)magic;
  3478. else
  3479. return (int)physical;
  3480. }
  3481. public Double GemBonus(Byte type)
  3482. {
  3483. Double bonus = 0;
  3484. foreach (ConquerItem i in Owner.Equipment.Objects)
  3485. if (i != null)
  3486. if (i.IsWorn)
  3487. bonus += i.GemBonus(type);
  3488. if (Class >= 130 && Class <= 135)
  3489. if (type == ItemSocket.Tortoise)
  3490. bonus = Math.Min(0.12, bonus);
  3491. return bonus;
  3492. }
  3493. public int BattlePower
  3494. {
  3495. get
  3496. {
  3497. return BattlePowerCalc(this);
  3498. }
  3499. }
  3500. public int NMBattlePower
  3501. {
  3502. get
  3503. {
  3504. return (int)(BattlePowerCalc(this) - MentorBattlePower);
  3505. }
  3506. }
  3507. public uint BattlePowerFrom(Entity mentor)
  3508. {
  3509. if (mentor.NMBattlePower < NMBattlePower) return 0;
  3510. uint bp = (uint)((mentor.NMBattlePower - NMBattlePower) / 3.3F);
  3511. if (Level >= 125) bp = (uint)((bp * (135 - Level)) / 10);
  3512. if (bp < 0) bp = 0;
  3513. return bp;
  3514. }
  3515. public uint ClanSharedBp
  3516. {
  3517. get { return BitConverter.ToUInt32(this.SpawnPacket, 198); }
  3518. set
  3519. {
  3520. if ((EntityFlag == Game.EntityFlag.Player) && FullyLoaded)
  3521. {
  3522. Clan getClan = GetClan;
  3523. Update((byte)Network.GamePackets.Update.DataType.ClanBattlePower, value, false);
  3524. }
  3525. Writer.WriteUint(value, 198, SpawnPacket);
  3526. }
  3527. }
  3528. public Map SpookMap;
  3529. public string Name
  3530. {
  3531. get
  3532. {
  3533. return _Name;
  3534. }
  3535. set
  3536. {
  3537. _Name = value;
  3538. LoweredName = value.ToLower();
  3539. if (EntityFlag == EntityFlag.Player)
  3540. {
  3541. if (ClanName != "")
  3542. {
  3543. SpawnPacket = new byte[8 + _Names + _Name.Length + ClanName.Length + 10];
  3544. WriteUInt16((ushort)(SpawnPacket.Length - 8), 0, SpawnPacket);
  3545. WriteUInt16(10014, 2, SpawnPacket);
  3546. WriteUInt32((uint)Time32.timeGetTime().GetHashCode(), 4, SpawnPacket);
  3547. WriteStringList(new List<string>() { _Name, "", ClanName, "", "", "", "" }, _Names, SpawnPacket);
  3548. }
  3549. else
  3550. {
  3551. SpawnPacket = new byte[8 + _Names + _Name.Length + 36];
  3552. WriteUInt16((ushort)(SpawnPacket.Length - 8), 0, SpawnPacket);
  3553. WriteUInt16(10014, 2, SpawnPacket);
  3554. WriteUInt32((uint)Time32.timeGetTime().GetHashCode(), 4, SpawnPacket);
  3555.  
  3556. if (Owner == null)
  3557. WriteStringList(new List<string>() { _Name, "", clan, "", "", "", "" }, _Names, SpawnPacket);
  3558. else WriteStringList(new List<string>() { _Name, "", clan, "", "", "", UnionName }, _Names, SpawnPacket);
  3559. }
  3560. }
  3561. else
  3562. {
  3563. if (ClanName != "")
  3564. {
  3565. SpawnPacket = new byte[8 + _Names + _Name.Length + ClanName.Length + 30];
  3566. WriteUInt16((ushort)(SpawnPacket.Length - 8), 0, SpawnPacket);
  3567. WriteUInt16(10014, 2, SpawnPacket);
  3568. WriteUInt32((uint)Time32.timeGetTime().GetHashCode(), 4, SpawnPacket);
  3569. WriteStringList(new List<string>() { _Name, "", "", ClanName }, _Names, SpawnPacket);
  3570. }
  3571. else
  3572. {
  3573. SpawnPacket = new byte[8 + _Names + _Name.Length + 30];
  3574. WriteUInt16((ushort)(SpawnPacket.Length - 8), 0, SpawnPacket);
  3575. WriteUInt16(10014, 2, SpawnPacket);
  3576. WriteUInt32((uint)Time32.timeGetTime().GetHashCode(), 4, SpawnPacket);
  3577. WriteStringList(new List<string>() { _Name, "", "", "" }, _Names, SpawnPacket);
  3578. }
  3579.  
  3580. }
  3581. }
  3582. }
  3583. public string Spouse
  3584. {
  3585. get
  3586. {
  3587. return _Spouse;
  3588. }
  3589. set
  3590. {
  3591. if (EntityFlag == EntityFlag.Player)
  3592. {
  3593. Update(Network.GamePackets._String.Spouse, value, false);
  3594. }
  3595. _Spouse = value;
  3596. }
  3597. }
  3598. public uint Money
  3599. {
  3600. get
  3601. {
  3602. return _money;
  3603. }
  3604. set
  3605. {
  3606. _money = value;
  3607. if (EntityFlag == EntityFlag.Player)
  3608. Update(Network.GamePackets.Update.Money, value, false);
  3609.  
  3610.  
  3611. }
  3612. }
  3613. public byte VIPLevel
  3614. {
  3615. get
  3616. {
  3617. return _vipLevel;
  3618. }
  3619. set
  3620. {
  3621. if (EntityFlag == EntityFlag.Player)
  3622. {
  3623. Update(Network.GamePackets.Update.VIPLevel, value, false);
  3624. }
  3625. _vipLevel = value;
  3626. }
  3627. }
  3628. public uint BoundCps
  3629. {
  3630. get { return _boundCps; }
  3631. set
  3632. {
  3633. Update(Network.GamePackets.Update.BoundConquerPoints, value, false);
  3634. _boundCps = value;
  3635. }
  3636. }
  3637. public uint ConquerPoints
  3638. {
  3639. get
  3640. {
  3641. return _conquerpoints;
  3642. }
  3643. set
  3644. {
  3645. value = (uint)Math.Max(0, (int)value);
  3646. _conquerpoints = value;
  3647. Database.EntityTable.UpdateCps(this.Owner);
  3648. if (EntityFlag == EntityFlag.Player)
  3649. {
  3650. Update(Network.GamePackets.Update.ConquerPoints, (uint)value, false);
  3651. }
  3652. }
  3653. }
  3654. public uint TreasuerPoints
  3655. {
  3656. get
  3657. {
  3658. return _TreasuerPoints;
  3659. }
  3660. set
  3661. {
  3662. if (value <= 0)
  3663. value = 0;
  3664.  
  3665. _TreasuerPoints = value;
  3666. Database.EntityTable.UpdateTreasuerPoints(this.Owner);
  3667. }
  3668. }
  3669. public ushort Body
  3670. {
  3671. get
  3672. {
  3673. return _body;
  3674. }
  3675. set
  3676. {
  3677. Write((uint)(TransformationID * 10000000 + Face * 10000 + value), _Mesh, SpawnPacket);
  3678. _body = value;
  3679. if (EntityFlag == EntityFlag.Player)
  3680. {
  3681. if (Owner != null)
  3682. {
  3683. if (Owner.ArenaStatistic != null)
  3684. Owner.ArenaStatistic.Model = (uint)(Face * 10000 + value);
  3685. Update(Network.GamePackets.Update.Mesh, Mesh, true);
  3686. }
  3687. }
  3688. }
  3689. }
  3690. public ushort DoubleExperienceTime
  3691. {
  3692. get
  3693. {
  3694. return _doubleexp;
  3695. }
  3696. set
  3697. {
  3698. ushort oldVal = DoubleExperienceTime;
  3699. _doubleexp = value;
  3700. if (FullyLoaded)
  3701. if (oldVal <= _doubleexp)
  3702. if (EntityFlag == EntityFlag.Player)
  3703. {
  3704. if (Owner != null)
  3705. {
  3706. Update(Network.GamePackets.Update.DoubleExpTimer, DoubleExperienceTime, 200, false);
  3707. }
  3708. }
  3709. }
  3710. }
  3711. public ushort CalculateHitPoint()
  3712. {
  3713. ushort valor = 0;
  3714. switch (Class)
  3715. {
  3716. case 11:
  3717. valor += (ushort)(Agility * 3.15 + Spirit * 3.15 + Strength * 3.15 + Vitality * 25.2);
  3718. break;
  3719. case 12:
  3720. valor += (ushort)(Agility * 3.24 + Spirit * 3.24 + Strength * 3.24 + Vitality * 25.9);
  3721. break;
  3722. case 13:
  3723. valor += (ushort)(Agility * 3.30 + Spirit * 3.30 + Strength * 3.30 + Vitality * 26.4);
  3724. break;
  3725. case 14:
  3726. valor += (ushort)(Agility * 3.36 + Spirit * 3.36 + Strength * 3.36 + Vitality * 26.8);
  3727. break;
  3728. case 15:
  3729. valor += (ushort)(Agility * 3.45 + Spirit * 3.45 + Strength * 3.45 + Vitality * 27.6);
  3730. break;
  3731. default:
  3732. valor += (ushort)(Agility * 3 + Spirit * 3 + Strength * 3 + Vitality * 24);
  3733. break;
  3734. }
  3735. return valor;
  3736.  
  3737. }
  3738. public ushort SuperPotion
  3739. {
  3740. get
  3741. {
  3742. return _superpotion;
  3743. }
  3744. set
  3745. {
  3746. uint oldVal = SuperPotion;
  3747. _superpotion = value;
  3748. }
  3749. }
  3750. public uint HeavenBlessing
  3751. {
  3752. get
  3753. {
  3754. return _heavenblessing;
  3755. }
  3756. set
  3757. {
  3758. uint oldVal = HeavenBlessing;
  3759. _heavenblessing = value;
  3760. if (FullyLoaded)
  3761. if (value > 0)
  3762. if (!ContainsFlag(Network.GamePackets.Update.Flags.HeavenBlessing) || oldVal <= _heavenblessing)
  3763. {
  3764. AddFlag(Network.GamePackets.Update.Flags.HeavenBlessing);
  3765. Update(Network.GamePackets.Update.HeavensBlessing, HeavenBlessing, false);
  3766. Update(Network.GamePackets._String.Effect, "bless", true);
  3767. }
  3768. }
  3769. }
  3770. public uint PokerTable = 0;
  3771. public PokerTable MyPokerTable
  3772. {
  3773. get
  3774. {
  3775. if (Kernel.PokerTables.ContainsKey(PokerTable))
  3776. return Kernel.PokerTables[PokerTable];
  3777. else return null;
  3778. }
  3779. set
  3780. {
  3781. PokerTable = value.Id;
  3782. }
  3783. }
  3784. public byte Stamina
  3785. {
  3786. get
  3787. {
  3788. return _stamina;
  3789. }
  3790. set
  3791. {
  3792. _stamina = value;
  3793. if (EntityFlag == EntityFlag.Player)
  3794. Update(Network.GamePackets.Update.Stamina, value, false);
  3795. }
  3796. }
  3797. public ushort TransformationID
  3798. {
  3799. get
  3800. {
  3801. return _transformationid;
  3802. }
  3803. set
  3804. {
  3805. _transformationid = value;
  3806. Write((uint)(value * 10000000 + Face * 10000 + Body), _Mesh, SpawnPacket);
  3807. if (EntityFlag == EntityFlag.Player)
  3808. Update(Network.GamePackets.Update.Mesh, Mesh, true);
  3809. }
  3810. }
  3811. public ushort Face
  3812. {
  3813. get
  3814. {
  3815. return _face;
  3816. }
  3817. set
  3818. {
  3819. Write((uint)(TransformationID * 10000000 + value * 10000 + Body), _Mesh, SpawnPacket);
  3820. _face = value;
  3821. if (EntityFlag == EntityFlag.Player)
  3822. {
  3823. if (Owner != null)
  3824. {
  3825. if (Owner.ArenaStatistic != null)
  3826. Owner.ArenaStatistic.Model = (uint)(value * 10000 + Body);
  3827. Update(Network.GamePackets.Update.Mesh, Mesh, true);
  3828. }
  3829. }
  3830. }
  3831. }
  3832. public uint Mesh
  3833. {
  3834. get
  3835. {
  3836. return BitConverter.ToUInt32(SpawnPacket, _Mesh);
  3837. }
  3838. }
  3839. public byte Class
  3840. {
  3841. get
  3842. {
  3843. return _class;
  3844. }
  3845. set
  3846. {
  3847. if (EntityFlag == EntityFlag.Player)
  3848. {
  3849. if (Owner != null)
  3850. {
  3851. if (Owner.ArenaStatistic != null)
  3852. Owner.ArenaStatistic.Class = value;
  3853. Update(Network.GamePackets.Update.Class, value, false);
  3854. }
  3855. }
  3856. _class = value;
  3857. SpawnPacket[_Class] = value;
  3858. }
  3859. }
  3860. public byte Reborn
  3861. {
  3862. get
  3863. {
  3864. return _reborn;
  3865. }
  3866. set
  3867. {
  3868. if (EntityFlag == EntityFlag.Player)
  3869. {
  3870. Update(Network.GamePackets.Update.Reborn, value, true);
  3871. }
  3872. _reborn = value;
  3873. SpawnPacket[_Reborn] = value;
  3874. }
  3875. }
  3876. public string QuestFrom
  3877. {
  3878. get
  3879. {
  3880. if (EntityFlag == Game.EntityFlag.Player)
  3881. return Owner["QuestFrom"];
  3882. return "";
  3883. }
  3884. set
  3885. {
  3886. if (EntityFlag == Game.EntityFlag.Player)
  3887. Owner["QuestFrom"] = value;
  3888. }
  3889. }
  3890. public string QuestMob
  3891. {
  3892. get
  3893. {
  3894. if (EntityFlag == Game.EntityFlag.Player)
  3895. return Owner["QuestMob"];
  3896. return "";
  3897. }
  3898. set
  3899. {
  3900. if (EntityFlag == Game.EntityFlag.Player)
  3901. Owner["QuestMob"] = value;
  3902. }
  3903. }
  3904. public byte Level
  3905. {
  3906. get
  3907. {
  3908. if (EntityFlag == EntityFlag.Player)
  3909. {
  3910. SpawnPacket[_Level] = _level;
  3911. return _level;
  3912. }
  3913. else
  3914. {
  3915. SpawnPacket[_MonsterLevel] = _level;
  3916. return _level;
  3917. }
  3918. }
  3919. set
  3920. {
  3921. if (EntityFlag == EntityFlag.Player)
  3922. {
  3923. Update(Network.GamePackets.Update.Level, value, true);
  3924. Data _Data = new Data(true);
  3925. _Data.UID = UID;
  3926. _Data.ID = Data.Leveled;
  3927. // _Data.TimeStamp = Time32.Now;
  3928. // _Data.Unknown2 = 1;
  3929. _Data.wParam1 = value;
  3930.  
  3931. if (Owner != null)
  3932. {
  3933. (Owner as Client.GameClient).SendScreen(_Data, true);
  3934. if (Owner.ArenaStatistic != null)
  3935. {
  3936. Owner.ArenaStatistic.Level = value;
  3937. Owner.ArenaStatistic.ArenaPoints = Database.ArenaTable.ArenaPointFill(Owner.ArenaStatistic.Level);
  3938. }
  3939. }
  3940. if (Owner != null)
  3941. {
  3942. if (Owner.AsMember != null)
  3943. {
  3944. Owner.AsMember.Level = value;
  3945. }
  3946. }
  3947. SpawnPacket[_Level] = value;
  3948. }
  3949. else
  3950. {
  3951. SpawnPacket[_MonsterLevel] = value;
  3952. }
  3953. _level = value;
  3954. }
  3955. }
  3956. private uint mentorBP;
  3957. public uint MentorBattlePower
  3958. {
  3959. get
  3960. {
  3961. return mentorBP;
  3962. }
  3963. set
  3964. {
  3965. if ((int)value < 0)
  3966. value = 0;
  3967. if (Owner.Mentor != null)
  3968. {
  3969. if (Owner.Mentor.IsOnline)
  3970. {
  3971. ExtraBattlePower -= mentorBP;
  3972. mentorBP = value;
  3973. ExtraBattlePower += value;
  3974. int val = Owner.Mentor.Client.Entity.BattlePower;
  3975. Update(Network.GamePackets.Update.MentorBattlePower, (uint)Math.Min(val, value), (uint)val);
  3976. }
  3977. else
  3978. {
  3979. ExtraBattlePower -= mentorBP;
  3980. mentorBP = 0;
  3981. Update(Network.GamePackets.Update.MentorBattlePower, (uint)0, (uint)0);
  3982. }
  3983. }
  3984. else
  3985. {
  3986. ExtraBattlePower -= mentorBP;
  3987. mentorBP = 0;
  3988. Update(Network.GamePackets.Update.MentorBattlePower, (uint)0, (uint)0);
  3989. }
  3990. }
  3991. }
  3992. public uint ExtraBattlePower
  3993. {
  3994. get
  3995. {
  3996. return BitConverter.ToUInt32(SpawnPacket, _ExtraBattlepower);
  3997. }
  3998. set
  3999. {
  4000. if (value > 200) value = 0;
  4001. Write(value, _ExtraBattlepower, SpawnPacket);
  4002. }
  4003. }
  4004. public void SendSysMessage(string mesaj)
  4005. {
  4006. byte[] buffer = new TofanProject.Network.GamePackets.Message(mesaj, System.Drawing.Color.Yellow, 0x7dc).ToArray();
  4007. this.Owner.Send(buffer);
  4008. }
  4009. public void SetAway(bool isAway)
  4010. {
  4011. if (!isAway && Away == 1)
  4012. {
  4013. Away = 0;
  4014. Owner.SendScreen(SpawnPacket, false);
  4015.  
  4016. if (awayTeleported)
  4017. {
  4018. awayTeleported = false;
  4019. Teleport(PreviousMapID, PrevX, PrevY);
  4020. }
  4021. }
  4022. else if (isAway && Away == 0)
  4023. {
  4024. if (!Constants.PKFreeMaps.Contains(MapID))
  4025. {
  4026. if (!(MapID == 1036 || MapID == 1002 || Owner.Mining))
  4027. {
  4028. PreviousMapID = MapID;
  4029. PrevX = X;
  4030. PrevY = Y;
  4031. Teleport(1036, 100, 100);
  4032. awayTeleported = true;
  4033. }
  4034. }
  4035. }
  4036. Away = isAway ? (byte)1 : (byte)0;
  4037. }
  4038. public byte Away
  4039. {
  4040. get
  4041. {
  4042. return SpawnPacket[_Away];
  4043. }
  4044. set
  4045. {
  4046. SpawnPacket[_Away] = value;
  4047. }
  4048. }
  4049. public uint UID
  4050. {
  4051. get
  4052. {
  4053. if (SpawnPacket != null)
  4054. return BitConverter.ToUInt32(SpawnPacket, _UID);
  4055. else return _uid;
  4056. }
  4057. set
  4058. {
  4059. _uid = value;
  4060. WriteUInt32(value, _UID, SpawnPacket);
  4061. }
  4062. }
  4063.  
  4064. public ushort GuildID
  4065. {
  4066. get
  4067. {
  4068. return BitConverter.ToUInt16(SpawnPacket, _GuildID);
  4069. }
  4070. set
  4071. {
  4072. Write(value, _GuildID, SpawnPacket);
  4073. }
  4074. }
  4075. public ushort GuildRank
  4076. {
  4077. get
  4078. {
  4079. return BitConverter.ToUInt16(SpawnPacket, _GuildRank);
  4080. }
  4081. set
  4082. {
  4083. Writer.Write(value, _GuildRank, SpawnPacket);
  4084. }
  4085. }
  4086. public ushort Strength
  4087. {
  4088. get
  4089. {
  4090. return _strength;
  4091. }
  4092. set
  4093. {
  4094. if (EntityFlag == EntityFlag.Player)
  4095. {
  4096. Update(Network.GamePackets.Update.Strength, value, false);
  4097. }
  4098. _strength = value;
  4099. }
  4100. }
  4101. public ushort Agility
  4102. {
  4103. get
  4104. {
  4105. if (OnCyclone())
  4106. return (ushort)(_agility);
  4107. return _agility;
  4108. }
  4109. set
  4110. {
  4111. if (EntityFlag == EntityFlag.Player)
  4112. Update(Network.GamePackets.Update.Agility, value, false);
  4113. _agility = value;
  4114. }
  4115. }
  4116. public ushort Spirit
  4117. {
  4118. get
  4119. {
  4120. return _spirit;
  4121. }
  4122. set
  4123. {
  4124. if (EntityFlag == EntityFlag.Player)
  4125. Update(Network.GamePackets.Update.Spirit, value, false);
  4126. _spirit = value;
  4127. }
  4128. }
  4129. public ushort Vitality
  4130. {
  4131. get
  4132. {
  4133. return _vitality;
  4134. }
  4135. set
  4136. {
  4137. if (EntityFlag == EntityFlag.Player)
  4138. Update(Network.GamePackets.Update.Vitality, value, false);
  4139. _vitality = value;
  4140. }
  4141. }
  4142. public ushort Atributes
  4143. {
  4144. get
  4145. {
  4146. return _atributes;
  4147. }
  4148. set
  4149. {
  4150. if (EntityFlag == EntityFlag.Player)
  4151. Update(Network.GamePackets.Update.Atributes, value, false);
  4152. _atributes = value;
  4153. }
  4154. }
  4155. public byte Boss
  4156. {
  4157. get
  4158. {
  4159. return SpawnPacket[_Boss];
  4160. }
  4161. set
  4162. {
  4163. SpawnPacket[_Boss] = 1;
  4164. }
  4165. }
  4166. public uint Hitpoints
  4167. {
  4168. get
  4169. {
  4170. return _hitpoints;
  4171. }
  4172. set
  4173. {
  4174. value = (uint)Math.Max(0, (int)value);
  4175. if (EntityFlag == EntityFlag.Player)
  4176. Update((byte)Network.GamePackets.Update.Hitpoints, value, true);
  4177. else if (EntityFlag == EntityFlag.Monster)
  4178. {
  4179. var update = new Update(true);
  4180. update.UID = UID;
  4181. update.Append(Network.GamePackets.Update.Hitpoints, value);
  4182. MonsterInfo.SendScreen(update);
  4183. }
  4184. _hitpoints = value;
  4185. if (Boss > 0)
  4186. {
  4187. uint key = (uint)(MaxHitpoints / 10000);
  4188. if (key != 0)
  4189. Writer.Write((ushort)(value / key), _Hitpoints, SpawnPacket);
  4190. else
  4191. Writer.Write((ushort)(value * MaxHitpoints / 1000 / 1.09), _Hitpoints, SpawnPacket);
  4192. }
  4193. else
  4194. Writer.Write((ushort)value, _Hitpoints, SpawnPacket);
  4195. if (EntityFlag == EntityFlag.Player)
  4196. {
  4197. if (Owner != null)
  4198. {
  4199. if (Owner.Team != null)
  4200. {
  4201. foreach (var Team in Owner.Team.Temates)
  4202. {
  4203. TeamMember addme = new TeamMember();
  4204. addme.UID = Owner.Entity.UID;
  4205. addme.Hitpoints = (ushort)Owner.Entity.Hitpoints;
  4206. addme.Mesh = Owner.Entity.Mesh;
  4207. addme.Name = Owner.Entity.Name;
  4208. addme.MaxHitpoints = (ushort)Owner.Entity.MaxHitpoints;
  4209. Team.entry.Send(addme.ToArray());
  4210. }
  4211. }
  4212. }
  4213. }
  4214.  
  4215. }
  4216. }
  4217. public int NEBattlePower
  4218. {
  4219. get { return (int)(BattlePowerCalc(this) - clan_shared_bp); }
  4220. }
  4221. public ushort Mana
  4222. {
  4223. get
  4224. {
  4225. return _mana;
  4226. }
  4227. set
  4228. {
  4229. if (EntityFlag == EntityFlag.Player)
  4230. Update(Network.GamePackets.Update.Mana, value, false);
  4231. _mana = value;
  4232. }
  4233. }
  4234. public ushort MaxMana
  4235. {
  4236. get
  4237. {
  4238. return _maxmana;
  4239. }
  4240. set
  4241. {
  4242. if (EntityFlag == EntityFlag.Player)
  4243. Update(Network.GamePackets.Update.MaxMana, value, false);
  4244. _maxmana = value;
  4245. }
  4246. }
  4247. public ushort HairStyle
  4248. {
  4249. get
  4250. {
  4251. return _hairstyle;
  4252. }
  4253. set
  4254. {
  4255. if (EntityFlag == EntityFlag.Player)
  4256. {
  4257. Update(Network.GamePackets.Update.HairStyle, value, true);
  4258. }
  4259. _hairstyle = value;
  4260. Writer.Write(value, _HairStyle, SpawnPacket);
  4261. }
  4262. }
  4263. public ConquerStructures.NobilityRank NobilityRank
  4264. {
  4265. get
  4266. {
  4267. return (TofanProject.Game.ConquerStructures.NobilityRank)SpawnPacket[_NobilityRank];
  4268. }
  4269. set
  4270. {
  4271. SpawnPacket[_NobilityRank] = (byte)value;
  4272. if (Owner != null)
  4273. {
  4274. if (Owner.AsMember != null)
  4275. {
  4276. Owner.AsMember.NobilityRank = value;
  4277. }
  4278. }
  4279. }
  4280. }
  4281. public byte HairColor
  4282. {
  4283. get
  4284. {
  4285. return (byte)(HairStyle / 100);
  4286. }
  4287. set
  4288. {
  4289. HairStyle = (ushort)((value * 100) + (HairStyle % 100));
  4290. }
  4291. }
  4292. public ushort MapID
  4293. {
  4294. get
  4295. {
  4296. return _mapid;
  4297. }
  4298. set
  4299. {
  4300. _mapid = value;
  4301. }
  4302. }
  4303. public ushort PreviousMapID
  4304. {
  4305. get
  4306. {
  4307. return _previousmapid;
  4308. }
  4309. set
  4310. {
  4311. _previousmapid = value;
  4312. }
  4313. }
  4314. public ushort X
  4315. {
  4316. get
  4317. {
  4318. return _x;
  4319. }
  4320. set
  4321. {
  4322. _x = value;
  4323. Writer.Write(value, _X, SpawnPacket);
  4324. }
  4325. }
  4326. public ushort Y
  4327. {
  4328. get
  4329. {
  4330. return _y;
  4331. }
  4332. set
  4333. {
  4334. _y = value;
  4335. Writer.Write(value, _Y, SpawnPacket);
  4336. }
  4337. }
  4338. public bool Dead
  4339. {
  4340. get
  4341. {
  4342. return Hitpoints < 1;
  4343. }
  4344. set
  4345. {
  4346. throw new NotImplementedException();
  4347. }
  4348. }
  4349. public ushort Defence
  4350. {
  4351. get
  4352. {
  4353. if (Time32.Now < ShieldStamp.AddSeconds(ShieldTime) && ContainsFlag(Network.GamePackets.Update.Flags.MagicShield))
  4354. if (ShieldIncrease > 0)
  4355. return (ushort)Math.Min(65535, (int)(BaseDefence * ShieldIncrease));
  4356. if (Time32.Now < ShieldStamp.AddSeconds(ShieldTime) && ContainsFlag3(Network.GamePackets.Update.Flags3.WarriorEpicShield))
  4357. if (ShieldIncrease > 0)
  4358. return (ushort)Math.Min(65535, (int)(BaseDefence * ShieldIncrease));
  4359. if (SuperItemBless > 0)
  4360. return (ushort)(BaseDefence + (float)BaseDefence / 100 * SuperItemBless);
  4361. return BaseDefence;
  4362. }
  4363. set { BaseDefence = value; }
  4364. }
  4365. public ushort TransformationDefence
  4366. {
  4367. get
  4368. {
  4369. if (ContainsFlag(Network.GamePackets.Update.Flags.MagicShield) || ContainsFlag3(Network.GamePackets.Update.Flags3.WarriorEpicShield))
  4370. {
  4371. if (ShieldTime > 0)
  4372. return (ushort)(_TransPhysicalDefence * ShieldIncrease);
  4373. else
  4374. return (ushort)(_TransPhysicalDefence * MagicShieldIncrease);
  4375. }
  4376. return (ushort)_TransPhysicalDefence;
  4377. }
  4378. set { _TransPhysicalDefence = value; }
  4379. }
  4380. public ushort MagicDefencePercent
  4381. {
  4382. get { return _MDefencePercent; }
  4383. set { _MDefencePercent = value; }
  4384. }
  4385. public ushort TransformationMagicDefence
  4386. {
  4387. get { return (ushort)_TransMagicDefence; }
  4388. set { _TransMagicDefence = value; }
  4389. }
  4390. public ushort MagicDefence
  4391. {
  4392. get { return _MDefence; }
  4393. set { _MDefence = value; }
  4394. }
  4395. public Client.GameClient Owner
  4396. {
  4397. get { return _Owner; }
  4398. set { _Owner = value; }
  4399. }
  4400. public uint TransformationMinAttack
  4401. {
  4402. get
  4403. {
  4404. if (ContainsFlag(Network.GamePackets.Update.Flags.Stigma))
  4405. return (uint)(_TransMinAttack * StigmaIncrease);
  4406. return _TransMinAttack;
  4407. }
  4408. set { _TransMinAttack = value; }
  4409. }
  4410. public uint TransformationMaxAttack
  4411. {
  4412. get
  4413. {
  4414. if (ContainsFlag(Network.GamePackets.Update.Flags.Stigma))
  4415. return (uint)(_TransMaxAttack * StigmaIncrease);
  4416. return _TransMaxAttack;
  4417. }
  4418. set { _TransMaxAttack = value; }
  4419. }
  4420. public uint MinAttack
  4421. {
  4422. get
  4423. {
  4424. return _MinAttack;
  4425. }
  4426. set { _MinAttack = value; }
  4427. }
  4428. public uint MaxAttack
  4429. {
  4430. get
  4431. {
  4432. return _MaxAttack;
  4433. }
  4434. set { _MaxAttack = value; }
  4435. }
  4436. public uint MaxHitpoints
  4437. {
  4438. get
  4439. {
  4440. return _maxhitpoints;
  4441. }
  4442. set
  4443. {
  4444. if (EntityFlag == EntityFlag.Player)
  4445. {
  4446. if (TransformationID != 98)
  4447. Update(Network.GamePackets.Update.MaxHitpoints, value, true);
  4448. }
  4449. _maxhitpoints = value;
  4450. }
  4451. }
  4452. public uint MagicAttack
  4453. {
  4454. get { return _MagicAttack; }
  4455. set { _MagicAttack = value; }
  4456. }
  4457. public byte Dodge
  4458. {
  4459. get
  4460. {
  4461. if (ContainsFlag(Network.GamePackets.Update.Flags.Dodge))
  4462. {
  4463. return (byte)(_Dodge * DodgeIncrease);
  4464. }
  4465. return _Dodge;
  4466. }
  4467. set { _Dodge = value; }
  4468. }
  4469. public ushort Dexterity;
  4470. public byte TransformationDodge
  4471. {
  4472. get
  4473. {
  4474. if (ContainsFlag(Network.GamePackets.Update.Flags.Dodge))
  4475. return (byte)(_TransDodge * DodgeIncrease);
  4476. return (byte)_TransDodge;
  4477. }
  4478. set { _TransDodge = value; }
  4479. }
  4480. public MapObjectType MapObjType
  4481. {
  4482. get { return _MapObjectType; }
  4483. set { _MapObjectType = value; }
  4484. }
  4485. public EntityFlag EntityFlag
  4486. {
  4487. get { return _EntityFlag; }
  4488. set { _EntityFlag = value; }
  4489. }
  4490. public ulong Experience
  4491. {
  4492. get
  4493. {
  4494. return _experience;
  4495. }
  4496. set
  4497. {
  4498. if (EntityFlag == EntityFlag.Player)
  4499. Update(Network.GamePackets.Update.Experience, value, false);
  4500. _experience = value;
  4501. }
  4502. }
  4503. public double EnlightenPoints
  4504. {
  4505. get
  4506. {
  4507. return _enlightenPoints;
  4508. }
  4509. set
  4510. {
  4511. _enlightenPoints = value;
  4512. }
  4513. }
  4514. public byte ReceivedEnlightenPoints
  4515. {
  4516. get
  4517. {
  4518. return _receivedEnlighenPoints;
  4519. }
  4520. set
  4521. {
  4522. _receivedEnlighenPoints = value;
  4523. }
  4524. }
  4525. public ushort EnlightmentTime
  4526. {
  4527. get
  4528. {
  4529. return _enlightmenttime;
  4530. }
  4531. set
  4532. {
  4533. _enlightmenttime = value;
  4534. }
  4535. }
  4536. public ushort PKPoints
  4537. {
  4538. get
  4539. {
  4540. return _pkpoints;
  4541. }
  4542. set
  4543. {
  4544. _pkpoints = value;
  4545. if (EntityFlag == EntityFlag.Player)
  4546. {
  4547. Update(Network.GamePackets.Update.PKPoints, value, false);
  4548. if (PKPoints > 99)
  4549. {
  4550. RemoveFlag(Network.GamePackets.Update.Flags.RedName);
  4551. AddFlag(Network.GamePackets.Update.Flags.BlackName);
  4552. }
  4553. else if (PKPoints > 29)
  4554. {
  4555. AddFlag(Network.GamePackets.Update.Flags.RedName);
  4556. RemoveFlag(Network.GamePackets.Update.Flags.BlackName);
  4557. }
  4558. else if (PKPoints < 30)
  4559. {
  4560. RemoveFlag(Network.GamePackets.Update.Flags.RedName);
  4561. RemoveFlag(Network.GamePackets.Update.Flags.BlackName);
  4562. }
  4563. }
  4564. }
  4565. }
  4566. public bool Hercule()
  4567. {
  4568. if (EntityFlag == Game.EntityFlag.Player)
  4569. {
  4570. var weapons = Owner.Weapons;
  4571. if (weapons.Item1 != null && weapons.Item2 != null)
  4572. if (weapons.Item1.ID / 1000 == 480 && weapons.Item2.ID / 1000 == 480 || weapons.Item1.ID / 1000 == 410 && weapons.Item2.ID / 1000 == 410 || weapons.Item1.ID / 1000 == 420 && weapons.Item2.ID / 1000 == 420 || weapons.Item1.ID / 1000 == 614 && weapons.Item2.ID / 1000 == 614)
  4573. return true;
  4574. }
  4575. return false;
  4576. }
  4577. public uint QuizPoints
  4578. {
  4579. get { return BitConverter.ToUInt32(SpawnPacket, _QuizPoints); }
  4580. set
  4581. {
  4582. if (EntityFlag == EntityFlag.Player)
  4583. {
  4584. Update((byte)Network.GamePackets.Update.QuizPoints, value, true);
  4585. }
  4586. Write(value, _QuizPoints, SpawnPacket);
  4587. }
  4588. }
  4589. public UInt32 ClanId
  4590. {
  4591. get { return BitConverter.ToUInt32(SpawnPacket, _ClanUID); }
  4592. set { Write((UInt32)value, _ClanUID, SpawnPacket); }
  4593. }
  4594.  
  4595. public Clan Myclan;
  4596. public Clan.Ranks ClanRank
  4597. {
  4598. get { return (Clan.Ranks)SpawnPacket[_ClanRank]; }
  4599. set { SpawnPacket[_ClanRank] = (Byte)value; }
  4600. }
  4601. public Clan GetClan
  4602. {
  4603. get
  4604. {
  4605. Clan cl;
  4606. Kernel.Clans.TryGetValue(ClanId, out cl);
  4607. return cl;
  4608. }
  4609. }
  4610. string clan = "";
  4611. public string ClanName
  4612. {
  4613. get { return clan; }
  4614. set
  4615. {
  4616. clan = value;
  4617. if (Owner == null)
  4618. WriteStringList(new List<string>() { _Name, "", clan, "", "", "", "" }, _Names, SpawnPacket);
  4619. else
  4620. WriteStringList(new List<string>() { _Name, "", clan, "", "", "", UnionName }, _Names, SpawnPacket);
  4621. }
  4622. }
  4623. private UInt32 mClanJoinTarget;
  4624. public UInt32 ClanJoinTarget
  4625. {
  4626. get { return this.mClanJoinTarget; }
  4627. set { this.mClanJoinTarget = value; }
  4628. }
  4629. public Enums.PKMode PKMode
  4630. {
  4631. get { return _PKMode; }
  4632. set { _PKMode = value; }
  4633. }
  4634. public ushort Action
  4635. {
  4636. get { return BitConverter.ToUInt16(SpawnPacket, _Action); }
  4637. set
  4638. {
  4639. Writer.Write(value, _Action, SpawnPacket);
  4640. }
  4641. }
  4642. private string _unionname = "";
  4643. public string UnionName
  4644. {
  4645. get { return _unionname; }
  4646. set
  4647. {
  4648. _unionname = value;
  4649. WriteStringList(new List<string>() { _Name, "", clan, "", "", "", _unionname }, _Names, SpawnPacket);
  4650. Owner.SendScreen(SpawnPacket, false);
  4651. }
  4652. }
  4653. public Enums.ConquerAngle Facing
  4654. {
  4655. get { return (Enums.ConquerAngle)SpawnPacket[_Facing]; }
  4656. set
  4657. {
  4658. SpawnPacket[_Facing] = (byte)value;
  4659. }
  4660. }
  4661. public ulong StatusFlag
  4662. {
  4663. get
  4664. {
  4665. return BitConverter.ToUInt64(SpawnPacket, _StatusFlag);
  4666. }
  4667. set
  4668. {
  4669. ulong OldV = StatusFlag;
  4670. if (value != OldV)
  4671. {
  4672. Writer.Write(value, _StatusFlag, SpawnPacket);
  4673. UpdateEffects(true);
  4674. }
  4675. }
  4676. }
  4677. private ulong _Stateff2 = 0;
  4678. public ulong StatusFlag2
  4679. {
  4680. get { return _Stateff2; }
  4681. set
  4682. {
  4683. ulong OldV = StatusFlag2;
  4684. if (value != OldV)
  4685. {
  4686. _Stateff2 = value;
  4687. Writer.Write(value, _StatusFlag2, SpawnPacket);
  4688.  
  4689. UpdateEffects(true);
  4690. // Update2(Network.GamePackets.Update.StatusFlag, value, true);// !ContainsFlag(Network.GamePackets.Update.Flags.XPList));//you need to update the SECOND value of stateff
  4691. }
  4692. }
  4693. }
  4694. ulong _Stateff3 = 0;
  4695. public ulong StatusFlag3
  4696. {
  4697. get { return _Stateff3; }
  4698. set
  4699. {
  4700. ulong OldV = StatusFlag3;
  4701. if (value != OldV)
  4702. {
  4703. _Stateff3 = value;
  4704. Writer.Write(value, _StatusFlag3, SpawnPacket);
  4705.  
  4706. UpdateEffects(true);
  4707. // Update2(Network.GamePackets.Update.StatusFlag, value, true);// !ContainsFlag(Network.GamePackets.Update.Flags.XPList));//you need to update the SECOND value of stateff
  4708. }
  4709. }
  4710. }
  4711. public void SendScreen(Interfaces.IPacket Data)
  4712. {
  4713. Client.GameClient[] Chars = new Client.GameClient[Kernel.GamePool.Count];
  4714. Kernel.GamePool.Values.CopyTo(Chars, 0);
  4715. foreach (Client.GameClient C in Chars)
  4716. if (C != null)
  4717. if (C.Entity != null)
  4718. if (Game.Calculations.PointDistance(X, Y, C.Entity.X, C.Entity.Y) <= 20)
  4719. C.Send(Data);
  4720. Chars = null;
  4721.  
  4722. }
  4723. public void DieString()
  4724. {
  4725. _String str = new _String(true);
  4726. str.UID = this.UID;
  4727. str.Type = _String.Effect;
  4728. str.Texts.Add("ghost");
  4729. str.Texts.Add("1ghost");
  4730. str.TextsCount = 1;
  4731. if (EntityFlag == Game.EntityFlag.Player)
  4732. {
  4733. this.SendScreen(str);
  4734. }
  4735. }
  4736. public ushort CountryID
  4737. {
  4738. get
  4739. {
  4740. return BitConverter.ToUInt16(SpawnPacket, _CountryCode);
  4741. }
  4742. set
  4743. {
  4744. Writer.Write((ushort)value, _CountryCode, SpawnPacket);
  4745. }
  4746. }
  4747. public bool Assassin()
  4748. {
  4749. if (EntityFlag == Game.EntityFlag.Player)
  4750. {
  4751. var weapons = Owner.Weapons;
  4752. if (weapons.Item1 != null)
  4753. if (weapons.Item1.ID / 1000 == 613)
  4754. return true;
  4755. else if (weapons.Item2 != null)
  4756. if (weapons.Item2.ID / 1000 == 613)
  4757. return true;
  4758. }
  4759. return false;
  4760. }
  4761. public bool EpicTrojan()
  4762. {
  4763. if (EntityFlag == Game.EntityFlag.Player)
  4764. {
  4765. var weapons = Owner.Weapons;
  4766. if (weapons.Item1 != null)
  4767. if (weapons.Item1.ID / 1000 == 614)
  4768. return true;
  4769. else if (weapons.Item2 != null)
  4770. if (weapons.Item2.ID / 1000 == 614)
  4771. return true;
  4772. }
  4773. return false;
  4774. }
  4775. public bool SpiritFocus
  4776. {
  4777. get
  4778. {
  4779. if (!spiritFocus) return false;
  4780. if (Time32.Now > spiritFocusStamp.AddSeconds(5))
  4781. return true;
  4782. return false;
  4783. }
  4784. set { spiritFocus = value; if (value) spiritFocusStamp = Time32.Now; }
  4785. }
  4786.  
  4787. public uint GuildBattlePower
  4788. {
  4789. get
  4790. {
  4791. return guildBP;
  4792. }
  4793. set
  4794. {
  4795. // ExtraBattlePower -= guildBP;
  4796. guildBP = value;
  4797. Update(Network.GamePackets.Update.GuildBattlepower, guildBP, false);
  4798. Write(Math.Min(value, 15), 209, SpawnPacket);
  4799. // ExtraBattlePower += guildBP;
  4800. }
  4801. }
  4802. internal void PreviousTeleport()
  4803. {
  4804. Teleport(PreviousMapID, PrevX, PrevY);
  4805. BringToLife();
  4806. }
  4807. public bool IsThisLeftGate(int X, int Y)
  4808. {
  4809. if (Game.GuildWar.RightGate == null)
  4810. return false;
  4811. if (MapID == 1038)
  4812. {
  4813. if ((X == 223 || X == 222) && (Y >= 175 && Y <= 185))
  4814. {
  4815. if (Game.GuildWar.RightGate.Mesh / 10 == 27)
  4816. {
  4817. return true;
  4818. }
  4819. }
  4820. }
  4821. return false;
  4822. }
  4823. public bool InJail()
  4824. {
  4825. if (MapID == 6000 || MapID == 6001)
  4826. return true;
  4827. return false;
  4828. }
  4829. public bool IsThisRightGate(int X, int Y)
  4830. {
  4831. if (Game.GuildWar.LeftGate == null)
  4832. return false;
  4833. if (MapID == 1038)
  4834. {
  4835. if ((Y == 210 || Y == 209) && (X >= 154 && X <= 166))
  4836. {
  4837. if (Game.GuildWar.LeftGate.Mesh / 10 == 24)
  4838. {
  4839. return true;
  4840. }
  4841. }
  4842. }
  4843. return false;
  4844. }
  4845. public bool ThroughGate(int X, int Y)
  4846. {
  4847. return IsThisLeftGate(X, Y) || IsThisRightGate(X, Y);
  4848. }
  4849. public int BP
  4850. {
  4851. get
  4852. {
  4853. return BitConverter.ToInt32(this.SpawnPacket, _BattlePower);
  4854. }
  4855. set
  4856. {
  4857. Writer.Write(value, _BattlePower, this.SpawnPacket);
  4858. }
  4859. }
  4860. public bool EpicNinja()
  4861. {
  4862. if (EntityFlag == Game.EntityFlag.Player)
  4863. {
  4864. var weapons = Owner.Weapons;
  4865. if (weapons.Item1 != null)
  4866. if (weapons.Item1.ID / 1000 == 616)
  4867. return true;
  4868. else if (weapons.Item2 != null)
  4869. if (weapons.Item2.ID / 1000 == 616)
  4870. return true;
  4871. }
  4872. return false;
  4873. }
  4874. public byte[] PokerJoinPacket;
  4875. public int MyAllin = 0;
  4876. public bool EpicMonk()
  4877. {
  4878. if (EntityFlag == Game.EntityFlag.Player)
  4879. {
  4880. var weapons = Owner.Weapons;
  4881. if (weapons.Item1 != null && weapons.Item2 != null)
  4882. if (weapons.Item1.ID / 1000 == 622 && weapons.Item2.ID / 1000 == 622)
  4883. return true;
  4884. }
  4885. return false;
  4886. }
  4887. }
  4888. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement