CursingMagic.cpp
上传用户:sdhhxjz
上传日期:2017-09-16
资源大小:1728k
文件大小:33k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // CursingMagic.cpp: implementation of the CCursingMagic class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "..stdafx.h"
  5. #include "CursingMagic.h"
  6. #include "..HigherLayersOp_Magic.h"
  7. #include "..HigherLayersOp_Battle.h"
  8. #include "..HigherLayersOp_chr_status.h"
  9. #include "..HigherLayersNationSys.h"
  10. ///////////////////////////////////////////////////////////////////////////////
  11. // Construction/Destruction
  12. ///////////////////////////////////////////////////////////////////////////////
  13. CCursingMagic::CCursingMagic()
  14. {
  15. }
  16. CCursingMagic::~CCursingMagic()
  17. {
  18. }
  19. ///////////////////////////////////////////////////////////////////////////////
  20. // Public Method
  21. ///////////////////////////////////////////////////////////////////////////////
  22. bool CCursingMagic::Bind()
  23. Resist(CONFUSION, &CCursingMagic::Confusion);
  24. Resist(ABSOLUTE_PARALYSIS, &CCursingMagic::AbsoluteParalysis);
  25. Resist(STONELY, &CCursingMagic::Stonely);
  26. Resist(CURSE, &CCursingMagic::Curse);
  27. Resist(AREA_PARALYSIS, &CCursingMagic::AreaParalysis);
  28. Resist(AREA_CONFUSION, &CCursingMagic::AreaConfusion);
  29. Resist(SLOW, &CCursingMagic::Slow);
  30. Resist(SPIDER_WEB, &CCursingMagic::SpiderWeb);
  31. Resist(AREA_SLOW, &CCursingMagic::AreaSlow);
  32. Resist(FEATHER_OF_CURSE, &CCursingMagic::FeatherOfCurse);
  33. Resist(INTOXICATION, &CCursingMagic::Intoxication);
  34. Resist(TOXIC_CLOUD, &CCursingMagic::ToxicCloud);
  35. Resist(VAMPIRE_POISON, &CCursingMagic::VampirePoison);
  36. Resist(CURSE_OF_HELL, &CCursingMagic::CurseOfHell);
  37. Resist(AREA_POISON, &CCursingMagic::AreaPoison);
  38. Resist(LOST_SIGHT, &CCursingMagic::LostSight);
  39. Resist(AUTHORITY_LOST_SIGHT, &CCursingMagic::AuthorityLostSight);
  40. Resist(DISEASE_INDUCE, &CCursingMagic::DiseaseInduce);
  41. Resist(VAMPIRE_TOUCH, &CCursingMagic::VampireTouch);
  42. Resist(LIFE_DRAIN, &CCursingMagic::LifeDrain);
  43. Resist(GAZER, &CCursingMagic::Gazer); // 030509 kyo
  44. return true;
  45. bool CCursingMagic::Elapse(CHARLIST* pTarget)
  46. {
  47. const int nState = pTarget->GetState();
  48. switch (nState)
  49.     case CON_NORMAL:
  50.     case CON_DEATH:
  51. {
  52. break;
  53. }
  54.     default:
  55. { // 阿 历林惑怕 八荤
  56. CheckStun(pTarget);
  57. CheckSlow(pTarget);
  58. CheckPoison(pTarget);
  59. CheckBlind(pTarget);
  60. CheckFreeze(pTarget);
  61. // 惑怕函版
  62. if (nState != pTarget->GetState())
  63. {
  64. ::SendCharacterCondition(pTarget, 0);
  65. }
  66. // 10檬俊 茄锅究 HP皑家
  67. if (pTarget->GetPoisonedCount() >= 10)
  68. {
  69. const int nPoison = pTarget->GetPoisonedPoint();
  70. const int nLife = pTarget->DecLife(nPoison, 10);
  71. if (nLife != 0)
  72. {
  73. ::SendCharacterCondition(pTarget, -nLife);
  74. }
  75. pTarget->SetPoisonedCount(0);
  76. }
  77. break;    
  78. }
  79. return true;
  80. }
  81. bool CCursingMagic::Confusion()
  82. { // [11]去鄂 : 惑措规捞 付快胶 努腐茄 镑苞 促弗 镑栏肺 捞悼, 付过 荤侩 阂啊
  83. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  84. if (IsReturn(m_pTarget))
  85. { // 矫傈磊啊 雀蓖狼 鼻瓷 付过 惑怕扼搁
  86. m_pCaster->dwDontCasting = m_dwNow + wPeriod;
  87. // 措惑磊狼 惑怕 汲沥
  88. m_pCaster->ApplyCurse(1, CON_DAZE, m_dwNow + wPeriod);
  89. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  90. InitMagicResult(CMD_MAGIC_RESULT_T);
  91. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  92. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  93. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  94. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  95. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  96. SendMagicResult();
  97. return true;
  98. }
  99. m_pTarget->dwDontCasting = m_dwNow + wPeriod;
  100. // 措惑磊狼 惑怕 汲沥
  101. m_pTarget->ApplyCurse(1, CON_DAZE, m_dwNow + wPeriod);
  102. // 矫傈磊狼 版氰摹 拌魂
  103. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  104. // NK俊 拌魂
  105. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  106. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  107. InitMagicResult(CMD_MAGIC_RESULT_T);
  108. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  109. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  110. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  111. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  112. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  113. SendMagicResult();
  114. return true;
  115. }
  116. bool CCursingMagic::AbsoluteParalysis()
  117. { // [14]例措付厚 : 付过 荤侩 阂啊, 拱府利 傍拜 阂啊, 困摹 捞悼 阂啊
  118. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  119. if (IsReturn(m_pTarget))
  120. {
  121. m_pCaster->dwDontCasting = m_dwNow + wPeriod;
  122. m_pCaster->dwDontAttack = m_dwNow + wPeriod;
  123. m_pCaster->dwDontMove = m_dwNow + wPeriod;
  124. m_pCaster->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod); 
  125. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  126. InitMagicResult(CMD_MAGIC_RESULT_T);
  127. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  128. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  129. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  130. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  131. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  132. SendMagicResult();
  133. return true;
  134. }
  135. m_pTarget->dwDontCasting = m_dwNow + wPeriod;
  136. m_pTarget->dwDontAttack = m_dwNow + wPeriod;
  137. m_pTarget->dwDontMove = m_dwNow + wPeriod;
  138. m_pTarget->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
  139. // 矫傈磊狼 版氰摹 拌魂
  140. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  141. // NK俊 拌魂
  142. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  143. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  144. InitMagicResult(CMD_MAGIC_RESULT_T);
  145. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  146. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  147. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  148. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  149. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  150. SendMagicResult();
  151. return true;
  152. }
  153. bool CCursingMagic::Stonely()
  154. { // [13]籍拳 : 个捞 被绢辑 框流老 荐 绝绰 惑怕(拱府利 傍拜捞唱 付过 荤侩捞 阂啊,历林秦力甫 力寇茄 葛电 付过狼 利侩捞 救凳, 绢栋茄 单固瘤档 罐瘤 给窃)
  155. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  156. if (IsReturn(m_pTarget))
  157. {
  158. m_pCaster->dwDontCasting = m_dwNow + wPeriod;
  159. m_pCaster->dwDontAttack = m_dwNow + wPeriod;
  160. m_pCaster->dwDontMove = m_dwNow + wPeriod;
  161. m_pCaster->dwBlocking = m_dwNow + wPeriod;
  162. m_pCaster->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
  163. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  164. InitMagicResult(CMD_MAGIC_RESULT_T);
  165. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  166. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  167. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  168. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  169. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  170. SendMagicResult();
  171. return true;
  172. }
  173. m_pTarget->dwDontCasting = m_dwNow + wPeriod;
  174. m_pTarget->dwDontAttack = m_dwNow + wPeriod;
  175. m_pTarget->dwDontMove = m_dwNow + wPeriod;
  176. m_pTarget->dwBlocking = m_dwNow + wPeriod;
  177. m_pTarget->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
  178. // 矫傈磊狼 版氰摹 拌魂
  179. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  180. // NK俊 拌魂
  181. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  182. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  183. InitMagicResult(CMD_MAGIC_RESULT_T);
  184. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  185. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  186. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  187. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  188. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  189. SendMagicResult();
  190. return true;
  191. }
  192. bool CCursingMagic::Curse()
  193. { // [172]脚狼 历林 : 付过 荤侩 阂啊
  194. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  195. if (IsReturn(m_pTarget))
  196. {
  197. m_pCaster->dwDontCasting = m_dwNow + wPeriod;
  198. m_pCaster->ApplyCurse(1, CON_CURSE, m_dwNow + wPeriod);
  199. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  200. InitMagicResult(CMD_MAGIC_RESULT_T);
  201. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  202. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  203. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  204. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  205. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  206. SendMagicResult();
  207. return true;
  208. }
  209. m_pTarget->dwDontCasting = m_dwNow + wPeriod;
  210. m_pTarget->ApplyCurse(1, CON_CURSE, m_dwNow + wPeriod);
  211. // 矫傈磊狼 版氰摹 拌魂
  212. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  213. // NK俊 拌魂
  214. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  215. // 搬苞蔼 汲沥
  216. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  217. InitMagicResult(CMD_MAGIC_RESULT_T);
  218. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  219. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  220. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  221. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  222. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  223. SendMagicResult();
  224. return true;
  225. }
  226. bool CCursingMagic::AreaParalysis()
  227. { // [112]瘤开 付厚
  228. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  229. m_pTarget->dwDontCasting = m_dwNow + wPeriod;
  230. m_pTarget->dwDontAttack = m_dwNow + wPeriod;
  231. m_pTarget->dwDontMove = m_dwNow + wPeriod;
  232. m_pTarget->ApplyCurse(1, CON_STONE, m_dwNow + wPeriod);
  233. // 矫傈磊狼 版氰摹 拌魂
  234. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  235. // NK俊 拌魂
  236. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  237. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  238. InitMagicResult(CMD_MAGIC_RESULT_T);
  239. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  240. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  241. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  242. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  243. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  244. SendMagicResult();
  245. return true;
  246. }
  247. bool CCursingMagic::AreaConfusion()
  248. { // [114]瘤开 去鄂
  249. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  250. m_pTarget->dwDontCasting = m_dwNow + wPeriod;
  251. // 措惑磊狼 惑怕 汲沥
  252. m_pTarget->ApplyCurse(1, CON_DAZE, m_dwNow + wPeriod);
  253. // 矫傈磊狼 版氰摹 拌魂
  254. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  255. // NK俊 拌魂
  256. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  257. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  258. InitMagicResult(CMD_MAGIC_RESULT_T);
  259. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  260. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  261. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  262. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  263. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  264. SendMagicResult();
  265. return true;
  266. }
  267. bool CCursingMagic::Slow()
  268. { // [10]加档历窍 : 惑措规狼 捞悼加档(MovP)甫 1/2肺 皑家
  269. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  270. if (IsReturn(m_pTarget))
  271. {
  272. m_pCaster->speedDown.SetState(m_dwNow + wPeriod, 50);
  273. m_pCaster->ApplyCurse(2, CON_SLOW, m_dwNow + wPeriod);
  274. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  275. InitMagicResult(CMD_MAGIC_RESULT_T);
  276. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  277. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  278. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  279. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  280. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  281. SendMagicResult();
  282. return true;
  283. }
  284. m_pTarget->speedDown.SetState(m_dwNow + wPeriod, 50);
  285. m_pTarget->ApplyCurse(2, CON_SLOW, m_dwNow + wPeriod);
  286. // 矫傈磊狼 版氰摹 拌魂
  287. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  288. // NK俊 拌魂
  289. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  290. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  291. InitMagicResult(CMD_MAGIC_RESULT_T);
  292. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  293. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  294. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  295. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  296. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  297. SendMagicResult();
  298. return true;
  299. }
  300. bool CCursingMagic::SpiderWeb()
  301. { // [19]芭固临 : 惑措规狼 捞悼加档(MovP) 1/3 临捞绊, 傍拜 己傍伏 皑家                                
  302. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  303. if (IsReturn(m_pTarget))
  304. m_pCaster->speedDown.SetState(m_dwNow + wPeriod, 30);
  305. m_pCaster->ApplyCurse(2, CON_SLOW, m_dwNow + wPeriod);
  306. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  307. InitMagicResult(CMD_MAGIC_RESULT_T);
  308. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  309. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  310. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  311. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  312. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  313. SendMagicResult();
  314. return true;
  315. m_pTarget->speedDown.SetState(m_dwNow + wPeriod, 30);
  316. m_pTarget->ApplyCurse(2, CON_SLOW, m_dwNow + wPeriod);
  317. // 矫傈磊狼 版氰摹 拌魂
  318. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  319. // NK俊 拌魂
  320. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  321. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  322. InitMagicResult(CMD_MAGIC_RESULT_T);
  323. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  324. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  325. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  326. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  327. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  328. SendMagicResult();
  329. return true;
  330. }
  331. bool CCursingMagic::AreaSlow()
  332. { // [115]瘤开 加档历窍
  333. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  334. m_pTarget->speedDown.SetState(m_dwNow + wPeriod, 30);
  335. m_pTarget->ApplyCurse(2, CON_SLOW, m_dwNow + wPeriod);
  336. // 矫傈磊狼 版氰摹 拌魂
  337. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  338. // NK俊 拌魂
  339. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  340. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  341. InitMagicResult(CMD_MAGIC_RESULT_T);
  342. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  343. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  344. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  345. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  346. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  347. SendMagicResult();
  348. return true;
  349. }
  350. bool CCursingMagic::FeatherOfCurse()
  351. { // [93]付厚狼 标判
  352. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  353. if (IsReturn(m_pTarget))
  354. {
  355. m_pCaster->speedDown.SetState(m_dwNow + wPeriod, 50);
  356. m_pCaster->ApplyCurse(2, CON_SLOW, m_dwNow + wPeriod);
  357. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  358. InitMagicResult(CMD_MAGIC_RESULT_T);
  359. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  360. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  361. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  362. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  363. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  364. SendMagicResult();
  365. return true;
  366. }
  367. m_pTarget->speedDown.SetState(m_dwNow + wPeriod, 50);
  368. m_pTarget->ApplyCurse(2, CON_SLOW, m_dwNow + wPeriod);
  369. // 矫傈磊狼 版氰摹 拌魂
  370. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  371. // NK俊 拌魂
  372. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  373. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  374. InitMagicResult(CMD_MAGIC_RESULT_T);
  375. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  376. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  377. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  378. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  379. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  380. SendMagicResult();
  381. return true;
  382. }
  383. bool CCursingMagic::Intoxication()
  384. { // [12]吝刀 : 付过狼 扁夯 单固瘤蔼父怒 HP 皑家 饶 老沥樊狼 HP啊 辑辑洒 皑家
  385. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  386. const int nBase = 100 + m_pTarget->HpMax*0.05 + (m_pCaster->Skill[TACTICS_Magery]>>2);
  387. const int nPoison = __min(nBase, 2000);
  388. if (IsReturn(m_pTarget))
  389. {
  390. m_pCaster->SetPoisonedPoint(nPoison);
  391. m_pCaster->ApplyCurse(3, CON_POISON, m_dwNow + wPeriod);
  392. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  393. InitMagicResult(CMD_MAGIC_RESULT_T);
  394. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  395. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  396. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  397. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  398. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  399. SendMagicResult();
  400. return true;
  401. }
  402. m_pTarget->SetPoisonedPoint(nPoison);
  403. m_pTarget->ApplyCurse(3, CON_POISON, m_dwNow + wPeriod);
  404. // 矫傈磊狼 版氰摹 拌魂
  405. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  406. // NK俊 拌魂
  407. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  408. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  409. InitMagicResult(CMD_MAGIC_RESULT_T);
  410. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  411. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  412. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  413. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  414. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  415. SendMagicResult();
  416. return true;
  417. }
  418. bool CCursingMagic::ToxicCloud()
  419. { // [15]刀备抚 : 老沥瘤开 郴俊 吝刀捞 惯积
  420. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  421. const int nBase = 100 + m_pTarget->HpMax*0.04 + (m_pCaster->Skill[TACTICS_Magery]>>1);
  422. const int nPoison = __min(nBase, 2000);
  423. // 扁夯 付过 单固瘤
  424. if (IsReturn(m_pTarget))
  425. {
  426. m_pCaster->SetPoisonedPoint(nPoison);
  427. m_pCaster->ApplyCurse(3, CON_POISON, m_dwNow + wPeriod);
  428. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  429. InitMagicResult(CMD_MAGIC_RESULT_T);
  430. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  431. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  432. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  433. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  434. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  435. SendMagicResult();
  436. return true;
  437. }
  438. m_pTarget->SetPoisonedPoint(nPoison);
  439. m_pTarget->ApplyCurse(3, CON_POISON, m_dwNow + wPeriod);
  440. // 矫傈磊狼 版氰摹 拌魂
  441. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  442. // NK俊 拌魂
  443. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  444. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  445. InitMagicResult(CMD_MAGIC_RESULT_T);
  446. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  447. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  448. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  449. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  450. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  451. SendMagicResult();
  452. return true;
  453. }
  454. bool CCursingMagic::VampirePoison()
  455. { //< CSD-TW-030627 : [90]轨颇捞绢狼 刀
  456. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  457. const int nPoison = m_pTarget->HpMax*0.1;
  458. m_pTarget->SetPoisonedPoint(nPoison);
  459. m_pTarget->ApplyCurse(3, CON_POISON, m_dwNow + wPeriod);
  460. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  461. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  462. // NK俊 拌魂
  463. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  464. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  465. InitMagicResult(CMD_MAGIC_RESULT_T);
  466. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  467. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  468. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  469. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  470. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  471. SendMagicResult();
  472. return true;
  473. } //> CSD-TW-030627
  474. bool CCursingMagic::CurseOfHell()
  475. { //< CSD-TW-030627 : [94]秋狼 历林
  476. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  477. const int nPoison = m_pTarget->HpMax*0.1;
  478. m_pTarget->SetPoisonedPoint(nPoison);
  479. m_pTarget->ApplyCurse(3, CON_POISON, m_dwNow + wPeriod);
  480. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  481. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  482. // NK俊 拌魂
  483. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  484. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  485. InitMagicResult(CMD_MAGIC_RESULT_T);
  486. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  487. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  488. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  489. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  490. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  491. SendMagicResult();
  492. return true;
  493. } //> CSD-TW-030627
  494. bool CCursingMagic::AreaPoison()
  495. { // [113]瘤开 吝刀
  496. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  497. const int nPoison = m_pTarget->HpMax*0.05;
  498. m_pTarget->SetPoisonedPoint(nPoison);
  499. m_pTarget->ApplyCurse(3, CON_POISON, m_dwNow + wPeriod);
  500. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  501. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  502. // NK俊 拌魂
  503. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  504. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  505. InitMagicResult(CMD_MAGIC_RESULT_T);
  506. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  507. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  508. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  509. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  510. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  511. SendMagicResult();
  512. return true;
  513. }
  514. bool CCursingMagic::LostSight()
  515. { // [82] 矫仿惑角 : 矫具甫 2鸥老肺 良塞
  516. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  517. if (IsReturn(m_pTarget))
  518. {
  519. m_pCaster->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
  520. // 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
  521. ::SendMagicCommand(m_pCaster, SET_LOSTSIGHT, 0, wPeriod);
  522. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  523. InitMagicResult(CMD_MAGIC_RESULT_T);
  524. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  525. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  526. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  527. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  528. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  529. SendMagicResult();
  530. return true;
  531. }
  532. m_pTarget->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
  533. if (m_pTarget->IsNpc())
  534. { // NPC 棺 阁胶磐狼 矫具惑角 瓤苞 楷免窃荐 龋免
  535. ::NPCLostSight(m_pTarget, m_dwNow + wPeriod);
  536. }
  537. else
  538. { // 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
  539. ::SendMagicCommand(m_pTarget, SET_LOSTSIGHT, 0, wPeriod);
  540. }
  541. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  542. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  543. // NK俊 拌魂
  544. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  545. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  546. InitMagicResult(CMD_MAGIC_RESULT_T);
  547. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  548. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  549. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  550. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  551. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  552. SendMagicResult();
  553. return true;
  554. }
  555. bool CCursingMagic::AuthorityLostSight()
  556. { // [177] 矫仿惑角狼 鼻瓷 : 矫具甫 2鸥老肺 良塞
  557. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  558. if (IsReturn(m_pTarget))
  559. {
  560. m_pCaster->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
  561. // 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
  562. ::SendMagicCommand(m_pCaster, SET_LOSTSIGHT, 0, wPeriod);
  563. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  564. InitMagicResult(CMD_MAGIC_RESULT_T);
  565. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  566. m_packet.u.magic.server_magic_result_t.idTarget = m_idCaster;
  567. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  568. m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
  569. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  570. SendMagicResult();
  571. return true;
  572. }
  573. m_pTarget->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
  574. if (m_pTarget->IsNpc())
  575. { // NPC 棺 阁胶磐狼 矫具惑角 瓤苞 楷免窃荐 龋免
  576. ::NPCLostSight(m_pTarget, m_dwNow  + wPeriod);
  577. }
  578. else
  579. { // 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
  580. ::SendMagicCommand(m_pTarget, SET_LOSTSIGHT, 0, wPeriod);
  581. }
  582. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  583. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  584. // NK俊 拌魂
  585. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  586. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  587. InitMagicResult(CMD_MAGIC_RESULT_T);
  588. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  589. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  590. m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
  591. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  592. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  593. SendMagicResult();
  594. return true;
  595. }
  596. bool CCursingMagic::DiseaseInduce()
  597. { //< CSD-031007 : [16]龙捍蜡惯 : Health(硅绊悄 沥档) 皑家
  598. if (m_pTarget->IsNpc())
  599. {
  600. return true;
  601. }
  602. if (IsReturn(m_pTarget))
  603. {
  604. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  605. InitMagicResult(CMD_MAGIC_RESULT);
  606. m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
  607. m_packet.u.magic.server_magic_result.idTarget = m_idCaster;
  608. m_packet.u.magic.server_magic_result.nState = m_pCaster->GetState();
  609. m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
  610. SendMagicResult();
  611. return true;
  612. }
  613. if (m_pTarget->DecHungry(m_pTarget->HungryMax/2) > 0)
  614. {
  615. m_pTarget->SendCharInfoBasic(SP, m_pTarget->Hungry);
  616. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  617. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
  618. }
  619. // NK俊 拌魂
  620. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  621. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  622. InitMagicResult(CMD_MAGIC_RESULT);
  623. m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
  624. m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
  625. m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
  626. m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
  627. SendMagicResult();
  628. return true;
  629. } //> CSD-031007
  630. bool CCursingMagic::VampireTouch()
  631. { // [17]轨颇捞绢狼 颊辨 : 措惑磊狼 HP甫 哗狙酒 矫傈磊狼 HP俊 歹窃(措惑磊啊 磷瘤绰 臼澜)
  632. const int nDiff = m_pCaster->GetLevel() - m_pTarget->GetLevel(); // CSD-030806
  633. // HP甫 哗狙阑 % 拌魂
  634. int nPercent = (35 + nDiff) + m_pCaster->Skill[TACTICS_Magery]/4;
  635. if (nPercent > 80)  nPercent = 80;
  636. if (nPercent < 10)  nPercent = 10;
  637. if (IsReturn(m_pTarget))
  638. {
  639. const int nTemp = m_pTarget->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
  640. const int nMinus = m_pCaster->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
  641. const int nPlus = m_pTarget->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
  642. ::SendCharacterCondition(m_pTarget, nPlus);
  643. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  644. InitMagicResult(CMD_MAGIC_RESULT_H);
  645. m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
  646. m_packet.u.magic.server_magic_result_h.idTarget = m_idCaster;
  647. m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
  648. m_packet.u.magic.server_magic_result_h.nState = m_pCaster->GetState();
  649. m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
  650. SendMagicResult();
  651. return true;
  652. }
  653. const int nTemp = m_pCaster->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
  654. const int nMinus = m_pTarget->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
  655. const int nPlus = m_pCaster->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
  656. ::SendCharacterCondition(m_pCaster, nPlus);
  657. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  658. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 1, abs(nMinus));
  659. // NK俊 拌魂
  660. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  661. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  662. InitMagicResult(CMD_MAGIC_RESULT_H);
  663. m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
  664. m_packet.u.magic.server_magic_result_h.idTarget = m_idTarget;
  665. m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
  666. m_packet.u.magic.server_magic_result_h.nState = m_pTarget->GetState();
  667. m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
  668. SendMagicResult();
  669. return true;
  670. }
  671. bool CCursingMagic::LifeDrain()
  672. { // [190]积疙仿 呕秒 : 措惑磊狼 HP甫 哗狙酒 矫傈磊狼 HP俊 歹窃(饭骇俊 蝶弗 眉仿摹 软荐樊 瞒殿 利侩
  673. const int nDiff = m_pCaster->GetLevel() - m_pTarget->GetLevel(); // CSD-030806
  674. // HP甫 哗狙阑 % 拌魂
  675. int nPercent = (50 + nDiff) + m_pCaster->Skill[TACTICS_Orison]/3;
  676. if (nPercent > 90)  nPercent = 90;
  677. if (nPercent < 10)  nPercent = 10;
  678. if (IsReturn(m_pTarget))
  679. {
  680. const int nTemp = m_pTarget->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
  681. const int nMinus = m_pCaster->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
  682. const int nPlus = m_pTarget->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
  683. ::SendCharacterCondition(m_pTarget, nPlus);
  684. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  685. InitMagicResult(CMD_MAGIC_RESULT_H);
  686. m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
  687. m_packet.u.magic.server_magic_result_h.idTarget = m_idCaster;
  688. m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
  689. m_packet.u.magic.server_magic_result_h.nState = m_pCaster->GetState();
  690. m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
  691. SendMagicResult();
  692. return true;
  693. }
  694. const int nTemp = m_pCaster->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
  695. const int nMinus = m_pTarget->DecLife(nTemp, 1);    // 角力 HP甫 哗疽绰 樊
  696. const int nPlus = m_pCaster->IncLife(nMinus);       // 角力 HP甫 歹窍绰 樊
  697. ::SendCharacterCondition(m_pCaster, nPlus);
  698. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
  699. ::AddCasterEXP(m_pCaster, m_pTarget, 2, 1, abs(nMinus));
  700. // NK俊 拌魂
  701. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  702. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  703. InitMagicResult(CMD_MAGIC_RESULT_H);
  704. m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
  705. m_packet.u.magic.server_magic_result_h.idTarget = m_idTarget;
  706. m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
  707. m_packet.u.magic.server_magic_result_h.nState = m_pTarget->GetState();
  708. m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
  709. SendMagicResult();
  710. return true;
  711. }
  712. bool CCursingMagic::Gazer()
  713. { // [109]30%狼 犬伏肺 脚狼 历林(付过荤侩阂啊)甫 角青茄促
  714. if( rand()%2 == 0 ) // 030514 kyo 50%犬伏
  715. {
  716. return false;
  717. }
  718. const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
  719. m_pTarget->dwDontCasting = m_dwNow + wPeriod;
  720. m_pTarget->ApplyCurse(1, CON_CURSE, m_dwNow + wPeriod);
  721. InitMagicResult(CMD_MAGIC_RESULT_T);
  722. m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
  723. m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
  724. m_packet.u.magic.server_magic_result_t.wDuration= wPeriod;
  725. m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
  726. m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
  727. SendMagicResult();
  728. return true;
  729. }
  730. ///////////////////////////////////////////////////////////////////////////////
  731. // Protected Method
  732. ///////////////////////////////////////////////////////////////////////////////
  733. bool CCursingMagic::CheckDeath(int nDamage)
  734. { //< CSD-TW-030627
  735. if (IsReturn(m_pCaster))    return false;
  736. // Life 皑家
  737. const int nLife = m_pTarget->DecLife(nDamage); 
  738. if (nLife > 0)
  739. {
  740. ::SendCharacterCondition(m_pTarget, -nLife);
  741. }
  742. if (m_pTarget->IsDead())
  743. {
  744. if (m_pCaster->IsPlayer() && m_pTarget->IsPlayer())
  745. {
  746. ::KillWho(m_pTarget, m_pCaster);
  747. }
  748. if (m_pTarget->IsNpc())
  749. {
  750. m_pTarget->m_xSummon.Remove(KillMonster);
  751. }
  752. ::killCharacter(m_pCaster, m_pTarget);
  753. // 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷篮 版快
  754. ::AddCasterEXP(m_pCaster, m_pTarget, 1, 1, abs(nDamage));
  755. // NK俊 拌魂
  756. ::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
  757. // 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
  758. InitMagicResult(CMD_MAGIC_RESULT);
  759. m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
  760. m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
  761. m_packet.u.magic.server_magic_result.nState = CON_DEATH;
  762. m_packet.u.magic.server_magic_result.nResult = HIT_AND_DEAD;
  763. SendMagicResult();
  764. return true;
  765. }
  766. return false;
  767. } //> CSD-TW-030627
  768. void CCursingMagic::CheckStun(CHARLIST* pTarget)
  769. {
  770. if (pTarget->IsCurse(1, g_curr_time))
  771. {
  772. pTarget->ClearCurse(1);
  773. }
  774. }
  775. void CCursingMagic::CheckSlow(CHARLIST* pTarget)
  776. {
  777. if (pTarget->IsCurse(2, g_curr_time))
  778. {
  779. pTarget->ClearCurse(2);
  780. }
  781. }
  782. void CCursingMagic::CheckPoison(CHARLIST* pTarget)
  783. {
  784. if (pTarget->IsCurse(3, g_curr_time))
  785. {
  786. pTarget->ClearCurse(3);
  787. }
  788. }
  789. void CCursingMagic::CheckBlind(CHARLIST* pTarget)
  790. {
  791. if (pTarget->IsCurse(4, g_curr_time))
  792. {
  793. pTarget->ClearCurse(4);
  794. }
  795. }
  796. void CCursingMagic::CheckFreeze(CHARLIST* pTarget)
  797. {
  798. if (pTarget->IsCurse(6, g_curr_time))
  799. {
  800. pTarget->ClearCurse(6);
  801. }
  802. }
  803. ///////////////////////////////////////////////////////////////////////////////
  804. // Private Method
  805. ///////////////////////////////////////////////////////////////////////////////
  806. bool CCursingMagic::IsReturn(CHARLIST* pTarget) const
  807. {
  808. return (pTarget->IsPlayer() && pTarget->IsReturn()) ? true:false;
  809. }