exp_and_level.lua
Upload User: bjtaixing
Upload Date: 2021-01-15
Package Size: 24749k
Code Size: 61k
Category:

E-Books

Development Platform:

DOS

  1. --此处放置经验值和级别有关的计算
  2. InTeamGetExp_RAID = 1
  3. --创建工会的物品检测
  4. function AskGuildItem(role,Guild_type)
  5. local gold = GetChaAttr(role,ATTR_GD)
  6. local fame = GetChaAttr(role,ATTR_FAME) 
  7. local attr_guild = HasGuild ( role ) 
  8. if attr_guild ~= 0 then 
  9. HelpInfo(role,0,"已有所属工会")
  10. --SystemNotice(role,0,"已有所属工会")
  11. return 0 
  12. end 
  13. local Lv = Lv ( role )
  14. if Lv < 40 then
  15. SystemNotice ( role , "等级不足40级,无法创建" )
  16. return 0
  17. end
  18. if Guild_type == 1 then --判定海盗工会
  19. if Guild2_ItemMax > 0 then
  20. for i = 1 , Guild2_ItemMax , 1 do
  21. local K = Check_BagItem(role,Guild2_item[i],Guild2_count[i])
  22. if K == 0 then
  23. HelpInfo(role,0,"道具不足无法创建")
  24. --SystemNotice(role,0,"道具不足无法创建")
  25. return 0
  26. end
  27. end
  28. end
  29. if gold < Guild2_Gold then
  30. HelpInfo(role,0,"金钱不足无法创建")
  31. --SystemNotice(role,0,"金钱不足无法创建")
  32. return 0
  33. end
  34. if fame < Guild2_fame then
  35. HelpInfo(role,0,"声望不足无法创建")
  36. --SystemNotice(role,0,"声望不足无法创建")
  37. return 0
  38. end
  39. elseif Guild_type == 0 then --判定海军工会
  40. if Guild1_ItemMax > 0 then
  41. for i = 1 , Guild1_ItemMax , 1 do
  42. local K = Check_BagItem(role,Guild1_item[i],Guild1_count[i])
  43. if K == 0 then
  44. HelpInfo(role,0,"道具不足无法创建")
  45. --SystemNotice(role,0,"道具不足无法创建")
  46. return 0
  47. end
  48. end
  49. end
  50. if gold < Guild1_Gold then
  51. HelpInfo(role,0,"金钱不足无法创建")
  52. --SystemNotice(role,0,"金钱不足无法创建")
  53. return 0
  54. end
  55. if fame < Guild1_fame then
  56. HelpInfo(role,0,"声望不足无法创建")
  57. --SystemNotice(role,0,"声望不足无法创建")
  58. return 0
  59. end
  60. else
  61. --LG("checkguild","工会类型错误  Guild_type = ",Guild_type)
  62. end
  63. return 1
  64. end 
  65. function Check_BagItem(role,a,b) --检查背包数量是否足够
  66. local a = CheckBagItem ( role , a ) 
  67. if a>= b then 
  68. return 1 
  69. else 
  70. return 0 
  71. end 
  72. end 
  73. --删除创建工会所需物品
  74. function DeductGuildItem(role,Guild_type)
  75. local gold = GetChaAttr(role,ATTR_GD)
  76. local fame = GetChaAttr(role,ATTR_FAME) 
  77. local attr_guild = HasGuild ( role )  
  78. -- if attr_guild ~= 0 then 
  79. -- HelpInfo(role,0,"已有所属工会") 
  80. --SystemNotice(role,0,"已有所属工会") 
  81. -- return 0 
  82. -- end 
  83. if Guild_type == 1 then --判定海盗工会
  84. -- if Guild2_ItemMax > 0 then
  85. -- for i = 1 ,Guild2_ItemMax,1 do
  86. -- local K = DelBagItem(role,Guild2_item[i],Guild2_count[i])
  87. -- end
  88. -- end
  89. DelBagItem(role,1780,1)
  90. gold = gold - Guild2_Gold
  91. fame = fame - Guild2_fame
  92. SetAttrChangeFlag ( role )
  93. SetChaAttr(role,ATTR_GD,gold)
  94. SetChaAttr(role,ATTR_FAME,fame)
  95. SyncChar( role, 4 )
  96. elseif Guild_type == 0 then --判定海军工会
  97. -- if Guild1_ItemMax > 0 then
  98. -- for i = 1 ,Guild1_ItemMax,1 do
  99. -- local K = DelBagItem(role,Guild1_item[i],Guild1_count[i])
  100. -- end
  101. -- end
  102. DelBagItem(role,1780,1)
  103. gold = gold - Guild1_Gold
  104. fame = fame - Guild1_fame
  105. SetAttrChangeFlag ( role )
  106. SetChaAttr(role,ATTR_GD,gold)
  107. SetChaAttr(role,ATTR_FAME,fame)
  108. SyncChar( role, 4 )
  109. else
  110. --LG("checkguild","工会类型错误  Guild_type = ",Guild_type)
  111. end
  112. end
  113. function AskJoinGuild ( role , guild_type )  -- 申请加入工会判定   工会类型 0-海军,1-海盗
  114. local attr_guild = HasGuild ( role )  
  115. if attr_guild ~= 0 then 
  116. HelpInfo(role,0,"已有所属工会") 
  117. --SystemNotice(role,0,"已有所属工会") 
  118. return 0 
  119. end 
  120. -- local fame = GetChaAttr ( role , ATTR_FAME ) 
  121. -- if guild_type == 0 then 
  122. -- if fame < JOINGUILD_NAVY_FAME then 
  123. -- HelpInfo(role,0,"海军名声不足") 
  124. -- --SystemNotice(role,0,"海军名声不足") 
  125. -- return 0 
  126. -- end 
  127. -- elseif guild_type == 1 then 
  128. -- if fame > JOINGUILD_PIRATE_FAME then 
  129. -- HelpInfo(role,0,"海盗名声不足") 
  130. -- --SystemNotice(role,0,"海盗名声不足") 
  131. -- return 0 
  132. -- end 
  133. -- end 
  134. return 1 
  135. end 
  136. --经验分配(包含组队经验分配)
  137. --当有角色死亡时被调用
  138. function GetExp_New(dead , atk  ) 
  139. if ValidCha(atk) == 0  then 
  140. LG ( "exp_atker=NIL" , "function GetExp_New : atker = nil " ) 
  141. return 
  142. end 
  143. KillFlower(dead , atk)
  144. if IsPlayer(dead)==1 then 
  145. if IsPlayerInJJC(dead)~= 0  then
  146. local teamNum,teamlv,inTeam,inTeamment=IsPlayerInJJC(dead)
  147. JJCteam[teamNum].lv[teamlv].InTeam[inTeam].deadth[inTeamment]= 3
  148. JJCteam[teamNum].lv[teamlv].InTeam[inTeam].deadthCha[inTeamment] =dead 
  149. if teamNum == 2 then
  150. JJCteam[teamNum].lv[teamlv].InTeam[3-inTeam].num = JJCteam[teamNum].lv[teamlv].InTeam[3-inTeam].num +1
  151. end
  152. KillPlayerDropFlower( dead , atk )
  153. return
  154. end
  155. end
  156. --SystemNotice ( atk , "进入GetExp_New")
  157. -- GoTo( dead, 66,66,"starena33")
  158. -- GoTo( dead, 66,66,"starena33")
  159. -- SetChaPerHp(dead,0.8)
  160. -- SetChaPerSp(dead,0.8)
  161. --LuaPrint("Enter function GetExp() --[[经验值获得公式1、正常杀怪 2、人物被怪物杀死 3、人物正常pk死亡 4、无经验奖惩]]--") 
  162. local a = Check_Combat_Mod(dead , atk ) 
  163. if a==1 then 
  164. --LG("exp" , " enter  pkm mod" ) 
  165. local rolemod_atker = IsPlayer(atk) 
  166. local rolemod_defer = IsPlayer(dead)  --检查角色种类:0、怪物, 1、玩家
  167. local MonsterID = GetChaID(dead)
  168. if rolemod_atker == 1 and rolemod_defer == 0 and MonsterID == 1143 then
  169. local Item_CanGet = GetChaFreeBagGridNum ( atk )
  170. if Item_CanGet < 1 then
  171. SystemNotice(atk , "你身上没有空格,无法获得命运宝箱。")
  172. UseItemFailed ( atk )
  173. return
  174. end
  175. local lv= GetChaAttr(atk, ATTR_LV) 
  176. if lv <40 then
  177. SystemNotice ( atk , "角色当前级别低于40级,无法获得命运宝箱。" )
  178. UseItemFailed ( atk )
  179. return
  180. end
  181. local Has_BOXBOX = CheckBagItem ( atk , 6359 )
  182. if Has_BOXBOX >= 1 then
  183. SystemNotice ( atk , "命运宝箱!贪婪退散!一个角色同时只能携带一口命运宝箱。" )
  184. UseItemFailed ( atk )
  185. return
  186. end
  187. GiveItem ( atk , 0 , 6359 , 1 , 0 )
  188. end
  189. local exp1= GetChaAttr(atk,ATTR_CEXP)
  190. GetExp_PKM( dead , atk ) --[[player kill monster]]--
  191. local exp2= GetChaAttr(atk,ATTR_CEXP)
  192. local expaddZB=exp2-exp1
  193. expaddZB=ZBexpadd(atk,expaddZB)
  194. if expaddZB <1 then
  195. expaddZB=1
  196. end 
  197. XSJYCunChu(atk,expaddZB)
  198. local expZB= exp1+expaddZB
  199. SetChaAttr(atk,ATTR_CEXP,expZB)
  200. --GetExp_PKM( dead , atk ) --[[player kill monster]]--
  201. --挖宝任务怪40-60级巨额经验(42W)op--by—locke.coco
  202. if rolemod_atker == 1 and rolemod_defer == 0 then
  203. if MonsterID == 1144 or MonsterID == 1145 or MonsterID == 1146 or MonsterID == 1147 then
  204. getmuchexpbf (atk)
  205. end
  206. end
  207. --挖宝任务怪40-60级巨额经验(42W)ed
  208. elseif a==2 then 
  209. --LG("exp" , " enter  mkp mod" ) 
  210. ----------------项链扣除
  211. local cha = TurnToCha ( dead )
  212. local Cha_Num = GetChaTypeID( cha )
  213. -- local xianglian = GetEquipItemP(dead,5)
  214. -- local xianglian_id = GetItemID ( xianglian )
  215. -- if xianglian_id == 5870 then
  216. -- RemoveChaItem ( dead , 5870 , 1 , 1 , -1, 0 , 1  )
  217. -- end
  218. ---------------戒指移除
  219. -- local jiezhi2 = GetEquipItemP(dead,8)
  220. -- local jiezhi2_id = GetItemID ( jiezhi2 )
  221. -- if  jiezhi2_id == 5871 then
  222. -- RemoveChaItem ( dead , jiezhi2_id , 0 , 1 , -1, 0 , 1  )
  223. -- end
  224. -------a=2--------------魔剑移除
  225. local mojian1 = GetEquipItemP( dead , 9 )
  226. local mojian1_id = GetItemID ( mojian1 )
  227. if  mojian1_id == 6347 then
  228. WaBao_MJdiaoluo( dead)
  229. RemoveChaItem ( dead , mojian1_id , 1 , 0 , -1, 0 , 1  )
  230. end
  231. local mojian2 = CheckBagItem ( dead , 6347 )
  232. if mojian2 > 0 then
  233. WaBao_MJdiaoluo( dead)
  234. RemoveChaItem ( dead , 6347 , 1 , 2 , -1, 0 , 1  )
  235. end
  236. GetExp_MKP(dead , atk) --[[monster kill player]]--
  237. elseif a==3 then 
  238. --LG("exp" , " enter  pkp mod" ) 
  239. -----------宙斯套装
  240. local CheckItem_ZHOUSI  = CheckItem_ZHOUSI ( dead )
  241. --local sklv = 1
  242. --- SystemNotice(dead,"CheckItem_ZHOUSI=="..CheckItem_ZHOUSI)
  243. if CheckItem_ZHOUSI == 1 then
  244. local t = {} 
  245. t[0] = atk  
  246. t[1] = GetTeamCha(atk, 0 )  
  247. t[2] = GetTeamCha(atk, 1 )   
  248. t[3] = GetTeamCha(atk, 2 )    
  249. t[4] = GetTeamCha(atk, 3 )
  250. local i=0
  251. for i=0,4,1 do
  252. if ValidCha (t[i]) ~= 0 then 
  253. local cha_name = GetChaDefaultName (t[i] )
  254. local hp = GetChaAttr( t[i] , ATTR_HP ) 
  255. local sp = GetChaAttr( t[i] , ATTR_SP ) 
  256. local  hp_add = math.floor(hp*0.5)
  257. local  sp_add = math.floor(sp*0.5)
  258. Sp_Red (t[i], sp_add) 
  259. Hp_Dmg(t[i],hp_add)
  260. Notice ("宙斯震怒!犯天威者受到严厉惩罚!")
  261. -- Notice(dead,"杀人者"..i.."  伤血完毕")
  262. end 
  263. end
  264. end
  265. ----------------项链扣除
  266. local cha = TurnToCha ( dead )
  267. local Cha_Num = GetChaTypeID( cha )
  268. -- local xianglian = GetEquipItemP(dead,5)
  269. -- local xianglian_id = GetItemID ( xianglian )
  270. -- if xianglian_id == 5870 then
  271. -- RemoveChaItem ( dead , 5870 , 1 , 1 , -1, 0 , 1  )
  272. -- end
  273. ---------------戒指移除
  274. -- local jiezhi2 = GetEquipItemP(dead,8)
  275. -- local jiezhi2_id = GetItemID ( jiezhi2 )
  276. -- if jiezhi2_id == 5871 then
  277. -- RemoveChaItem ( dead , jiezhi2_id , 0 , 1 , -1, 0 , 1  )
  278. -- end
  279. -------a=3--------------魔剑移除
  280. local mojian3 = GetEquipItemP( dead , 9 )
  281. local mojian3_id = GetItemID ( mojian3 )
  282. if  mojian3_id == 6347 then
  283. WaBao_MJdiaoluo( dead)
  284. RemoveChaItem ( dead , mojian3_id , 1 , 0 , -1, 0 , 1  )
  285. end
  286. local mojian4 = CheckBagItem ( dead , 6347 )
  287. if mojian4 > 0 then
  288. WaBao_MJdiaoluo( dead)
  289. RemoveChaItem ( dead , 6347 , 1 , 2 , -1, 0 , 1  )
  290. end
  291. ---------------证书移除
  292. local qingbao = CheckBagItem(dead,6322)
  293. if qingbao ~= 0 then
  294. RemoveChaItem( dead , 6322 , 1 , 2 , -1, 0 , 1  )
  295. end
  296. ---竞技场
  297. ---------竞技场死亡掉落花花草草
  298. GetExp_PKP(dead , atk) --[[player kill player]]--
  299. elseif a==4 then 
  300. --LG("exp" , " enter  mkm mod" ) 
  301. GetExp_Noexp(dead , atk) --[[monster kill monster]]--
  302. else 
  303. --LuaPrint("无法判定经验获得模式".."n") return 
  304. end 
  305. end 
  306. function WaBao_MJdiaoluo( dead)------------魔剑掉落(拥有者死亡)公告
  307. local x, y = GetChaPos(dead)
  308. local name = GetChaDefaultName(dead)
  309. local map_role = GetChaMapName ( dead )
  310. local map_role_name = 0
  311. if map_role == "garner" then
  312. local map_role_name = "加纳大陆"
  313. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  314. elseif map_role == "magicsea" then
  315. local map_role_name = "魔女海岸"
  316. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  317. elseif map_role == "darkblue" then
  318. local map_role_name = "深蓝群岛"
  319. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  320. elseif map_role == "eastgoaf" then
  321. local map_role_name = "东部废矿"
  322. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  323. elseif map_role == "lonetower" then
  324. local map_role_name = "寂寞之塔"
  325. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  326. elseif map_role == "secretgarden" then
  327. local map_role_name = "竞技花园"
  328. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  329. elseif map_role == "darkswamp" then
  330. local map_role_name = "阴暗沼泽"
  331. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  332. elseif map_role == "abandonedcity" then
  333. local map_role_name = "废灵之都"
  334. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  335. elseif map_role == "abandonedcity2" then
  336. local map_role_name = "废灵之都二层"
  337. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  338. elseif map_role == "abandonedcity3" then
  339. local map_role_name = "废灵之都三层"
  340. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  341. elseif map_role == "puzzleworld" then
  342. local map_role_name = "魔方世界"
  343. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  344. elseif map_role == "puzzleworld2" then
  345. local map_role_name = "魔方世界二层"
  346. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  347. elseif map_role == "teampk" then
  348. local map_role_name = "竞技场"
  349. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  350. elseif map_role == "jialebi" then
  351. local map_role_name = "加勒比"
  352. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  353. elseif map_role == "garner2" then
  354. local map_role_name = "乱斗白银城"
  355. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  356. elseif map_role == "hell" then
  357. local map_role_name = "地狱一层"
  358. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  359. elseif map_role == "hell2" then
  360. local map_role_name = "地狱二层"
  361. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  362. elseif map_role == "hell3" then
  363. local map_role_name = "地狱三层"
  364. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  365. elseif map_role == "hell4" then
  366. local map_role_name = "地狱四层"
  367. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  368. elseif map_role == "hell5" then
  369. local map_role_name = "地狱五层"
  370. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  371. elseif map_role == "guildwar" then
  372. local map_role_name = "圣战"
  373. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  374. elseif map_role == "leiting2" then
  375. local map_role_name = "幻影雷霆"
  376. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  377. elseif map_role == "shalan2" then
  378. local map_role_name = "幻影沙岚"
  379. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  380. elseif map_role == "binglang2" then
  381. local map_role_name = "幻影冰狼"
  382. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  383. elseif map_role == "guildwar2" then
  384. local map_role_name = "小圣战"
  385. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  386. elseif map_role == "yschurch" then
  387. local map_role_name = "伊式教堂"
  388. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  389. elseif map_role == "07xmas" then
  390. local map_role_name = "圣诞村"
  391. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  392. elseif map_role == "sdBoss" then
  393. local map_role_name = "圣诞竞技场"
  394. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  395. elseif map_role == "07xmas2" then
  396. local map_role_name = "逆反圣诞村"
  397. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  398. elseif map_role == "prisonisland" then
  399. local map_role_name = "监狱岛"
  400. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  401. elseif map_role == "starena1" then
  402. local map_role_name = "一号竞技场"
  403. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  404. elseif map_role == "starena2" then
  405. local map_role_name = "二号竞技场"
  406. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  407. elseif map_role == "starena3" then
  408. local map_role_name = "三号竞技场"
  409. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  410. elseif map_role == "winterland" then
  411. local map_role_name = "冬岛群岛"
  412. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  413. elseif map_role == "mjing1" then
  414. local map_role_name = "光明秘境第一境界"
  415. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  416. elseif map_role == "mjing2" then
  417. local map_role_name = "光明秘境第二境界"
  418. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  419. elseif map_role == "mjing3" then
  420. local map_role_name = "暗黑秘境第一境界"
  421. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  422. elseif map_role == "mjing4" then
  423. local map_role_name = "暗黑秘境第二境界"
  424. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  425. elseif map_role == "mingyun" then
  426. local map_role_name = "命运房间"
  427. ScrollNotice(" 魔剑噬魂的持有者 "..name.." 被击败了,魔剑掉在了 "..map_role_name.." 地区的 "..math.floor(x/100)..","..math.floor(y/100).." 附近,第一个拿起它的人将成为其新的主人! ", 1 )
  428. end
  429. end
  430. function Check_Combat_Mod(dead , atk) --[[判定经验奖惩方式]]-- 
  431. --LuaPrint("Enter function Check_Combat_Mod () --[[判定经验奖惩方式]]-- ") 
  432. local rolemod_atker = IsPlayer(atk) 
  433. --LG("exp" , " atker role = " ,  rolemod_atker ) 
  434. local rolemod_defer = IsPlayer(dead)  --检查角色种类:0、怪物, 1、玩家
  435. --LG("exp" , " defer role = " ,  rolemod_defer ) 
  436. if (rolemod_atker==0) and (rolemod_defer==0) then 
  437. return 4 
  438. elseif rolemod_atker==0 and rolemod_defer==1 then 
  439. return 2 
  440. elseif rolemod_atker==1 and rolemod_defer==0 then 
  441. return 1 
  442. elseif rolemod_atker==1 and rolemod_defer==1 then 
  443. return 3 
  444. else 
  445. --LuaPrint("错误的角色类型值".."n") 
  446. return 
  447. end 
  448. --LuaPrint("Out function Check_Combat_Mod () --[[判定经验奖惩方式]]-- ") 
  449. end 
  450. function GetExp_PKM( dead , atk  ) --[[player kill monster 经验值获得公式 所得exp=exp(d)/math.floor(|lv(a)-lv(b)|*0.1+1)]]--
  451. -- SystemNotice ( atk , "GetExp_PKM")
  452. -- LG ( "exp" , " enter getexp " ) 
  453. --SystemNotice ( atk , "进入GetExp_PKM")
  454. -- local EXP_RAID_STATE = 1
  455. -- local StateLv = GetChaStateLv ( atk , STATE_SBJYGZ )
  456. -- if StateLv >= 0 and StateLv <= 10 then
  457. -- EXP_RAID_STATE = StateLv + 1
  458. -- end
  459. local dead_lv = GetChaAttrI( dead , ATTR_LV ) --获得死者的等级   
  460. local dead_exp = GetChaAttrI( dead , ATTR_CEXP ) * EXP_RAID
  461. LG("exp" , "deadlv = " , dead_lv ) 
  462. LG("exp" , "dead_exp = " , dead_exp ) 
  463. local k = {} 
  464. local kdmg = {} 
  465. local k_exp = {} 
  466. k[0] , kdmg[0] = GetChaHarmByNo ( dead , 0 ) 
  467. -- if ValidCha ( k[0] ) == 0 then 
  468. -- SystemNotice ( atk , "伤害列表首位为空" ) 
  469. -- end 
  470. --SystemNotice ( atk , "攻击伤害排位0号") 
  471. --SystemNotice ( atk , "攻击伤害为"..kdmg[0]) 
  472. k[1] , kdmg[1] = GetChaHarmByNo ( dead , 1 ) 
  473. -- if ValidCha ( k[1] ) == 0 then 
  474. -- SystemNotice ( atk , "伤害列表2位为空" ) 
  475. -- end 
  476. --SystemNotice ( atk , "攻击伤害排位1号") 
  477. --SystemNotice ( atk , "攻击伤害为"..kdmg[1]) 
  478. k[2] , kdmg[2] = GetChaHarmByNo ( dead , 2 ) 
  479. -- if ValidCha ( k[2] ) == 0 then 
  480. -- SystemNotice ( atk , "伤害列表3位为空" ) 
  481. -- end 
  482. --SystemNotice ( atk , "攻击伤害排位2号") 
  483. --SystemNotice ( atk , "攻击伤害为"..kdmg[2]) 
  484. k[3] , kdmg[3] = GetChaHarmByNo ( dead , 3 ) 
  485. -- if ValidCha ( k[3] ) == 0 then 
  486. -- SystemNotice ( atk , "伤害列表4位为空" ) 
  487. -- end 
  488. --SystemNotice ( atk , "攻击伤害排位3号") 
  489. --SystemNotice ( atk , "攻击伤害为"..kdmg[3]) 
  490. k[4] , kdmg[4] = GetChaHarmByNo ( dead , 4 ) 
  491. -- if ValidCha ( k[4] ) == 0 then 
  492. -- SystemNotice ( atk , "伤害列表5位为空" ) 
  493. -- end 
  494. --SystemNotice ( atk , "攻击伤害排位4号") 
  495. --SystemNotice ( atk , "攻击伤害为"..kdmg[4]) 
  496. local first_atker = GetFirstAtker ( dead ) 
  497. local Gen_dmg = 0 
  498. for i = 0 , 4 , 1 do 
  499. if k[i] ~= 0 then 
  500. Gen_dmg = Gen_dmg + kdmg[i] 
  501. --SystemNotice ( atk , "攻击伤害指针不为0的排位"..i) 
  502. --SystemNotice ( atk , "攻击伤害为"..kdmg[i]) 
  503. end 
  504. end 
  505. --SystemNotice ( atk , "总攻击伤害为"..Gen_dmg) 
  506. for i = 0 , 4 , 1 do 
  507. k_exp[i] = 0 
  508. if ValidCha( k[i] )== 1 then 
  509. if kdmg[i] > 0 then 
  510. if k[i] == first_atker then 
  511. k_exp[i] = dead_exp * ( 0.7 * kdmg[i] / Gen_dmg + 0.3 ) --第一位攻击者优先获得30%的怪物总经验
  512. else
  513. k_exp[i] =  dead_exp * 0.7 * kdmg[i] / Gen_dmg 
  514. end
  515. --SystemNotice ( atk , "攻击伤害排位"..i) 
  516. --SystemNotice ( atk , "分配到exp"..k_exp[i]) 
  517. ShareTeamExp ( dead , k[i] , k_exp[i] ,atk ) 
  518. end 
  519. end 
  520. end 
  521. local item_host = 0 
  522. local exp_max = k_exp[0] 
  523. --SystemNotice ( atk , "道具初始归属排位"..0) 
  524. for i = 1 , 4 , 1 do 
  525. --SystemNotice ( atk , "道具归属判定"..i) 
  526. --SystemNotice ( atk , "经验份额"..k_exp[i])
  527. if k_exp [i] > exp_max  then 
  528. exp_max = k_exp[i] 
  529. item_host = i 
  530. --SystemNotice ( atk , "道具更改归属排位"..i) 
  531. end 
  532. end 
  533. if ChaIsBoat (k[item_host] ) == 1 then 
  534. local ship_lv = GetChaAttr ( k[item_host] , ATTR_LV ) 
  535. local shipowner_lv  = GetChaAttr ( TurnToCha ( k[item_host] ) , ATTR_LV )  
  536. local ship_exp = GetChaAttr ( k[item_host] , ATTR_CEXP ) 
  537. local ship_expadd = math.floor ( math.min ( 7 , ( dead_lv / 10 + 2 ) ) ) 
  538. local lv_limit = math.min ( ship_lv , shipowner_lv ) - 10 
  539. if dead_lv >= lv_limit then 
  540. ship_exp = ship_exp + ship_expadd 
  541. SetCharaAttr (  ship_exp , k[item_host] ,ATTR_CEXP ) 
  542. -- SystemNotice ( k[item_host] , "增加船只熟练"..ship_expadd ) 
  543. end 
  544. end 
  545. SetItemHost ( dead , k[item_host] ) 
  546. end 
  547. function ValidCha(ter)
  548.   if ter==nil or ter==0 then 
  549. return 0 
  550.   end
  551.   return 1
  552. end
  553. function ShareTeamExp ( dead , team_atker , dead_exp , The_Killer) 
  554. local cha_name1100 = GetChaDefaultName (team_atker )
  555. local star111=GetChaAttr (  team_atker , ATTR_CEXP )----------当前等级经验
  556. LG("star_exp" , "玩家"..cha_name1100.."当前经验为"..star111.."进入ShareTeamExp" ) 
  557. local atker_role = ChaIsBoat ( team_atker ) 
  558. local monster_location = IsChaInLand ( dead ) 
  559. if atker_role == 1 and monster_location == 1 then 
  560. dead_exp = math.floor ( dead_exp / 5 + 1 ) 
  561. end 
  562. --SystemNotice ( team_atker , "进入ShareTeamExp")
  563. local dead_lv = GetChaAttrI( dead , ATTR_LV ) --获得死者的等级   
  564. --local team_atker = TurnToCha ( team_atker ) --转成人指针
  565. local t = {} 
  566. t[0] = team_atker  
  567. if ValidCha (team_atker) == 0 then 
  568. LG ( "luascript_err" , "function ShareTeamExp : 队伍经验来源者为空" ) 
  569. return 
  570. end 
  571. t[1] = GetTeamCha(team_atker, 0 )  
  572. t[2] = GetTeamCha(team_atker, 1 )   
  573. t[3] = GetTeamCha(team_atker, 2 )    
  574. t[4] = GetTeamCha(team_atker, 3 )
  575.     
  576.     --SystemNotice ( team_atker , "aaaa")
  577. -- LG("harm", "t[0] = ", t[0]," t[1] = ", t[1], "t[2] = ", t[2])
  578. -- LG("harm", "n")
  579.     --local notice = "t[1]="..t[1].." t[2]="..t[2].." t[3]="..t[3].." t[4]="..t[4]
  580.     ----SystemNotice ( team_atker , notice)
  581.     --SystemNotice ( team_atker , "bbbb")
  582.     
  583. local count = 0 
  584. local NewPlayer_CanGet = 0
  585. local NewPlayer_Lv = 0
  586. local NewPlayer_Lv_dif = -100
  587. local Check_Killer = 0
  588. if t[0] == The_Killer then
  589. Check_Killer = 1
  590. end
  591. for i = 0 , 4 , 1 do
  592. if ValidCha( t[i] )== 1  then --被加入组队经验分配的角色必须存在,且对队伍经验的加成和分享也仅由有效成员数起作用
  593. --SystemNotice(team_atker, "开始调用CheckExpShare")
  594. a = CheckExpShare ( t[i] , team_atker ) 
  595. --SystemNotice(team_atker, "结束调用CheckExpShare, 返回值="..a)
  596. if a == 1 then 
  597. count = count + 1 
  598. NewPlayer_Lv = Lv( TurnToCha(t[i]) )
  599. NewPlayer_Lv_dif = dead_lv - NewPlayer_Lv
  600. if NewPlayer_Lv <=30 and NewPlayer_Lv >= 10 and NewPlayer_Lv_dif >= -5 then
  601. NewPlayer_CanGet = NewPlayer_CanGet + 1
  602. end
  603. end 
  604. end 
  605.         end 
  606. if count == 0 then 
  607. LG ("luascript_err" , "function ShareTeamExp : 队员统计count 为 0 " )
  608. return 
  609. end 
  610. local TeamExp_Increas = 0.25 * TeamExp_RAID
  611. --SystemNotice ( team_atker , "被计入经验共享队员数count="..count)
  612. LG("exp" , "deadlv = " , dead_lv ) 
  613. LG("exp" , "dead_exp = " , dead_exp ) 
  614. LG("exp" , "teamer_count = " , count ) 
  615. -------------------------------------------------------------------------------------------------------
  616. -------------------------------------------------------------------------------------------------------
  617. local exp_add = math.floor( dead_exp * ( 1 + (count -1 )* TeamExp_Increas ) ) --总经验
  618. local exp_increase = math.floor ( dead_exp * (count -1 )* TeamExp_Increas ) --附加经验
  619. ---BB调整
  620. LG("exp" , "exp_add = " , exp_add ) 
  621. if count >=2 then
  622. exp_add = exp_add * InTeamGetExp_RAID
  623. end
  624. local exp_up
  625.     --SystemNotice ( team_atker , "开始为队员分配经验")
  626. for i = 0 , 4 , 1 do
  627. if ValidCha(t[i])==1 then --角色不为空
  628. local a = 1 --初始化角色在开始时是否分配经验的监测系数
  629. local b = 1 --初始化角色在开始时分配经验的倍数系数
  630. LG("exp" , "loop = " , i ) 
  631. if i >= 1 then 
  632. -- t[i] = TurnToCha ( t[i] )             --转成人指针
  633. a = CheckExpShare ( t[i] , team_atker )  --经验分配检测 
  634. LG("exp" , "经验分配检测 a =  " , a ) 
  635. exp_up = math.max (1,  math.floor ( exp_add/count ) )  * a 
  636. LG("exp" , "exp_up1  =  " , exp_up ) 
  637. else 
  638. exp_up = math.max ( 1, math.floor ( exp_add/count ) )  
  639. LG("exp" , "exp_up1  =  " , exp_up ) 
  640. --对直接杀怪者做特殊处理 
  641. end 
  642. t_lv = GetChaAttrI ( TurnToCha(t[i]) , ATTR_LV ) 
  643. lv_dis =  t_lv - dead_lv  --与怪物等级差对经验获取倍数的判断
  644. LG ( "exp" , " t_lv = " , t_lv , "  dead_lv = " , dead_lv , "  lv_dis = " , lv_dis ) 
  645. if lv_dis >= 4 then 
  646. b = math.min ( 10 , 1 + ( math.abs ( lv_dis - 4 ) * 0.4 ) )  --与怪物等级差距过大,无法获得全额经验
  647. elseif lv_dis <= -1 * 10 then 
  648. b = math.min ( 4 , 1 + math.abs ( lv_dis - 10)  * 0.1 )      --与怪物等级差距过大,无法获得全额经验 
  649. end 
  650. LG ( "exp" , "exp_up2 =  " , exp_up , " b = " , b , " a = ", a ) 
  651. exp_up = math.floor ( math.max ( 1 , exp_up / b ) ) * a 
  652. LG ( "exp" , "exp_up3 =  " , exp_up) 
  653. if count >=3 and NewPlayer_CanGet <= 0 and Check_Killer == 1 then ---判断获得组队贡献点数
  654. if lv_dis <=3 then
  655. Add_RYZ_TeamPoint ( TurnToCha(t[i]) , count , 1)
  656. end
  657. end
  658. if t_lv >= 50 and NewPlayer_CanGet > 0 and Check_Killer == 1 then
  659. Add_RYZ_TeamPoint ( TurnToCha(t[i]) , 6 , NewPlayer_CanGet)
  660. end
  661. exp = GetChaAttrI ( TurnToCha(t[i]) , ATTR_CEXP ) 
  662. LG("exp" , "exp_original = " , exp ) 
  663. local EXP_RAID_STATE = 1
  664. local StateLv = GetChaStateLv ( t[i] , STATE_SBJYGZ )
  665. EXP_RAID_STATE=SBStateBS[StateLv]
  666. local Item_ZHONGSHEN = CheckItem_ZHONGSHEN(TurnToCha(t[i]))
  667. if SBStateYXJxinyun[StateLv]~=0 or Item_ZHONGSHEN==1 then
  668. local CheckLucky = 0
  669. CheckLucky = CheckLuckyFinish ( StateLv )
  670. if CheckLucky == 1 then
  671. EXP_RAID_STATE = EXP_RAID_STATE * 2
  672. SystemNotice ( TurnToCha(t[i]) , "幸运一击,获得经验值加倍" )
  673. end
  674. if CheckLucky == 2 then
  675. EXP_RAID_STATE = 10
  676. SystemNotice ( TurnToCha(t[i]) , "超级幸运一击,获得10倍经验" )
  677. end
  678. end
  679. ---------------------众神的庇护
  680. if exp_up == 0 then 
  681. LG ( "exp" , "无经验成长" ) 
  682. return 
  683. end
  684. EXP_RAID_STATE=ZB8Debuff(TurnToCha(t[i]),EXP_RAID_STATE)
  685. exp_up = exp_up * EXP_RAID_STATE
  686. ---------------------------------------精灵加经验状态判断
  687. --local Check_star = {}
  688. -- Check_star[0] = t[i]  
  689. -- Check_star[1] = GetTeamCha( t[i] , 0 )  
  690. -- Check_star[2] = GetTeamCha( t[i] , 1 )   
  691. -- Check_star[3] = GetTeamCha( t[i] , 2 )    
  692. -- Check_star[4] = GetTeamCha( t[i] , 3 )
  693. --for m = 0 , 4 , 1 do
  694. -- if ValidCha( Check_star[m] )== 1  then --被加入组队经验分配的角色必须存在
  695. local Item_bg = GetChaItem ( t[i] , 2 , 1  ) --取角色背包第二栏的指针
  696. local Get_Item_Type = GetItemType ( Item_bg ) --调用程序接口获得Item道具类型
  697. if Get_Item_Type==59 then --------判断是否为精灵
  698. local  Item_ID = GetItemID ( Item_bg ) --取ID
  699. local str = GetItemAttr( Item_bg ,ITEMATTR_VAL_STR ) --力量 
  700. local con = GetItemAttr( Item_bg ,ITEMATTR_VAL_CON )  ---体质 
  701. local agi = GetItemAttr( Item_bg ,ITEMATTR_VAL_AGI ) --敏捷 
  702. local dex = GetItemAttr( Item_bg ,ITEMATTR_VAL_DEX )  --专注 
  703. local sta = GetItemAttr( Item_bg ,ITEMATTR_VAL_STA )  --精神 
  704. local URE = GetItemAttr( Item_bg ,ITEMATTR_URE ) --体力 
  705. local MAXURE = GetItemAttr( Item_bg ,ITEMATTR_MAXURE )  --最大体力
  706. local lv_JL = str + con + agi + dex + sta ----一个精灵的等级
  707. local Num_JL = GetItemForgeParam ( Item_bg , 1 )
  708. local Part1 = GetNum_Part1 ( Num_JL ) --Get Num Part 1 到 Part 7
  709. local Part2 = GetNum_Part2 ( Num_JL )
  710. local Part3 = GetNum_Part3 ( Num_JL )
  711. local StateLv1 = GetChaStateLv (t[i] , STATE_JLFT7 )
  712. local StateLv2 = GetChaStateLv (t[i] , STATE_JLFT8 )
  713. local flag=0
  714. if Item_ID==237 and StateLv1~=0 then
  715. flag=1
  716. end
  717. if Item_ID==681 and StateLv2~=0 then
  718. flag=1
  719. end
  720. if flag==1  then ----有id为237或是681号的精灵并且精灵附体技能存在
  721. --if StateLv1 == 1 or StateLv2 == 1 then ---初级
  722. -- exp_up = exp_up*(0.005*lv_JL*0.1+1)
  723. --end
  724. --if StateLv1 == 2 or StateLv2 == 2 then ---中级
  725. -- exp_up = exp_up*(0.0125*lv_JL*0.1+1)
  726. --end
  727. --if StateLv1 == 3 or StateLv2 == 3 then ---高级
  728. -- exp_up = exp_up*(0.025*lv_JL*0.1+1)
  729. --end
  730. if StateLv1 ~= 0 or StateLv2 ~= 0 then 
  731. exp_up = exp_up*(lv_JL*0.02+1)
  732. end
  733. -- URE=URE-4500
  734. end
  735. SetItemAttr ( Item_bg , ITEMATTR_URE , URE ) 
  736. end
  737. -- end
  738. --end
  739. -------------------------------------------
  740. -------------------------------------------
  741. local Check = {}
  742. Check[0] = t[i]  
  743. Check[1] = GetTeamCha( t[i] , 0 )  
  744. Check[2] = GetTeamCha( t[i] , 1 )   
  745. Check[3] = GetTeamCha( t[i] , 2 )    
  746. Check[4] = GetTeamCha( t[i] , 3 )
  747. for j = 0 , 4 , 1 do
  748. if ValidCha( Check[j] )== 1  then --被加入组队经验分配的角色必须存在
  749. local star = IsTeamLeader( Check[j] )
  750. if star==1 then -------------判断队长
  751. local StateLv = GetChaStateLv ( Check[j] , STATE_ZDSBJYGZ )
  752. local Isshare = CheckExpShare ( t[i] , Check[j])
  753. --SystemNotice ( TurnToCha(t[i]) , "Isshare" )
  754. if StateLv == 1 and Isshare == 1 then
  755. exp_up = 1.5*exp_up
  756. end
  757. end
  758. end
  759. end
  760. ----------------------------------------------
  761. ----------------------------------------------圣战打精灵草随机属性
  762.      --Notice("come here")
  763.      local map_name_atk = GetChaMapName ( The_Killer )
  764.      local map_name_def = GetChaMapName ( dead )
  765.      if map_name_atk == "guildwar" or map_name_def == "guildwar" then
  766.        local normal_monster =  GetChaID(dead)
  767.   --Notice("normal_monster=="..normal_monster)
  768.        if normal_monster == 220 then  ---紫色
  769.    --AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
  770.    AddState ( The_Killer , The_Killer , STATE_HFZQ , 10 , 10 )
  771.        end
  772.        if normal_monster == 219 then  -----蓝色
  773.            AddState ( The_Killer , The_Killer , STATE_QINGZ , 10 , 300 )
  774.        end
  775.        if normal_monster == 217 then  -----红色
  776.            AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
  777.        end
  778.        if normal_monster == 218 then -----黄色
  779.            AddState ( The_Killer , The_Killer , STATE_YS , 10 , 300 )
  780.        end
  781.       elseif map_name_atk == "guildwar2" or map_name_def == "guildwar2" then
  782.        local normal_monster =  GetChaID(dead)
  783.   --Notice("normal_monster=="..normal_monster)
  784.        if normal_monster == 220 then  ---紫色
  785.    --AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
  786.    AddState ( The_Killer , The_Killer , STATE_HFZQ , 10 , 10 )
  787.        end
  788.        if normal_monster == 219 then  -----蓝色
  789.            AddState ( The_Killer , The_Killer , STATE_QINGZ , 10 , 300 )
  790.        end
  791.        if normal_monster == 217 then  -----红色
  792.            AddState ( The_Killer , The_Killer , STATE_JRQKL , 10 , 180 )
  793.        end
  794.        if normal_monster == 218 then -----黄色
  795.            AddState ( The_Killer , The_Killer , STATE_YS , 10 , 300 )
  796.        end
  797.      end
  798. ----------------------------------------
  799. -----------------------------------------团队之星处理
  800. local expGetNow = exp_up --当前角色正常打怪可可获得的经验
  801. local expCanGive = 0
  802. t[i] = TurnToCha ( t[i]  )-- 海洋处理
  803. local ptnItem = GetEquipItemP( t[i] , 8)--取到道具指针 pointer
  804. local IdItem = GetItemID ( ptnItem )
  805. local lvPerson = GetChaAttr(t[i] , ATTR_LV)
  806. --Notice ( "进行到这里" )
  807. if IdItem==1034 and lvPerson < 41 then
  808. local expItemNow = GetItemAttr( ptnItem , ITEMATTR_URE)*10   --100初始值
  809. local expItemMax = GetItemAttr ( ptnItem , ITEMATTR_MAXURE)*10
  810. local retIsInTeam = IsInTeam(t[i] )
  811. if retIsInTeam ~= LUA_TRUE then --触发石头经验储存机制
  812. expItemNow = expItemNow + expGetNow
  813. if expItemNow >= expItemMax then
  814. expItemNow = expItemMax
  815. end
  816. else --组队了
  817. if HasTeammate(t[i] ,0, 5) == LUA_TRUE then---没有比自己小5级的队友
  818. local ptnLowLvPlayer = returnLowLVPlayer( t[i], t[0], t[1], t[2], t[3], t[4]) --返回队伍中比自己等级小5的人物指
  819. if ValidCha(ptnLowLvPlayer) == 1 then      --人没死的处理
  820. local expCanUse = expItemNow - 1000 --经验返还处理
  821. if expGetNow * 2>= expCanUse then
  822. expCanGive = expCanUse
  823. expItemNow = 1000
  824. else
  825. expItemNow = expItemNow - expGetNow*2
  826. expCanGive = expGetNow * 2
  827. end
  828. if expItemNow <= 1000 then
  829. expItemNow = 1000
  830. end
  831. exp_up = exp_up + expCanGive
  832. else --死了的处理
  833. expCanGive = 0
  834. exp_up = exp_up + expCanGive
  835. end
  836. local expCanUse = expItemNow - 1000
  837. end
  838. end
  839. expItemNow= math.floor(expItemNow/10)
  840. SetItemAttr ( ptnItem ,ITEMATTR_URE , expItemNow )
  841. end
  842. ---------------------------------
  843. ---------------------------------
  844. -----------------------------------------
  845. if exp_up > 20000 then
  846. local cha_name = GetChaDefaultName ( TurnToCha(t[i]) )
  847. local Monster_name = GetChaDefaultName ( dead )
  848. LG ( "Big_exp" ,"角色"..cha_name.."攻击"..Monster_name.."获得"..exp_up.."经验" )
  849. end
  850. --SystemNotice ( team_atker , "经验为"..exp)
  851. --SystemNotice ( team_atker , "获得经验为"..exp_up)
  852. --SystemNotice ( TurnToCha(t[i]) , "exp = "..exp )
  853. if exp<DEXP[80] and (exp+exp_up)>DEXP[80] then
  854. --SystemNotice ( TurnToCha(t[i]) , "DEXP[80] = "..DEXP[80] )
  855. --SystemNotice ( TurnToCha(t[i]) , "exp_up前 = "..exp_up)
  856. exp_up =math.floor((DEXP[80]-exp) +(exp_up-(DEXP[80]-exp))/50)
  857. --SystemNotice ( TurnToCha(t[i]) , "exp_up后 = "..exp_up)
  858. end                                                                                  -------------避免79级到80级之后,拿到超出额度的经验 Jack
  859. if Lv ( TurnToCha(t[i]) ) >= 80 then 
  860. exp_up = math.floor ( exp_up / 50 ) 
  861. end 
  862. --防沉迷系数  
  863. local retExpState = GetExpState(t[i])
  864. if exp_up == 0 and retExpState ~= 0 then 
  865. SystemNotice ( TurnToCha(t[i]) , "实力差距太大,无法获得实战经验" )
  866. end 
  867. --Notice("打怪获取经验的防沉迷系数为"..retExpState)
  868. --Notice("防沉迷之前的exp"..exp_up)
  869. exp_up =exp_up *GetExpState(t[i])/100
  870. --Notice("防沉迷之后的exp"..exp_up)
  871. --SystemNotice ( TurnToCha(t[i]) , "没做加成前的得到的exp_up = "..exp_up)
  872. local expraid = LV_EXP[Lv ( TurnToCha(t[i]) )]
  873. exp_up=math.floor(exp_up*expraid)
  874. --SystemNotice ( TurnToCha(t[i]) , "经过各种计算后得到的exp_up = "..exp_up)
  875. exp = exp + exp_up  
  876. -- local lv = GetChaAttr(TurnToCha(t[i]), ATTR_LV)
  877. -- if lv == 100 then
  878. -- local a = CheckBagItem ( TurnToCha(t[i]), 171 )
  879. -- --SystemNotice( TurnToCha(t[i]), "数目="..a)
  880. -- if a == 1 then
  881. -- local role_jyp = GetChaItem2 ( TurnToCha(t[i]), 2, 171)
  882. -- local exp_store = GetItemAttr ( role_jyp, ITEMATTR_VAL_PARAM1 )
  883. -- --SystemNotice( TurnToCha(t[i]), "原NUM="..exp_store)
  884. -- exp_store = exp_store+exp_up
  885. -- --SystemNotice( TurnToCha(t[i]), "现NUM="..exp_store)
  886. -- SetItemAttr ( role_jyp, ITEMATTR_VAL_PARAM1, exp_store)
  887. -- SystemNotice( TurnToCha(t[i]), "你的经验瓶中的积分增加了"..exp_up)
  888. -- else
  889. -- SetChaAttrI ( TurnToCha(t[i]) , ATTR_CEXP, exp )
  890. -- end
  891. -- else
  892. -- SetChaAttrI ( TurnToCha(t[i]) , ATTR_CEXP, exp )
  893. -- LG("exp" , "exp_now = " , exp ) 
  894. -- end
  895. SetChaAttrI ( TurnToCha(t[i]) , ATTR_CEXP, exp ) 
  896. LG("exp" , "exp_now = " , exp ) 
  897. else 
  898.         --SystemNotice ( team_atker , "队员排位["..i.."]的值为空")
  899. end 
  900. end 
  901. local star112=GetChaAttr (  team_atker , ATTR_CEXP )----------当前等级经验
  902. LG("star_exp" , "玩家"..cha_name1100.."当前经验为"..star112.."结束ShareTeamExp" ) 
  903. LG("exp" , "end getexp " )
  904. end 
  905. function returnLowLVPlayer(PlayerNow,Player1,Player2,Player3,Player4,Player5)    --返回队伍中比自己等级小5级的玩家指针
  906. local lvPlayerNow = GetChaAttr(PlayerNow, ATTR_LV)
  907. PlayerNow = TurnToCha(PlayerNow)
  908. Player1 = TurnToCha(Player1)
  909. Player2 = TurnToCha(Player2)
  910. Player3 = TurnToCha(Player3)
  911. Player4 = TurnToCha(Player4)
  912. Player5 = TurnToCha(Player5)
  913. if ValidCha(Player1) == 1 then
  914. local lvPlayer1 = GetChaAttr(Player1, ATTR_LV)
  915. if lvPlayerNow > lvPlayer1 + 5 then
  916. return Player1
  917. end
  918. end
  919. if ValidCha(Player2) == 1 then
  920. local lvPlayer2 = GetChaAttr(Player2, ATTR_LV)
  921. if lvPlayerNow > lvPlayer2 + 5 then
  922. return Player2
  923. end
  924. end
  925. if ValidCha(Player3) == 1 then
  926. local lvPlayer3 = GetChaAttr(Player3, ATTR_LV)
  927. if lvPlayerNow > lvPlayer3 + 5 then
  928. return Player3
  929. end
  930. end
  931. if ValidCha(Player4) == 1 then
  932. local lvPlayer4 = GetChaAttr(Player4, ATTR_LV)
  933. if lvPlayerNow > lvPlayer4 + 5 then
  934. return Player4
  935. end
  936. end
  937. if ValidCha(Player5) == 1 then
  938. local lvPlayer5 = GetChaAttr(Player5, ATTR_LV)
  939. if lvPlayerNow > lvPlayer5 + 5 then
  940. return Player5
  941. end
  942. end
  943. return 0
  944. end
  945. function CheckExpShare ( ti , atk ) --ti如果atk相等那就有问题了
  946. if ValidCha(ti)==0 then 
  947. LG ( "luascript_err" , "fucntion CheckExpShare : 队伍成员为空n" ) 
  948. return 0
  949. end 
  950. if IsInSameMap ( atk , ti ) == 0   then 
  951. --SystemNotice( atk , "由于所在地图不同,您无法与某些队友分享战斗经验") 
  952. return 0 
  953. end 
  954. local pos_ti_x , pos_ti_y = GetChaPos ( ti ) 
  955. if ValidCha( atk ) == 0 then 
  956. LG ( "luascript_err" , "fucntion CheckExpShare : 杀怪者为空n" ) 
  957. return 0
  958. end 
  959. local pos_atk_x , pos_atk_y = GetChaPos ( atk ) 
  960. local distance = Dis ( pos_ti_x , pos_ti_y , pos_atk_x , pos_atk_y ) 
  961. if distance >= 4000 then 
  962. -- HelpInfo(ti,0,"由于相隔太远,您无法与您的某些队友分享战斗经验") 
  963. return 0 
  964. end 
  965. if IsChaInRegion ( ti , AREA_SAFE ) == 1 then 
  966. -- HelpInfo(ti,0,"由于处于安去区,您无法与您的队友分享战斗经验") 
  967. return 0 
  968. end 
  969. return 1 
  970. end 
  971. function Dead_Punish ( dead , atk ) --死亡惩罚
  972. local dead_lv=GetChaAttr(dead, ATTR_LV) --100级人物状态死亡不扣经验
  973. if dead_lv>=100 then
  974. SystemNotice (dead , "内测期间,100级以上玩家死亡不损失经验" )
  975. return
  976. end
  977. local Cha_Boat = GetCtrlBoat ( dead ) --100级船只状态死亡不扣经验
  978. if Cha_Boat ~= nil then
  979. SystemNotice( dead , "内测期间,玩家在海上死亡不损失经验" )
  980. return
  981. end
  982. --SystemNotice ( atk , "Dead_Punish")
  983. local item_num=0
  984. local item=0
  985. item_num = CheckBagItem(  atk , 5803  ) --检查背包内5803号道具的数量
  986. --SystemNotice ( atk , "item_num=="..item_num)
  987. if item_num==1 then
  988. -- SystemNotice ( atk , "come here")
  989. item=GetChaItem2 (  atk , 2 , 5803 ) ---取5803号道具指针
  990. local kill_num=0
  991. kill_num=GetItemAttr(item,ITEMATTR_VAL_STR)
  992. kill_num=kill_num+1
  993. SetItemAttr ( item ,ITEMATTR_VAL_STR , kill_num )
  994. end
  995. ----------圣诞
  996. local Role_ID = GetRoleID(dead)
  997.  BBBB[ Role_ID ] = 0
  998. ------------------
  999. local map_name = GetChaMapName ( dead )
  1000. if map_name == "leiting2" or map_name == "binglang2" or map_name == "shalan2" or map_name == "guildwar" or map_name == "guildwar2" then
  1001. return
  1002. end
  1003. local map_name = GetChaMapName ( dead )
  1004. if map_name == "garner2" then
  1005. SetCharaAttr(0, dead, ATTR_SP)
  1006. return
  1007. end
  1008. dead = TurnToCha ( dead ) 
  1009. local lv = GetChaAttr( dead, ATTR_LV ) 
  1010. local check_pirate=CheckItem_pirate(dead)
  1011. local check_death=CheckItem_Death(dead)
  1012. local Check_ZHONGSHEN = CheckItem_ZHONGSHEN ( dead )
  1013. local Time = os.date("%H")
  1014. local TimeNum = tonumber(Time)
  1015. if lv<=10 then
  1016. return 
  1017. end --[[判定大于10级扣除经验]]--
  1018. if lv >= 70 and check_pirate ==1 then
  1019. if TimeNum<=6 or TimeNum >=18 then
  1020. SystemNotice (dead , "受到月光祝福,死亡不扣除经验和装备耐久" ) 
  1021. return
  1022. end
  1023. end
  1024. if lv >= 75 and check_death ==1 then
  1025. if TimeNum<=6 or TimeNum >=18 then
  1026. SystemNotice (dead , "受到死神庇佑,死亡不扣除经验和装备耐久" ) 
  1027. return
  1028. end
  1029. end
  1030. if lv >= 95 and Check_ZHONGSHEN ==1 then
  1031. SystemNotice (dead , "受到众神庇佑,死亡不扣除经验和装备耐久" ) 
  1032. return
  1033. end
  1034. local exp_red 
  1035. local exp = Exp(dead) 
  1036. local nlexp = GetChaAttrI ( dead , ATTR_NLEXP ) 
  1037. local clexp = GetChaAttrI ( dead , ATTR_CLEXP ) 
  1038. if  exp <= clexp then 
  1039. exp_red = 0 
  1040. else 
  1041. exp_red = math.min ( math.floor ( math.abs( nlexp - clexp ) * 0.02 ) , math.max ( exp - clexp , 0 ) ) 
  1042. end 
  1043. SetCharaAttr(0, dead, ATTR_SP) 
  1044. local i1 = CheckBagItem( dead,3846 )
  1045. local i2 = CheckBagItem( dead,3047 )
  1046. local i3 = CheckBagItem( dead,5609 )---------------------------------替身令牌kokora
  1047. local i4 = CheckBagItem( dead,6396 )---------------------------------替身令牌(女生专区)
  1048. if map_name == "secretgarden" or map_name == "teampk" then
  1049. SetCharaAttr(0, dead, ATTR_SP)
  1050. return
  1051. end
  1052. local i= CheckBagItem( dead, 2954 )-------死亡证明
  1053. --SystemNotice( dead , "i=="..i)
  1054. if i==1 then
  1055. local Dead_BK = GetChaItem2 ( dead , 2 , 2954 )
  1056. local DeadPoint=GetItemAttr ( Dead_BK , ITEMATTR_VAL_STR)
  1057. --SystemNotice( dead , "DeadPoint之前为=="..DeadPoint)
  1058. local DeadPoint=DeadPoint+1
  1059. SetItemAttr( Dead_BK , ITEMATTR_VAL_STR , DeadPoint )
  1060. local DeadPoint1=GetItemAttr ( Dead_BK , ITEMATTR_VAL_STR)
  1061. --SystemNotice( dead , "DeadPoint现在为=="..DeadPoint1)
  1062. if DeadPoint>=100 then
  1063. end
  1064. end
  1065. -------------------女生专区--------------替身令牌
  1066. if i4 ~= 0 then
  1067. local j2 = TakeItem( dead,0,6396,1)
  1068. if j2 == 0  then
  1069. LG ( "NewItem" , "替身令牌删除失败" )
  1070. SystemNotice ( dead , "替身令牌删除失败" )
  1071. exp = Exp(dead) - exp_red 
  1072. if Lv ( dead ) >= 80 then 
  1073. exp_red_80 = exp_red * 50 
  1074. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1075. else 
  1076. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1077. end 
  1078. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1079. if lv > 20 then
  1080. Dead_Punish_ItemURE ( dead )
  1081. end
  1082. else
  1083. SystemNotice ( dead , "由替身令牌代替死亡,免予经验和耐久惩罚" )
  1084. return
  1085. end
  1086. end
  1087. if i1 <= 0 and i2 <= 0 and  i3 <= 0then ---没娃娃没宝宝没替身令牌kokora
  1088. exp = Exp(dead) - exp_red 
  1089. if Lv ( dead ) >= 80 then 
  1090. exp_red_80 = exp_red * 50 
  1091. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1092. else 
  1093. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1094. end 
  1095. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1096. if lv > 20 then
  1097. Dead_Punish_ItemURE ( dead )
  1098. end
  1099. elseif i1~=0 and i2==0 and  i3==0 then --有娃娃没宝宝没替身令牌kokora
  1100. local j1 = TakeItem( dead,0,3846,1)
  1101. if j1 == 0  then
  1102. LG ( "NewItem" , "替身娃娃删除失败" )
  1103. SystemNotice ( dead , "替身娃娃删除失败" )
  1104. exp = Exp(dead) - exp_red 
  1105. if Lv ( dead ) >= 80 then 
  1106. exp_red_80 = exp_red * 50 
  1107. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1108. else 
  1109. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1110. end 
  1111. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1112. if lv > 20 then
  1113. Dead_Punish_ItemURE ( dead )
  1114. end
  1115. else
  1116. SystemNotice ( dead , "由替身娃娃代替死亡,免予经验和耐久惩罚" )
  1117. end
  1118. elseif i2~=0 and  i1==0 and i3==0  then --有宝宝没娃娃没替身令牌kokora
  1119. local j2 = TakeItem( dead,0,3047,1)
  1120. if j2 == 0  then
  1121. LG ( "NewItem" , "替身宝宝删除失败" )
  1122. SystemNotice ( dead , "替身宝宝删除失败" )
  1123. exp = Exp(dead) - exp_red 
  1124. if Lv ( dead ) >= 80 then 
  1125. exp_red_80 = exp_red * 50 
  1126. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1127. else 
  1128. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1129. end 
  1130. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1131. if lv > 20 then
  1132. Dead_Punish_ItemURE ( dead )
  1133. end
  1134. else
  1135. SystemNotice ( dead , "由替身宝宝代替死亡,免予经验和耐久惩罚" )
  1136. end
  1137. elseif i3~=0 and i1==0 and  i2==0  then --有替身令牌没娃娃没宝宝kokora
  1138. local j2 = TakeItem( dead,0,5609,1)
  1139. if j2 == 0  then
  1140. LG ( "NewItem" , "替身令牌删除失败" )
  1141. SystemNotice ( dead , "替身令牌删除失败" )
  1142. exp = Exp(dead) - exp_red 
  1143. if Lv ( dead ) >= 80 then 
  1144. exp_red_80 = exp_red * 50 
  1145. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1146. else 
  1147. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1148. end 
  1149. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1150. if lv > 20 then
  1151. Dead_Punish_ItemURE ( dead )
  1152. end
  1153. else
  1154. SystemNotice ( dead , "由替身令牌代替死亡,免予经验和耐久惩罚" )
  1155. end
  1156. elseif i1~=0 and i2~=0 and  i3==0 then --有娃娃有宝宝没替身令牌kokora 先删除娃娃
  1157. local j1 = TakeItem( dead,0,3846,1)
  1158. if j1 == 0  then
  1159. LG ( "NewItem" , "替身娃娃删除失败" )
  1160. SystemNotice ( dead , "替身娃娃删除失败" )
  1161. exp = Exp(dead) - exp_red 
  1162. if Lv ( dead ) >= 80 then 
  1163. exp_red_80 = exp_red * 50 
  1164. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1165. else 
  1166. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1167. end 
  1168. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1169. if lv > 20 then
  1170. Dead_Punish_ItemURE ( dead )
  1171. end
  1172. else
  1173. SystemNotice ( dead , "由替身娃娃代替死亡,免予经验和耐久惩罚" )
  1174. end
  1175. elseif i2~=0 and  i3~=0 and i1==0  then --有宝宝有替身令牌没娃娃kokora先删除宝宝
  1176. local j2 = TakeItem( dead,0,3047,1)
  1177. if j2 == 0  then
  1178. LG ( "NewItem" , "替身宝宝删除失败" )
  1179. SystemNotice ( dead , "替身宝宝删除失败" )
  1180. exp = Exp(dead) - exp_red 
  1181. if Lv ( dead ) >= 80 then 
  1182. exp_red_80 = exp_red * 50 
  1183. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1184. else 
  1185. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1186. end 
  1187. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1188. if lv > 20 then
  1189. Dead_Punish_ItemURE ( dead )
  1190. end
  1191. else
  1192. SystemNotice ( dead , "由替身宝宝代替死亡,免予经验和耐久惩罚" )
  1193. end
  1194. elseif i1~=0 and i3~=0 and  i2==0 then --有娃娃有替身令牌没宝宝kokora 先删除娃娃
  1195. local j1 = TakeItem( dead,0,3846,1)
  1196. if j1 == 0  then
  1197. LG ( "NewItem" , "替身娃娃删除失败" )
  1198. SystemNotice ( dead , "替身娃娃删除失败" )
  1199. exp = Exp(dead) - exp_red 
  1200. if Lv ( dead ) >= 80 then 
  1201. exp_red_80 = exp_red * 50 
  1202. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1203. else 
  1204. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1205. end 
  1206. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1207. if lv > 20 then
  1208. Dead_Punish_ItemURE ( dead )
  1209. end
  1210. else
  1211. SystemNotice ( dead , "由替身娃娃代替死亡,免予经验和耐久惩罚" )
  1212. end
  1213. elseif i1~=0 and i2~=0 and  i3~=0 then --有娃娃有替身令牌有宝宝kokora 先删除娃娃
  1214. local j1 = TakeItem( dead,0,3846,1)
  1215. if j1 == 0  then
  1216. LG ( "NewItem" , "替身娃娃删除失败" )
  1217. SystemNotice ( dead , "替身娃娃删除失败" )
  1218. exp = Exp(dead) - exp_red 
  1219. if Lv ( dead ) >= 80 then 
  1220. exp_red_80 = exp_red * 50 
  1221. SystemNotice (dead , "由于死亡丢失经验"..exp_red_80 ) 
  1222. else 
  1223. SystemNotice (dead , "由于死亡丢失经验"..exp_red ) 
  1224. end 
  1225. SetChaAttrI( dead , ATTR_CEXP , exp ) --[[扣除死亡玩家所在级别经验的2%]]--
  1226. if lv > 20 then
  1227. Dead_Punish_ItemURE ( dead )
  1228. end
  1229. else
  1230. SystemNotice ( dead , "由替身娃娃代替死亡,免予经验和耐久惩罚" )
  1231. end
  1232. end
  1233. local name = GetChaDefaultName ( dead )
  1234. local exp_new = ( exp - clexp ) / ( nlexp - clexp )
  1235. LG ( "die_exp" , "角色名" , name , "当前等级 = ", lv , "死亡扣除经验值 = " , exp_red , "最新经验比例 = " , exp_new )
  1236. local mars = 0
  1237. for mars = 0 , 4 , 1 do
  1238. if name == CheckDmgChaNameTest [mars] then
  1239. LG ( "whydie" , name.."挂了" )
  1240. end
  1241. end
  1242. end 
  1243. function GetExp_MKP(dead , atk) --[[player kill monster 经验值改变公式]]-- 
  1244. --LuaPrint("Enter function GetExp_MKP() --[[player kill monster 经验值改变公式]]--") 
  1245. local ZBMain= GetChaAttr(dead,ATTR_EXTEND0)
  1246. local ZBNType= math.floor(ZBMain/10)      ---第几次占卜
  1247. local ZBNMain= math.mod(ZBMain,10 ) ---BUFF OR DEBUFF
  1248. local ZBday = GetChaAttr(dead,ATTR_EXTEND2) --占卜天数
  1249. local ZBstate=GetChaAttr(dead, ATTR_EXTEND1) --
  1250. local ZBstate1=math.floor(ZBstate/10) --占卜效果注册
  1251. local ZBstate2=math.mod(ZBstate,10) --占卜类型
  1252. local now_day=os.date("%d")
  1253. now_day=tonumber(now_day)
  1254. if now_day==ZBday and ZBstate2==0 and ZBstate1~=0 then
  1255. SystemNotice(dead,"占卜获得死亡没有惩罚,不扣经验")
  1256. return
  1257. end
  1258. Dead_Punish( dead , atk) 
  1259. --LuaPrint("Out function GetExp_MKP() --[[player kill monster 经验值改变公式]]--") 
  1260. end 
  1261. function GetExp_PKP(dead , atk) --[[player kill player 经验值改变公式]]-- 
  1262. --LuaPrint("Enter function GetExp_MKP() --[[player kill monster 经验值改变公式]]--") 
  1263. -- Dead_Punish( dead , atk) 
  1264. --LuaPrint("Out function GetExp_MKP() --[[player kill monster 经验值改变公式]]--") 
  1265. end 
  1266. function GetExp_Noexp(dead , atk) --[[无奖惩经验值改变公式]]-- 
  1267. --LuaPrint("Enter function GetExp_Noexp() --[[无奖惩经验值改变公式]]-- ".."n" ) 
  1268. --LuaPrint("Out function GetExp_Noexp() --[[无奖惩经验值改变公式]]-- ".."n" ) 
  1269. end 
  1270. --角色非技能性复活脚本————————————————————————————————————————————
  1271. function Relive ( role )
  1272. local mxhp = GetChaAttr ( role , ATTR_MXHP ) 
  1273. local mxsp = GetChaAttr ( role , ATTR_MXSP ) 
  1274. local hp = math.max ( 1, math.floor(  ( mxhp * 0.01 ) + 0.5 ) ) 
  1275. local sp = math.max ( 1, math.floor(  ( mxsp * 0.01 ) + 0.5 ) ) 
  1276. SetCharaAttr ( hp , role , ATTR_HP ) 
  1277. SetCharaAttr ( sp , role , ATTR_SP ) 
  1278. end 
  1279. --角色技能性复活脚本————————————————————————————————————————————
  1280. function Relive_now ( role , sklv ) 
  1281. local cha_role = TurnToCha ( role ) 
  1282. local hp = math.max ( 1 , math.floor ( 0.05 * sklv * Mxhp ( cha_role ) ) ) 
  1283. local sp = math.max ( 1 , math.floor ( 0.05 * sklv * Mxsp ( cha_role ) ) ) 
  1284. SetCharaAttr ( hp , cha_role , ATTR_HP ) 
  1285. SetCharaAttr ( sp , cha_role , ATTR_SP ) 
  1286. end 
  1287. --船只死亡最大耐久减少——————————————————————————————————————————————————————————————
  1288. function   Ship_ShipDieAttr ( role ) 
  1289. local bmxhp = GetChaAttr ( role , ATTR_BMXHP ) 
  1290. local dead_count = GetChaAttr ( role , ATTR_BOAT_DIECOUNT ) 
  1291. LG ( "shipmxhp" , "___a new dead ship_____________________________________________________" ) 
  1292. LG ( "shipmxhp" , "role = " , role ,  "dead_count = " , dead_count , "form_mxhp = " , bmxhp ) 
  1293. bmxhp = bmxhp * math.max ( 0 , ( 1 - 0.02 - dead_count * 0.01 )  ) 
  1294. LG ( "shipmxhp" , "role = " , role ,   "now_mxhp = " , bmxhp ) 
  1295. SetCharaAttr ( bmxhp , role , ATTR_BMXHP ) 
  1296. end  
  1297. function BoatLevelUpProc ( cha, boat, levelup, exp, money ) 
  1298. if ValidCha( cha ) == 0 then 
  1299. LG ( "luascript_err" , "function BoatLevelUpProc : cha 为空" ) 
  1300. return 0 
  1301. end 
  1302. if ValidCha( boat ) == 0 then 
  1303. LG ( "luascript_err" , "function BoatLevelUpProc : boat 为空" ) 
  1304. return 0 
  1305. end 
  1306. PRINT( "BoatLevelUpProc: levelup = , exp = , money = ", levelup, exp, money )
  1307. local lv_up = levelup 
  1308. local req_exp = exp 
  1309. local req_gold = money 
  1310. local boat_lv = GetChaAttr ( boat , ATTR_LV ) 
  1311. if boat_lv ~= lv_up - 1 then 
  1312. PRINT( "BoatLevelUpProc:function BoatLevelUpProc :船只当前等级与想要提升的等级不匹配" )
  1313. LG ( "luascript_err" , "function BoatLevelUpProc :船只当前等级与想要提升的等级不匹配" )
  1314. return 0 
  1315. end 
  1316. local boat_exp = GetChaAttr ( boat , ATTR_CEXP ) 
  1317. if boat_exp < req_exp then 
  1318. SystemNotice ( cha , "船只熟练不足无法提升船只等级,加油修练~") 
  1319. return 0 
  1320. end 
  1321. local cha_money = GetChaAttr ( cha , ATTR_GD ) 
  1322. if cha_money < req_gold then 
  1323. SystemNotice ( cha , "金钱不足无法提升船只等级,努力赚钱~") 
  1324. return 0 
  1325. end 
  1326. PRINT( "BoatLevelUpProc: boat_exp, req_exp, cha_money, req_gold", boat_exp, req_exp, cha_money, req_gold )
  1327. SetAttrChangeFlag( boat)
  1328. SetAttrChangeFlag( cha)
  1329. boat_exp = boat_exp - req_exp 
  1330. SetCharaAttr ( boat_exp , boat , ATTR_CEXP ) 
  1331. cha_money = cha_money - req_gold 
  1332. SetCharaAttr ( cha_money , cha , ATTR_GD ) 
  1333. SetCharaAttr ( lv_up , boat , ATTR_LV ) 
  1334. ALLExAttrSet ( boat ) 
  1335. SystemNotice ( cha , "船只升级成功") 
  1336. SystemNotice ( cha , "扣除金钱"..req_gold) 
  1337. SystemNotice ( cha , "消耗船只熟练"..req_exp) 
  1338. SyncBoat ( boat, 4 )
  1339. SyncChar ( cha, 4 )
  1340. PRINT( "BoarLevelUpProc: return 1" )
  1341. return 1 
  1342. end 
  1343. function Ship_Tran (  buyer , boat ) 
  1344. local ship_lv = GetChaAttr ( boat , ATTR_LV ) 
  1345. local ship_exp = GetChaAttr ( boat , ATTR_CEXP ) 
  1346. -- if ValidCha ( seller ) == 0 then 
  1347. -- LG ( "luascript_err"  , "function Ship_Tran : seller 为空"  ) 
  1348. -- return 
  1349. -- end 
  1350. -- if ValidCha ( buyer ) == 0 then 
  1351. -- LG ( "luascript_err"  , "function Ship_Tran : buyer 为空"  ) 
  1352. -- return 
  1353. -- end 
  1354. SetAttrChangeFlag( boat)
  1355. ship_lv = math.max ( 1 , math.max (math.floor ( ship_lv /2 ), ship_lv - 10 ) )  
  1356. ship_exp = 0 
  1357. SetCharaAttr ( ship_exp , boat , ATTR_CEXP ) 
  1358. SetCharaAttr ( ship_lv , boat , ATTR_LV ) 
  1359. SystemNotice ( buyer , "交易后,船只等级为"..ship_lv )
  1360. SystemNotice ( buyer , "交易后,船只经验为"..ship_exp )  
  1361. SyncBoat ( boat, 4 )
  1362. end 
  1363. --幸运一击
  1364. -- function CheckLuckyFinish ( StateLv )
  1365. -- if StateLv == 4 then
  1366. -- local Huge_Lucky = Percentage_Random ( 0.01 )
  1367. -- if Huge_Lucky == 1 then
  1368. -- return 2
  1369. -- end
  1370. -- end
  1371. -- local a = 0.1
  1372. -- local b = Percentage_Random ( a )
  1373. -- return b
  1374. -- end
  1375. function ZBexpadd(atk,expaddZB)
  1376. local ZBMain= GetChaAttr(atk,ATTR_EXTEND0)
  1377. local ZBNType= math.floor(ZBMain/10)      ---第几次占卜
  1378. local ZBNMain= math.mod(ZBMain,10 ) ---BUFF OR DEBUFF
  1379. local ZBday = GetChaAttr(atk,ATTR_EXTEND2) --占卜天数
  1380. local ZBstate=GetChaAttr(atk, ATTR_EXTEND1) --
  1381. local ZBstate1=math.floor(ZBstate/10) --占卜效果注册
  1382. local ZBstate2=math.mod(ZBstate,10) --占卜类型
  1383. local now_day=os.date("%d")
  1384. now_day=tonumber(now_day)
  1385. local ZBStateLV = {}
  1386. ZBStateLV[0]={}
  1387. ZBStateLV[0][0] =0 
  1388. ZBStateLV[1] = {}
  1389. ZBStateLV[1][1] = 2
  1390. ZBStateLV[1][2] = 4
  1391. ZBStateLV[1][3] = 6
  1392. ZBStateLV[1][4] = 8
  1393. ZBStateLV[1][5] = 10
  1394. if now_day==ZBday and ZBstate2==1 then
  1395. expaddZB=math.floor(expaddZB*(1+ZBStateLV[ZBstate2][ZBstate1]/100))
  1396. end
  1397. return expaddZB
  1398. end
  1399. function ZB8Debuff(role,expraid)
  1400. local zbState=ZBNowState(role)
  1401. local expraid1=expraid
  1402. if zbState==-81 then 
  1403. expraid1 =expraid*0.9
  1404. end
  1405. if zbState==-82 then 
  1406. local ZBtime=GetChaAttr(role,ATTR_EXTEND7)
  1407. local Zbexpper=math.mod( ZBtime,60)
  1408. if Zbexpper>40 then
  1409. expraid1=expraid*(1-0.1*(60-Zbexpper)/20)
  1410. elseif Zbexpper<=40 then
  1411. expraid1=expraid*(0.5-Zbexpper*Zbexpper/3000+Zbexpper/50+Zbexpper/300)
  1412. end
  1413. end
  1414. if zbState==-83 then 
  1415. expraid1=1.2
  1416. end
  1417. return expraid1
  1418. end
  1419. function CheckLuckyFinish ( StateLv )
  1420. if SBStateYXJxinyun[StateLv] == 2 then
  1421. local Huge_Lucky = Percentage_Random ( 0.01 )
  1422. if Huge_Lucky == 1 then
  1423. return 2
  1424. end
  1425. end
  1426. local a = 0.1
  1427. local b = Percentage_Random ( a )
  1428. return b
  1429. end
  1430. ---------------------------------------
  1431. ----挖宝巨额经验—by lucke.coco----
  1432. ---------------------------------------
  1433. function getmuchexpbf (atk) --挖宝给予巨额经验玩家判断
  1434. local lv= GetChaAttr(atk, ATTR_LV) 
  1435. if lv <40 then
  1436. -- SystemNotice ( atk , "40级" )
  1437. return
  1438. elseif lv >= 40 and lv < 60 then
  1439. -- SystemNotice ( atk , "40——60级" )
  1440. local has_expbf = GetChaAttr ( atk , ATTR_CEXP )
  1441. local new_expbf = has_expbf + 420000
  1442. SetChaAttr ( atk , ATTR_CEXP , new_expbf )
  1443. SystemNotice ( atk , "为了表彰40级以上、60级以下玩家敢于惩治盗宝贼的正义之举,秘宝猎手·莱椰在此奖励您42W的巨额经验^_^" )
  1444. return
  1445. elseif lv >= 60 then
  1446. -- SystemNotice ( atk , "60级" )
  1447. return
  1448. end
  1449. end
  1450. function KillFlower(dead , atk) ----------竞技场杀死花花草草获得道具
  1451. local rolemod_atker = IsPlayer(atk) 
  1452. local rolemod_defer = IsPlayer(dead)  --检查角色种类:0、怪物, 1、玩家
  1453. if rolemod_atker == 1 and rolemod_defer == 0  then
  1454. local MonsterID = GetChaID(dead)
  1455. if MonsterID == 1176 then
  1456. local Item_CanGet = GetChaFreeBagGridNum ( atk )
  1457. if Item_CanGet <= 0 then 
  1458. SystemNotice ( atk , "您的背包栏没有足够的空间,所以无法获得花叶。")
  1459. return
  1460. end
  1461. local a = CheckBagItem( atk , 5961 )
  1462. local b = CheckBagItem( atk , 5962 )
  1463. if a ~= 0 or b ~= 0 then 
  1464. SystemNotice ( atk , "您必须将您背包内的道具交给竞技场交货员之后才能够再获得花叶。")
  1465. else
  1466. GiveItem ( atk , 0 , 5961 , 1 , 0 )
  1467. end
  1468. elseif MonsterID == 1177 then
  1469. local Item_CanGet = GetChaFreeBagGridNum ( atk )
  1470. if Item_CanGet <= 0 then 
  1471. SystemNotice ( atk , "您的背包栏没有足够的空间,所以无法获得草叶。")
  1472. return
  1473. end
  1474. local a = CheckBagItem( atk , 5961 )
  1475. local b = CheckBagItem( atk , 5962 )
  1476. if a ~= 0 or b ~= 0 then 
  1477. SystemNotice ( atk , "您必须将您背包内的道具交给竞技场交货员之后才能够再获得草叶。")
  1478. else
  1479. GiveItem ( atk , 0 , 5962 , 1 , 0 )
  1480. end
  1481. elseif MonsterID == 1178 then
  1482. local Item_CanGet = GetChaFreeBagGridNum ( atk )
  1483. if Item_CanGet <= 0 then 
  1484. SystemNotice ( atk , "您的背包栏没有足够的空间,所以无法获得巴拉卡特的羽毛。")
  1485. return
  1486. end
  1487. local c = CheckBagItem( atk , 5963 )
  1488. if c == 0 then 
  1489. GiveItem ( atk , 0 , 5963 , 1 , 0 )
  1490. else
  1491. SystemNotice ( atk , "您必须将您背包内的巴拉卡特的羽毛交给竞技场交货员之后才能够再获得巴拉卡特的羽毛。")
  1492. end
  1493. end 
  1494. end
  1495. end 
  1496. function KillPlayerDropFlower( dead )
  1497. --SystemNotice(atk,"11")
  1498. local a = CheckBagItem( dead , 5961 )
  1499. local b = CheckBagItem( dead , 5962 )
  1500. local c = CheckBagItem( dead , 5963 )
  1501. if a ~= 0 or b ~= 0 or c ~= 0 then
  1502. RemoveChaItem ( dead , 5961 , 0 , 2 , -1, 2 , 1  )
  1503. RemoveChaItem ( dead , 5962 , 0 , 2 , -1, 2 , 1  )
  1504. RemoveChaItem ( dead , 5963 , 0 , 2 , -1, 2 , 1  )
  1505. end
  1506. end