From 4a2c014e4eb9229ff61c3ff762c44d3bd21b7f7c Mon Sep 17 00:00:00 2001 From: amber Date: Sun, 28 Nov 2004 19:58:22 +0000 Subject: Fix some file types git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@404 54d463be-8e91-2dee-dedb-b68131a5f0ec --- doc/effect_list.txt | 720 ++++++++++++++++----------------- doc/miscnotes.txt | 1102 +++++++++++++++++++++++++-------------------------- 2 files changed, 911 insertions(+), 911 deletions(-) (limited to 'doc') diff --git a/doc/effect_list.txt b/doc/effect_list.txt index d8ec0cafb..715a94a39 100644 --- a/doc/effect_list.txt +++ b/doc/effect_list.txt @@ -1,360 +1,360 @@ -Effect list - #'s I found while testing, lots of possible advanced class effects we missed -(mixed old effect list of valaris and spira's new list...) - -0-5. Attack Display -6. Being Warped -7. Being Healed -8. Yellow Ripple Effect -9. Different Type of Heal? -10. Mammomite -11. Endure -12. Yellow cast aura -13. Blue Box -14. Blue heal? Blue pot? -15. Soul Strike -16. Hide animation -17. Magnum Break -18. Steal -19. Invalid -20. Envenom/Poison -21. Slow Poison? (Envenom In Blue) -22. Sight -23. Stone Curse -24. FireBall -25. FireWall -26. Nothing? -27. Frost Driver Cast -28. Frost Driver Hitting -29. Lightning Bolt -30. ThunderStorm -31. Bubbles Appearing From The Character? -32. Explosion -33. Ruwach -34. Warp out aura (blue) -35. Casting Warp portal (blue) -36. Warp portal (blue) -37. Agi up -38. Agi down -39. Something being made -40. Cross thing (paladin skill?) -41. Angelus bell -42. Blessing angels -43. Dex + Agi up -44. Little fog smoke. -45. Faint little ball things. -46. Sand? -47. Torch -48. Circle of blue flat things -49. Firebolt/wall hits -50. Spinning fire thing -51. Icebolt hit -52. JT Hit -53. Puff of purpulish smoke? -54-59. Cast animations -60. Cast target circle -61. Warp portal (for maps) -62. Sight rasher -63. Fire sphere from some skill -64. Weird purple/red light -65. some sort of mob hit??? -66. potion effect? -67. Provoke -68. MVP -69. Skid trap sign -70. Blue purple aura thing -71. Spiral Yellow balls -72. Bigger Spiral Yellow balls -73. Blue/yellow ripple -74. Icewall sicle -75. Acolyte skill (3 singing girls) -76. Big angel that spreads wings (some aco skill) -77. Resurrection angel -78. Status recovery -79. Heaven drive spike? Earth spike? -80. Spear boomerange -81. Skill hit -82. Detect hidden -83. Another aco skill i don't know (angel comes out of green light) -84. Yet another stupid angel. -85. Lex Divinia -86. Holy water? -87. Lex aeterna -88. Another damn priest/aco skill -89. SG -90. LoV -91. Aco priest skill -92. Meteor Storm -93. JT ball -94. JT hit -95. Quagmire -96. Some sort of cool looking fire hit? -97. Firepillar hit -98. -99. Big blue light -100. Yellow ball fountain -101. Forge? -102. Hammerfall -103. Powerthrust? -104. Weapon perfection? -105. Nothing? -106. Fire explosion. -107. Fire explosion (from trap?) -108. blue smoke with noise -109. blue bubbles -110. yellow smoke (trap?) -111. some bs skill or something -117. Waterball -120. Sound effect -132. Single Grimtooth -138. Fire pillar -139. Fireworks -154. refine success -155. refine fail -156. Jobchange.str (crashes client) -157. Levelup.str (crashes client) -158. joblvup -159. Pvp circle -160. Woe circle? -161. Rain -162. Snow -163. Sakura leaves -164. nothing (npc/mob?) -165. Weird ball thing -166. turns sprite blue -167. Taming Success (crashes client) -168. Taming failed (crashes client) -169. blue light -170. explosion -171. venom dust -172. black aura -173. red aura -174. blue aura -175. yellow aura -176. purple aura -177. red aura -178. white aura -179. purple aura -180. darkness attack hit? -181. water attack hit? -182. wind attack hit -183. self destruction -184. nothing (npc/mob?) -185. nothing (npc/mob?) -186. yellow effect -187. yellow effect -188. yellow effect -189. yellow effect -190. yellow effect -191. target (piercing attack or something) -192. purple cloud hit -193. mute or something (npc skill) -194. stun attack? -195. stone curse -196. curse -197. sleep -198. nothing (npc/mob?) -199. some weird bubble -200-203. Parts of the level 99 Aura -204-211. Healing Items Effect -212. Damage Effect (9999) -213. Shield Appears (Guard?) -214. 3 Weird Things Appear Around You (They All Look The Same) -215. Hide/Unhide? -216. 2 Red Balls shoot out -217. 2 Blue Balls shoot out -218. Concentration Potion Effect -219. Other Speed Potion -220. Berserk Potion -221. White Alien Abduction Beam -222. Defender Skill Effect (Black Circle) -223. Invalid Effect -224. White Wisp Revolving around you -225. Volcano Effect -226. Grand Cross Effect -227-230. Blank -231. Yuno Effect (Takes Alittle While) -232. Blank -233. Fog -234. Unknown To Me -235. Unknown To Me -236. Deluge Effect -237. Wind Gale Effect -238. Land Protect Effect -239. Volcano Effect 2 -240. Deluge Effect 2 -241. Wind Gale Effect 2 -242. Land Protect Effect 2 -243. Invalid Effect -244. Unknown To Me. -245. Holy Cross Effect -246. Shield Charge Effect -247. Yuno Effect 2 (Larger) -248. Status Recovery? (Shows An Angel On Top Of Your Head) -249. Shield Boomerang -250. Spear Quicken -251. Devotion -252. Reflect Shield (Yellow Circle) -259. Green Abduction Beam -260. Orange Abduction Beam -261. red aura thing -262. yellow things that shoot out -263. Yellow ground effect. -264. nothing (npc/mob?) -265. laser beam ?! -266. bunch of white shit flies out -267. gun shot! -268. money bag -269. sword thing -270. shield thing -271. armor thing -272. cape thing? -273. Outter spinning white balls. -274. flying gold -275. spit -276. stuff that flies out somewhat like crits -277. white stuff that comes out around sprite -295. frost joke -296. scream -298. fire bottle throwing -300. Chemical Protection -301. Blank -302. Demonstration Fire Effect -303. Weird Effect you turn yellow and see six lines (3 sets of 2) going slanted -304. After being warped -305. Pharmacy Success -306. Pharmacy Failed -307. Sunlight through the roof effect in Geffenia -308. Blank -309. Unknown to me -310. Unknown to me -311. Shout/Yell/Loud (Merchant Skill) Effect -312-313. Heal Effect? -314. Another Part of Warp/ Yuno Effect? -315. Newer Safety Wall (Pink Portal) -316. Another Part of Warp (The Ripple Floor Part) -317. Full Warp Effect -322. daylight -323. daylight -324. daylight -328. asura strike word -329. tripple strike -333. Orange Leaves Falling -334. blind (can stack it) -335. poison (can stack it) -336. defender shield? -337. joblvup -338. supernovice angel -341. pink warp portal -342. pink aura -343. pink heart thing (cool) -344. teleport in -346. big blue ball -347. wedding effect -349. waterfall (horizonatal) -350. waterfall (vertical) -351. sm waterfall (horizonatal) -352. sm waterfall (vertical) -353. drk waterfall (horizonatal) -354. drk waterfall (vertical) -355. drk sm waterfall (horizonatal) -356. drk sm waterfall (vertical) -358. niflheim ghost -359. niflheim bat slow -360. niflheim bat fast -361. shoots purple wave out -362. nothing? -363. valentine's day heart (wings) -364. valentine's day heart -365. falling cross -368. make you red (berserk?) -369. 2h quicken? -371. lvup -372. death -373. smoke -375. white outline around sprite -376. makes red and shoots out stuff -377. shoots out yellow shit -380. shakes screen turns you all different colors -387. spins you around shakes screen flashes white -394. big red ball around you - -403 = mind breaker -404 = spider web -405 = nothing -406 = explosion effect on the head -407 = effect that starts big and fades in to your characters head - -408. Orange Bubble Grows Around -409. Weird Poision Like Effect -410. Rainbow -411. (Usable, Just add in folder effect file called peong1.tga).errors/detoxify like. -413. nothing? -417. flash -418. red critical explosion? -419. Pulsating grey aura -420. gradual shrink char (possible minimize effect?) -421. instant minimize -422. grow back, but not all the way (baby height) -423. mega size -424. makes sprite bright -425. 4 brownish replicas of sprite fly off? -426. shakes sprites (works on player sprites!) -427. nothing? (maybe for npc/mobs) -428. yellow sparks -429. blue sparks -430. blue sparks in different direction -431. another blue spark variant -432. can't find effect\elec1.tga -433. nothing? (npc/mob?) -434. white sparks -435. can't find effect\storm2.tga (sometimes works and shows little tornado thing! -436. white shield (for one of the defense skills?) -437. blue aura (kinda like a comet!) -438. another defense aura? blue ripples. blue pulsating shield -439. can't fine effect\line3.tga -440. high priest skill angel? Angelus type effect but with a cross -441. another cast aura -442. nothing? (npc/mob?) -443. nothing? (npc/mob?) -444. white lines that fire out -445. your sprite flies up and disappears sometime sprite errors -446. your sprite falls down -447. nothing? (npc/mob?) -448. nothing? (npc/mob?) -449. turns you bright blue real quick -450. darkcross effect (black grand cross) -451. red soul strike?! (high wiz skill?) -452. A jupital thunder type of effect, electricity pulsates around your char -453. Smoke (electricity type) surrounds char, can move and effect is still their. -454. black cast aura -455. red electric that covers body -456. looks like wind rushes up (reminds me of agi up but slower, bigger, and grey) -457. forces attack animation. makes a dash like stance -458. causes sprite to jiggle. char pulsates and distorts (like 426) -459. effect\storm2.tga error, causes player sprite to spin around and you see a faint tornado aura -460. same as 459. -461. faint tornado aura -462. same as 459. -463. same as 459. -464. same as 459. -465. same as 459. -466. nothing (npc/mob?) -467. sprite error (effect\hanmoon1.tga?) -468. sprite error (effect\hanmoon2.tga?) -469. sprite error (effect\hanmoon3.tga?) -470. sprite error (effect\hanmoon4.tga?) -471. sprite error (effect\hanmoon5.tga?) -472. sprite error (effect\hanmoon6.tga?) -473. sprite error (effect\hanmoon7.tga?) -474. nothing (npc/mob?) - -475-484 = slow fade to blind, each one continues to make it smaller and smaller -485 = white critical explosion thing -486 = blue critical explosion thing -487 = black portal ground effect -488 = orange spikey aura that stretches up to fire type points -489 = yellow/gold of 488 -489 = blue version -491 = a small expoision above the head -492 = creates 1 small venom poison type of point on the ground -493+ = invalid effects +Effect list - #'s I found while testing, lots of possible advanced class effects we missed +(mixed old effect list of valaris and spira's new list...) + +0-5. Attack Display +6. Being Warped +7. Being Healed +8. Yellow Ripple Effect +9. Different Type of Heal? +10. Mammomite +11. Endure +12. Yellow cast aura +13. Blue Box +14. Blue heal? Blue pot? +15. Soul Strike +16. Hide animation +17. Magnum Break +18. Steal +19. Invalid +20. Envenom/Poison +21. Slow Poison? (Envenom In Blue) +22. Sight +23. Stone Curse +24. FireBall +25. FireWall +26. Nothing? +27. Frost Driver Cast +28. Frost Driver Hitting +29. Lightning Bolt +30. ThunderStorm +31. Bubbles Appearing From The Character? +32. Explosion +33. Ruwach +34. Warp out aura (blue) +35. Casting Warp portal (blue) +36. Warp portal (blue) +37. Agi up +38. Agi down +39. Something being made +40. Cross thing (paladin skill?) +41. Angelus bell +42. Blessing angels +43. Dex + Agi up +44. Little fog smoke. +45. Faint little ball things. +46. Sand? +47. Torch +48. Circle of blue flat things +49. Firebolt/wall hits +50. Spinning fire thing +51. Icebolt hit +52. JT Hit +53. Puff of purpulish smoke? +54-59. Cast animations +60. Cast target circle +61. Warp portal (for maps) +62. Sight rasher +63. Fire sphere from some skill +64. Weird purple/red light +65. some sort of mob hit??? +66. potion effect? +67. Provoke +68. MVP +69. Skid trap sign +70. Blue purple aura thing +71. Spiral Yellow balls +72. Bigger Spiral Yellow balls +73. Blue/yellow ripple +74. Icewall sicle +75. Acolyte skill (3 singing girls) +76. Big angel that spreads wings (some aco skill) +77. Resurrection angel +78. Status recovery +79. Heaven drive spike? Earth spike? +80. Spear boomerange +81. Skill hit +82. Detect hidden +83. Another aco skill i don't know (angel comes out of green light) +84. Yet another stupid angel. +85. Lex Divinia +86. Holy water? +87. Lex aeterna +88. Another damn priest/aco skill +89. SG +90. LoV +91. Aco priest skill +92. Meteor Storm +93. JT ball +94. JT hit +95. Quagmire +96. Some sort of cool looking fire hit? +97. Firepillar hit +98. +99. Big blue light +100. Yellow ball fountain +101. Forge? +102. Hammerfall +103. Powerthrust? +104. Weapon perfection? +105. Nothing? +106. Fire explosion. +107. Fire explosion (from trap?) +108. blue smoke with noise +109. blue bubbles +110. yellow smoke (trap?) +111. some bs skill or something +117. Waterball +120. Sound effect +132. Single Grimtooth +138. Fire pillar +139. Fireworks +154. refine success +155. refine fail +156. Jobchange.str (crashes client) +157. Levelup.str (crashes client) +158. joblvup +159. Pvp circle +160. Woe circle? +161. Rain +162. Snow +163. Sakura leaves +164. nothing (npc/mob?) +165. Weird ball thing +166. turns sprite blue +167. Taming Success (crashes client) +168. Taming failed (crashes client) +169. blue light +170. explosion +171. venom dust +172. black aura +173. red aura +174. blue aura +175. yellow aura +176. purple aura +177. red aura +178. white aura +179. purple aura +180. darkness attack hit? +181. water attack hit? +182. wind attack hit +183. self destruction +184. nothing (npc/mob?) +185. nothing (npc/mob?) +186. yellow effect +187. yellow effect +188. yellow effect +189. yellow effect +190. yellow effect +191. target (piercing attack or something) +192. purple cloud hit +193. mute or something (npc skill) +194. stun attack? +195. stone curse +196. curse +197. sleep +198. nothing (npc/mob?) +199. some weird bubble +200-203. Parts of the level 99 Aura +204-211. Healing Items Effect +212. Damage Effect (9999) +213. Shield Appears (Guard?) +214. 3 Weird Things Appear Around You (They All Look The Same) +215. Hide/Unhide? +216. 2 Red Balls shoot out +217. 2 Blue Balls shoot out +218. Concentration Potion Effect +219. Other Speed Potion +220. Berserk Potion +221. White Alien Abduction Beam +222. Defender Skill Effect (Black Circle) +223. Invalid Effect +224. White Wisp Revolving around you +225. Volcano Effect +226. Grand Cross Effect +227-230. Blank +231. Yuno Effect (Takes Alittle While) +232. Blank +233. Fog +234. Unknown To Me +235. Unknown To Me +236. Deluge Effect +237. Wind Gale Effect +238. Land Protect Effect +239. Volcano Effect 2 +240. Deluge Effect 2 +241. Wind Gale Effect 2 +242. Land Protect Effect 2 +243. Invalid Effect +244. Unknown To Me. +245. Holy Cross Effect +246. Shield Charge Effect +247. Yuno Effect 2 (Larger) +248. Status Recovery? (Shows An Angel On Top Of Your Head) +249. Shield Boomerang +250. Spear Quicken +251. Devotion +252. Reflect Shield (Yellow Circle) +259. Green Abduction Beam +260. Orange Abduction Beam +261. red aura thing +262. yellow things that shoot out +263. Yellow ground effect. +264. nothing (npc/mob?) +265. laser beam ?! +266. bunch of white shit flies out +267. gun shot! +268. money bag +269. sword thing +270. shield thing +271. armor thing +272. cape thing? +273. Outter spinning white balls. +274. flying gold +275. spit +276. stuff that flies out somewhat like crits +277. white stuff that comes out around sprite +295. frost joke +296. scream +298. fire bottle throwing +300. Chemical Protection +301. Blank +302. Demonstration Fire Effect +303. Weird Effect you turn yellow and see six lines (3 sets of 2) going slanted +304. After being warped +305. Pharmacy Success +306. Pharmacy Failed +307. Sunlight through the roof effect in Geffenia +308. Blank +309. Unknown to me +310. Unknown to me +311. Shout/Yell/Loud (Merchant Skill) Effect +312-313. Heal Effect? +314. Another Part of Warp/ Yuno Effect? +315. Newer Safety Wall (Pink Portal) +316. Another Part of Warp (The Ripple Floor Part) +317. Full Warp Effect +322. daylight +323. daylight +324. daylight +328. asura strike word +329. tripple strike +333. Orange Leaves Falling +334. blind (can stack it) +335. poison (can stack it) +336. defender shield? +337. joblvup +338. supernovice angel +341. pink warp portal +342. pink aura +343. pink heart thing (cool) +344. teleport in +346. big blue ball +347. wedding effect +349. waterfall (horizonatal) +350. waterfall (vertical) +351. sm waterfall (horizonatal) +352. sm waterfall (vertical) +353. drk waterfall (horizonatal) +354. drk waterfall (vertical) +355. drk sm waterfall (horizonatal) +356. drk sm waterfall (vertical) +358. niflheim ghost +359. niflheim bat slow +360. niflheim bat fast +361. shoots purple wave out +362. nothing? +363. valentine's day heart (wings) +364. valentine's day heart +365. falling cross +368. make you red (berserk?) +369. 2h quicken? +371. lvup +372. death +373. smoke +375. white outline around sprite +376. makes red and shoots out stuff +377. shoots out yellow shit +380. shakes screen turns you all different colors +387. spins you around shakes screen flashes white +394. big red ball around you + +403 = mind breaker +404 = spider web +405 = nothing +406 = explosion effect on the head +407 = effect that starts big and fades in to your characters head + +408. Orange Bubble Grows Around +409. Weird Poision Like Effect +410. Rainbow +411. (Usable, Just add in folder effect file called peong1.tga).errors/detoxify like. +413. nothing? +417. flash +418. red critical explosion? +419. Pulsating grey aura +420. gradual shrink char (possible minimize effect?) +421. instant minimize +422. grow back, but not all the way (baby height) +423. mega size +424. makes sprite bright +425. 4 brownish replicas of sprite fly off? +426. shakes sprites (works on player sprites!) +427. nothing? (maybe for npc/mobs) +428. yellow sparks +429. blue sparks +430. blue sparks in different direction +431. another blue spark variant +432. can't find effect\elec1.tga +433. nothing? (npc/mob?) +434. white sparks +435. can't find effect\storm2.tga (sometimes works and shows little tornado thing! +436. white shield (for one of the defense skills?) +437. blue aura (kinda like a comet!) +438. another defense aura? blue ripples. blue pulsating shield +439. can't fine effect\line3.tga +440. high priest skill angel? Angelus type effect but with a cross +441. another cast aura +442. nothing? (npc/mob?) +443. nothing? (npc/mob?) +444. white lines that fire out +445. your sprite flies up and disappears sometime sprite errors +446. your sprite falls down +447. nothing? (npc/mob?) +448. nothing? (npc/mob?) +449. turns you bright blue real quick +450. darkcross effect (black grand cross) +451. red soul strike?! (high wiz skill?) +452. A jupital thunder type of effect, electricity pulsates around your char +453. Smoke (electricity type) surrounds char, can move and effect is still their. +454. black cast aura +455. red electric that covers body +456. looks like wind rushes up (reminds me of agi up but slower, bigger, and grey) +457. forces attack animation. makes a dash like stance +458. causes sprite to jiggle. char pulsates and distorts (like 426) +459. effect\storm2.tga error, causes player sprite to spin around and you see a faint tornado aura +460. same as 459. +461. faint tornado aura +462. same as 459. +463. same as 459. +464. same as 459. +465. same as 459. +466. nothing (npc/mob?) +467. sprite error (effect\hanmoon1.tga?) +468. sprite error (effect\hanmoon2.tga?) +469. sprite error (effect\hanmoon3.tga?) +470. sprite error (effect\hanmoon4.tga?) +471. sprite error (effect\hanmoon5.tga?) +472. sprite error (effect\hanmoon6.tga?) +473. sprite error (effect\hanmoon7.tga?) +474. nothing (npc/mob?) + +475-484 = slow fade to blind, each one continues to make it smaller and smaller +485 = white critical explosion thing +486 = blue critical explosion thing +487 = black portal ground effect +488 = orange spikey aura that stretches up to fire type points +489 = yellow/gold of 488 +489 = blue version +491 = a small expoision above the head +492 = creates 1 small venom poison type of point on the ground +493+ = invalid effects diff --git a/doc/miscnotes.txt b/doc/miscnotes.txt index 4850b77f3..b74a8fba6 100644 --- a/doc/miscnotes.txt +++ b/doc/miscnotes.txt @@ -1,552 +1,552 @@ -// **************************************************** -// * Miscellaneous Notes (Added by MC Cameri) * -// **************************************************** - -// ***************************************************************** -// * Emotions that will be shown if 'int type' is one of the case. * -// ***************************************************************** -void clif_emotion(struct block_list *bl,int type); -case for 'int type': -0 = ! 10 = KO (Scissor) 20 = Hmmm 30 = Kiss 1 (R) 40 = Tsk tsk tsk (No) -1 = ? 11 = Fist (Stone) 21 = Number 1! 31 = Kiss 2 (L) 41 = Petting -2 = Music 12 = Hand (Paper) 22 = No (??) 32 = Smoking 42 = SP! (Timer) -3 = Heart 1 13 = Korean Flag 23 = OMG!! 33 = Okay 43 = Obsessed 2 (Dumb face, eyes popping) -4 = Sweat 14 = Heart 2 24 = O 34 = ... (Bugged) 44 = Come (Moving finger) -5 = Light bulb 15 = Thanks 25 = X 35 = ??? Flag 45 = Yawn (Sleepy) -6 = Annoyed 16 = Wah (Crying) 26 = Help! 36 = Evil 2 46 = Congratulations -7 = Smoke cloud 17 = Sorry 27 = Go! 37 = Obsessed 1 47 = HP! (Timer) -8 = $ 18 = Heh (Laughing) 28 = Sobbing 38 = Two Hearts -9 = ... 19 = Sweating 29 = Evil 1 39 = Tongue - -// ******************************** -// * Elemental Defense Resistance * -// ******************************** -sd->subele[0] - Neutral Property -sd->subele[1] - Water Property -sd->subele[2] - Earth Property -sd->subele[3] - Fire Property -sd->subele[4] - Wind Property -sd->subele[5] - Poison Property -sd->subele[6] - Holy Property -sd->subele[7] - Shadow Property -sd->subele[8] - Ghost Property -sd->subele[9] - Undead Property - -// *************************************** -// * Elemental Monster Attack Resistance * -// *************************************** - -sd->subrace[0] - Neutral Type -sd->subrace[1] - Undead Type -sd->subrace[2] - Brute Type -sd->subrace[3] - Plant Type -sd->subrace[4] - Insect Type -sd->subrace[5] - Fish Type -sd->subrace[6] - Demon Type -sd->subrace[7] - Demi-Human Type -sd->subrace[8] - Angel Type -sd->subrace[9] - Dragon Type -sd->subrace[10] - Boss Type #1? -sd->subrace[11] - Boss Type #2? - -// ************** -// * Misc stuff * -// ************** - -WFIFOL(fd,2)=1; - Sever Closed - -// ******************* -// * Skills List * -// ******************* -// * ID = Skill Name * -// ******************* -ID Skill Name -1 = NV_BASIC -2 = SM_SWORD -3 = SM_TWOHAND -4 = SM_RECOVERY -5 = SM_BASH -6 = SM_PROVOKE -7 = SM_MAGNUM -8 = SM_ENDURE -9 = MG_SRECOVERY -10 = MG_SIGHT -11 = MG_NAPALMBEAT -12 = MG_SAFETYWALL -13 = MG_SOULSTRIKE -14 = MG_COLDBOLT -15 = MG_FROSTDIVER -16 = MG_STONECURSE -17 = MG_FIREBALL -18 = MG_FIREWALL -19 = MG_FIREBOLT -20 = MG_LIGHTNINGBOLT -21 = MG_THUNDERSTORM -22 = AL_DP -23 = AL_DEMONBANE -24 = AL_RUWACH -25 = AL_PNEUMA -26 = AL_TELEPORT -27 = AL_WARP -28 = AL_HEAL -29 = AL_INCAGI -30 = AL_DECAGI -31 = AL_HOLYWATER -32 = AL_CRUCIS -33 = AL_ANGELUS -34 = AL_BLESSING -35 = AL_CURE -36 = MC_INCCARRY -37 = MC_DISCOUNT -38 = MC_OVERCHARGE -39 = MC_PUSHCART -40 = MC_IDENTIFY -41 = MC_VENDING -42 = MC_MAMMONITE -43 = AC_OWL -44 = AC_VULTURE -45 = AC_CONCENTRATION -46 = AC_DOUBLE -47 = AC_SHOWER -48 = TF_DOUBLE -49 = TF_MISS -50 = TF_STEAL -51 = TF_HIDING -52 = TF_POISON -53 = TF_DETOXIFY -54 = ALL_RESURRECTION -55 = KN_SPEARMASTERY -56 = KN_PIERCE -57 = KN_BRANDISHSPEAR -58 = KN_SPEARSTAB -59 = KN_SPEARBOOMERANG -60 = KN_TWOHANDQUICKEN -61 = KN_AUTOCOUNTER -62 = KN_BOWLINGBASH -63 = KN_RIDING -64 = KN_CAVALIERMASTERY -65 = PR_MACEMASTERY -66 = PR_IMPOSITIO -67 = PR_SUFFRAGIUM -68 = PR_ASPERSIO -69 = PR_BENEDICTIO -70 = PR_SANCTUARY -71 = PR_SLOWPOISON -72 = PR_STRECOVERY -73 = PR_KYRIE -74 = PR_MAGNIFICAT -75 = PR_GLORIA -76 = PR_LEXDIVINA -77 = PR_TURNUNDEAD -78 = PR_LEXAETERNA -79 = PR_MAGNUS -80 = WZ_FIREPILLAR -81 = WZ_SIGHTRASHER -83 = WZ_METEOR -84 = WZ_JUPITEL -85 = WZ_VERMILION -86 = WZ_WATERBALL -87 = WZ_ICEWALL -88 = WZ_FROSTNOVA -89 = WZ_STORMGUST -90 = WZ_EARTHSPIKE -91 = WZ_HEAVENDRIVE -92 = WZ_QUAGMIRE -93 = WZ_ESTIMATION -94 = BS_IRON -95 = BS_STEEL -96 = BS_ENCHANTEDSTONE -97 = BS_ORIDEOCON -98 = BS_DAGGER -99 = BS_SWORD -100 = BS_TWOHANDSWORD -101 = BS_AXE -102 = BS_MACE -103 = BS_KNUCKLE -104 = BS_SPEAR -105 = BS_HILTBINDING -106 = BS_FINDINGORE -107 = BS_WEAPONRESEARCH -108 = BS_REPAIRWEAPON -109 = BS_SKINTEMPER -110 = BS_HAMMERFALL -111 = BS_ADRENALINE -112 = BS_WEAPONPERFECT -113 = BS_OVERTHRUST -114 = BS_MAXIMIZE -115 = HT_SKIDTRAP -116 = HT_LANDMINE -117 = HT_ANKLESNARE -118 = HT_SHOCKWAVE -119 = HT_SANDMAN -120 = HT_FLASHER -121 = HT_FREEZINGTRAP -122 = HT_BLASTMINE -123 = HT_CLAYMORETRAP -124 = HT_REMOVETRAP -125 = HT_TALKIEBOX -126 = HT_BEASTBANE -127 = HT_FALCON -128 = HT_STEELCROW -129 = HT_BLITZBEAT -130 = HT_DETECTING -131 = HT_SPRINGTRAP -132 = AS_RIGHT -133 = AS_LEFT -134 = AS_KATAR -135 = AS_CLOAKING -136 = AS_SONICBLOW -137 = AS_GRIMTOOTH -138 = AS_ENCHANTPOISON -139 = AS_POISONREACT -140 = AS_VENOMDUST -141 = AS_SPLASHER -142 = NV_FIRSTAID -143 = NV_TRICKDEAD -144 = SM_MOVINGRECOVERY -145 = SM_FATALBLOW -146 = SM_AUTOBERSERK -147 = AC_MAKINGARROW -148 = AC_CHARGEARROW -149 = TF_SPRINKLESAND -150 = TF_BACKSLIDING -151 = TF_PICKSTONE -152 = TF_THROWSTONE -153 = MC_CARTREVOLUTION -154 = MC_CHANGECART -155 = MC_LOUD -156 = AL_HOLYLIGHT -157 = MG_ENERGYCOAT -158 = NPC_PIERCINGATT -159 = NPC_MENTALBREAKER -160 = NPC_RANGEATTACK -161 = NPC_ATTRICHANGE -162 = NPC_CHANGEWATER -163 = NPC_CHANGEGROUND -164 = NPC_CHANGEFIRE -165 = NPC_CHANGEWIND -166 = NPC_CHANGEPOISON -167 = NPC_CHANGEHOLY -168 = NPC_CHANGEDARLNESS -169 = NPC_CHANGETELEKINESIS -170 = NPC_CRITICALSLASH -171 = NPC_COMBOATTACK -172 = NPC_GUIDEATTACK -173 = NPC_SELFDESTRUCTION -174 = NPC_SPLASHATTACK -175 = NPC_SUICIDE -176 = NPC_POISON -177 = NPC_BLINDATTACK -178 = NPC_SILENCEATTACK -179 = NPC_STUNATTACK -180 = NPC_PETRIFYATTACK -181 = NPC_CURSEATTACK -182 = NPC_SLEEPATTACK -183 = NPC_RANDOMATTACK -184 = NPC_WATERATTACK -185 = NPC_GROUNDATTACK -186 = NPC_FIREATTACK -187 = NPC_WINDATTACK -188 = NPC_POISONATTACK -189 = NPC_HOLYATTACK -190 = NPC_DARKNESSATTACK -191 = NPC_TELEKINESISATTACK -192 = NPC_MAGICALATTACK -193 = NPC_METAMORPHOSIS -194 = NPC_PROVOCATION -195 = NPC_SMOKING -196 = NPC_SUMMONSLAVE -197 = NPC_EMOTION -198 = NPC_TRANSFORMATION -199 = NPC_BLOODDRAIN -200 = NPC_ENERGYDRAIN -201 = NPC_KEEPING -202 = NPC_DARKBREATH -203 = NPC_DARKBLESSING -204 = NPC_BARRIER -205 = NPC_DEFENDER -206 = NPC_LICK -207 = NPC_HALLUCINATION -208 = NPC_REBIRTH -209 = NPC_SUMMONMONSTER -210 = RG_SNATCHER -211 = RG_STEALCOIN -212 = RG_BACKSTAP -213 = RG_TUNNELDRIVE -214 = RG_RAID -215 = RG_STRIPWEAPON -216 = RG_STRIPSHIELD -217 = RG_STRIPARMOR -218 = RG_STRIPHELM -219 = RG_INTIMIDATE -220 = RG_GRAFFITI -221 = RG_FLAGGRAFFITI -222 = RG_CLEANER -223 = RG_GANGSTER -224 = RG_COMPULSION -225 = RG_PLAGIARISM -226 = AM_AXEMASTERY -227 = AM_LEARNINGPOTION -228 = AM_PHARMACY -229 = AM_DEMONSTRATION -230 = AM_ACIDTERROR -231 = AM_POTIONPITCHER -232 = AM_CANNIBALIZE -233 = AM_SPHEREMINE -234 = AM_CP_WEAPON -235 = AM_CP_SHIELD -236 = AM_CP_ARMOR -237 = AM_CP_HELM -248 = CR_TRUST -249 = CR_AUTOGUARD -250 = CR_SHIELDCHARGE -251 = CR_SHIELDBOOMERANG -252 = CR_REFLECTSHIELD -253 = CR_HOLYCROSS -254 = CR_GRANDCROSS -255 = CR_DEVOTION -256 = CR_PROVIDENCE -257 = CR_DEFENDER -258 = CR_SPEARQUICKEN -259 = MO_IRONHAND -260 = MO_SPIRITSRECOVERY -261 = MO_CALLSPIRITS -262 = MO_ABSORBSPIRITS -263 = MO_TRIPLEATTACK -264 = MO_BODYRELOCATION -265 = MO_DODGE -266 = MO_INVESTIGATE -267 = MO_FINGEROFFENSIVE -268 = MO_STEELBODY -269 = MO_BLADESTOP -270 = MO_EXPLOSIONSPIRITS -271 = MO_EXTREMITYFIST -272 = MO_CHAINCOMBO -273 = MO_COMBOFINISH -274 = SA_ADVANCEDBOOK -275 = SA_CASTCANCEL -276 = SA_MAGICROD -277 = SA_SPELLBREAKER -278 = SA_FREECAST -279 = SA_AUTOSPELL -280 = SA_FLAMELAUNCHER -281 = SA_FROSTWEAPON -282 = SA_LIGHTNINGLOADER -283 = SA_SEISMICWEAPON -284 = SA_DRAGONOLOGY -285 = SA_VOLCANO -286 = SA_DELUGE -287 = SA_VIOLENTGALE -288 = SA_LANDPROTECTOR -289 = SA_DISPELL -290 = SA_ABRACADABRA -291 = SA_MONOCELL -292 = SA_CLASSCHANGE -293 = SA_SUMMONMONSTER -294 = SA_REVERSEORCISH -295 = SA_DEATH -296 = SA_FORTUNE -297 = SA_TAMINGMONSTER -298 = SA_QUESTION -299 = SA_GRAVITY -300 = SA_LEVELUP -301 = SA_INSTANTDEATH -302 = SA_FULLRECOVERY -303 = SA_COMA -304 = BD_ADAPTATION -305 = BD_ENCORE -306 = BD_LULLABY -307 = BD_RICHMANKIM -308 = BD_ETERNALCHAOS -309 = BD_DRUMBATTLEFIELD -310 = BD_RINGNIBELUNGEN -311 = BD_ROKISWEIL -312 = BD_INTOABYSS -313 = BD_SIEGFRIED -315 = BA_MUSICALLESSON -316 = BA_MUSICALSTRIKE -317 = BA_DISSONANCE -318 = BA_FROSTJOKE -319 = BA_WHISTLE -320 = BA_ASSASSINCROSS -321 = BA_POEMBRAGI -322 = BA_APPLEIDUN -323 = DC_DANCINGLESSON -324 = DC_THROWARROW -325 = DC_UGLYDANCE -326 = DC_SCREAM -327 = DC_HUMMING -328 = DC_DONTFORGETME -329 = DC_FORTUNEKISS -330 = DC_SERVICEFORYOU -334 = WE_MALE -335 = WE_FEMALE -336 = WE_CALLPARTNER -355 = LK_AURABLADE -356 = LK_PARRYING -357 = LK_CONCENTRATION -358 = LK_TENSIONRELAX -359 = LK_BERSERK -361 = HP_ASSUMPTIO -362 = HP_BASILICA -363 = HP_MEDITATIO -364 = HW_SOULDRAIN -365 = HW_MAGICCRASHER -366 = HW_MAGICPOWER -367 = PA_PRESSURE -368 = PA_SACRIFICE -369 = PA_GOSPEL -370 = CH_PALMSTRIKE -371 = CH_TIGERFIST -372 = CH_CHAINCRUSH -373 = PF_HPCONVERSION -374 = PF_SOULCHANGE -375 = PF_SOULBURN -376 = ASC_KATAR -377 = ASC_HALLUCINATION -378 = ASC_EDP -379 = ASC_BREAKER -380 = SN_SIGHT -381 = SN_FALCONASSAULT -382 = SN_SHARPSHOOTING -383 = SN_WINDWALK -384 = WS_MELTDOWN -385 = WS_CREATECOIN -386 = WS_CREATENUGGET -387 = WS_CARTBOOST -388 = WS_SYSTEMCREATE -389 = ST_CHASEWALK -390 = ST_REJECTSWORD -392 = CR_ALCHEMY -393 = CR_SYNTHESISPOTION -394 = CG_ARROWVULCAN -395 = CG_MOONLIT -396 = CG_MARIONETTE -397 = LK_SPIRALPIERCE -398 = LK_HEADCRUSH -399 = LK_JOINTBEAT -400 = HW_NAPALMVULCAN -401 = CH_SOULCOLLECT -402 = PF_MINDBREAKER -403 = PF_MEMORIZE -404 = PF_FOGWALL -405 = PF_SPIDERWEB -406 = ASC_METEORASSAULT -407 = ASC_CDP -408 = WE_BABY -409 = WE_CALLPARENT -410 = WE_CALLBABY -411 = TK_RUN -412 = TK_READYSTORM -413 = TK_STORMKICK -414 = TK_READYDOWN -415 = TK_DOWNKICK -416 = TK_READYTURN -417 = TK_TURNKICK -418 = TK_READYCOUNTER -419 = TK_COUNTER -420 = TK_DODGE -421 = TK_JUMPKICK -422 = TK_HPTIME -423 = TK_SPTIME -424 = TK_POWER -425 = TK_SEVENWIND -426 = TK_HIGHJUMP -427 = SG_FEEL -428 = SG_SUN_WARM -429 = SG_MOON_WARM -430 = SG_STAR_WARM -431 = SG_SUN_COMFORT -432 = SG_MOON_COMFORT -433 = SG_STAR_COMFORT -434 = SG_HATE -435 = SG_SUN_ANGER -436 = SG_MOON_ANGER -437 = SG_STAR_ANGER -438 = SG_SUN_BLESS -439 = SG_MOON_BLESS -440 = SG_STAR_BLESS -441 = SG_DEVIL -442 = SG_FRIEND -443 = SG_KNOWLEDGE -444 = SG_FUSION -445 = SL_ALCHEMIST -446 = AM_BERSERKPITCHER -447 = SL_MONK -448 = SL_STAR -449 = SL_SAGE -450 = SL_CRUSADER -451 = SL_SUPERNOVICE -452 = SL_KNIGHT -453 = SL_WIZARD -454 = SL_PRIEST -455 = SL_BARDDANCER -456 = SL_ROGUE -457 = SL_ASSASIN -458 = SL_BLACKSMITH -459 = BS_ADRENALINE2 -460 = SL_HUNTER -461 = SL_SOULLINKER -462 = SL_KAIZEL -463 = SL_KAAHI -464 = SL_KAUPE -465 = SL_KAITE -466 = SL_KAINA -467 = SL_STIN -468 = SL_STUN -469 = SL_SMA -470 = SL_SWOO -471 = SL_SKE -472 = SL_SKA -10000 = GD_APPROVAL -10001 = GD_KAFRACONTRACT -10002 = GD_GUARDRESEARCH -10003 = GD_CHARISMA -10004 = GD_EXTENSION - -// ************************ -// * Item DB - Use Script * -// ************************ -itemskill: - -Format: itemskill skill_id,skill_lvl,"name"; - -Example: itemskill 28,3,"Heal"; //Healing skill - -itemheal: - -Format: itemheal hp,sp; - -Example: itemheal 30,0; //+30 HP, +0 SP. - -sc_start: - -Format: sc_start SC_CONSTANT,duration,value; - -Example: sc_start SC_POISON,1800,; //Starts Poison Status for 30 seconds - -sc_end: - -Format: sc_end SC_CONSTANT; - -Example: sc_end SC_BLIND; //Ends Blind Status - -warp: - -Format: warp "map",x,y; - -Example: warp "Random",0,0; //Fly wing - -Example: warp "SavePoint",0,0; //Butterfly wing - -getitem: - -Format: getitem item_id,count; - -Example: getitem 512,2; //Gives you two Apples - -produce: - -Format: produce produce_type; - -Example: produce 16; //Mini-furnace - -pet: - -Format: pet pet_id; - -Example: pet 1002; //Taming item for Poring - -monster: - -Example: monster "this",0,0,"--ja--",-1,1,""; //Dead branch - -percentheal: - -Format: percentheal percent_hp,percent_sp; - -Example: percentheal 100,100; //Heals you 100% of both HP and SP - -// ************************** -// * Item DB - Equip Script * +// **************************************************** +// * Miscellaneous Notes (Added by MC Cameri) * +// **************************************************** + +// ***************************************************************** +// * Emotions that will be shown if 'int type' is one of the case. * +// ***************************************************************** +void clif_emotion(struct block_list *bl,int type); +case for 'int type': +0 = ! 10 = KO (Scissor) 20 = Hmmm 30 = Kiss 1 (R) 40 = Tsk tsk tsk (No) +1 = ? 11 = Fist (Stone) 21 = Number 1! 31 = Kiss 2 (L) 41 = Petting +2 = Music 12 = Hand (Paper) 22 = No (??) 32 = Smoking 42 = SP! (Timer) +3 = Heart 1 13 = Korean Flag 23 = OMG!! 33 = Okay 43 = Obsessed 2 (Dumb face, eyes popping) +4 = Sweat 14 = Heart 2 24 = O 34 = ... (Bugged) 44 = Come (Moving finger) +5 = Light bulb 15 = Thanks 25 = X 35 = ??? Flag 45 = Yawn (Sleepy) +6 = Annoyed 16 = Wah (Crying) 26 = Help! 36 = Evil 2 46 = Congratulations +7 = Smoke cloud 17 = Sorry 27 = Go! 37 = Obsessed 1 47 = HP! (Timer) +8 = $ 18 = Heh (Laughing) 28 = Sobbing 38 = Two Hearts +9 = ... 19 = Sweating 29 = Evil 1 39 = Tongue + +// ******************************** +// * Elemental Defense Resistance * +// ******************************** +sd->subele[0] - Neutral Property +sd->subele[1] - Water Property +sd->subele[2] - Earth Property +sd->subele[3] - Fire Property +sd->subele[4] - Wind Property +sd->subele[5] - Poison Property +sd->subele[6] - Holy Property +sd->subele[7] - Shadow Property +sd->subele[8] - Ghost Property +sd->subele[9] - Undead Property + +// *************************************** +// * Elemental Monster Attack Resistance * +// *************************************** + +sd->subrace[0] - Neutral Type +sd->subrace[1] - Undead Type +sd->subrace[2] - Brute Type +sd->subrace[3] - Plant Type +sd->subrace[4] - Insect Type +sd->subrace[5] - Fish Type +sd->subrace[6] - Demon Type +sd->subrace[7] - Demi-Human Type +sd->subrace[8] - Angel Type +sd->subrace[9] - Dragon Type +sd->subrace[10] - Boss Type #1? +sd->subrace[11] - Boss Type #2? + +// ************** +// * Misc stuff * +// ************** + +WFIFOL(fd,2)=1; - Sever Closed + +// ******************* +// * Skills List * +// ******************* +// * ID = Skill Name * +// ******************* +ID Skill Name +1 = NV_BASIC +2 = SM_SWORD +3 = SM_TWOHAND +4 = SM_RECOVERY +5 = SM_BASH +6 = SM_PROVOKE +7 = SM_MAGNUM +8 = SM_ENDURE +9 = MG_SRECOVERY +10 = MG_SIGHT +11 = MG_NAPALMBEAT +12 = MG_SAFETYWALL +13 = MG_SOULSTRIKE +14 = MG_COLDBOLT +15 = MG_FROSTDIVER +16 = MG_STONECURSE +17 = MG_FIREBALL +18 = MG_FIREWALL +19 = MG_FIREBOLT +20 = MG_LIGHTNINGBOLT +21 = MG_THUNDERSTORM +22 = AL_DP +23 = AL_DEMONBANE +24 = AL_RUWACH +25 = AL_PNEUMA +26 = AL_TELEPORT +27 = AL_WARP +28 = AL_HEAL +29 = AL_INCAGI +30 = AL_DECAGI +31 = AL_HOLYWATER +32 = AL_CRUCIS +33 = AL_ANGELUS +34 = AL_BLESSING +35 = AL_CURE +36 = MC_INCCARRY +37 = MC_DISCOUNT +38 = MC_OVERCHARGE +39 = MC_PUSHCART +40 = MC_IDENTIFY +41 = MC_VENDING +42 = MC_MAMMONITE +43 = AC_OWL +44 = AC_VULTURE +45 = AC_CONCENTRATION +46 = AC_DOUBLE +47 = AC_SHOWER +48 = TF_DOUBLE +49 = TF_MISS +50 = TF_STEAL +51 = TF_HIDING +52 = TF_POISON +53 = TF_DETOXIFY +54 = ALL_RESURRECTION +55 = KN_SPEARMASTERY +56 = KN_PIERCE +57 = KN_BRANDISHSPEAR +58 = KN_SPEARSTAB +59 = KN_SPEARBOOMERANG +60 = KN_TWOHANDQUICKEN +61 = KN_AUTOCOUNTER +62 = KN_BOWLINGBASH +63 = KN_RIDING +64 = KN_CAVALIERMASTERY +65 = PR_MACEMASTERY +66 = PR_IMPOSITIO +67 = PR_SUFFRAGIUM +68 = PR_ASPERSIO +69 = PR_BENEDICTIO +70 = PR_SANCTUARY +71 = PR_SLOWPOISON +72 = PR_STRECOVERY +73 = PR_KYRIE +74 = PR_MAGNIFICAT +75 = PR_GLORIA +76 = PR_LEXDIVINA +77 = PR_TURNUNDEAD +78 = PR_LEXAETERNA +79 = PR_MAGNUS +80 = WZ_FIREPILLAR +81 = WZ_SIGHTRASHER +83 = WZ_METEOR +84 = WZ_JUPITEL +85 = WZ_VERMILION +86 = WZ_WATERBALL +87 = WZ_ICEWALL +88 = WZ_FROSTNOVA +89 = WZ_STORMGUST +90 = WZ_EARTHSPIKE +91 = WZ_HEAVENDRIVE +92 = WZ_QUAGMIRE +93 = WZ_ESTIMATION +94 = BS_IRON +95 = BS_STEEL +96 = BS_ENCHANTEDSTONE +97 = BS_ORIDEOCON +98 = BS_DAGGER +99 = BS_SWORD +100 = BS_TWOHANDSWORD +101 = BS_AXE +102 = BS_MACE +103 = BS_KNUCKLE +104 = BS_SPEAR +105 = BS_HILTBINDING +106 = BS_FINDINGORE +107 = BS_WEAPONRESEARCH +108 = BS_REPAIRWEAPON +109 = BS_SKINTEMPER +110 = BS_HAMMERFALL +111 = BS_ADRENALINE +112 = BS_WEAPONPERFECT +113 = BS_OVERTHRUST +114 = BS_MAXIMIZE +115 = HT_SKIDTRAP +116 = HT_LANDMINE +117 = HT_ANKLESNARE +118 = HT_SHOCKWAVE +119 = HT_SANDMAN +120 = HT_FLASHER +121 = HT_FREEZINGTRAP +122 = HT_BLASTMINE +123 = HT_CLAYMORETRAP +124 = HT_REMOVETRAP +125 = HT_TALKIEBOX +126 = HT_BEASTBANE +127 = HT_FALCON +128 = HT_STEELCROW +129 = HT_BLITZBEAT +130 = HT_DETECTING +131 = HT_SPRINGTRAP +132 = AS_RIGHT +133 = AS_LEFT +134 = AS_KATAR +135 = AS_CLOAKING +136 = AS_SONICBLOW +137 = AS_GRIMTOOTH +138 = AS_ENCHANTPOISON +139 = AS_POISONREACT +140 = AS_VENOMDUST +141 = AS_SPLASHER +142 = NV_FIRSTAID +143 = NV_TRICKDEAD +144 = SM_MOVINGRECOVERY +145 = SM_FATALBLOW +146 = SM_AUTOBERSERK +147 = AC_MAKINGARROW +148 = AC_CHARGEARROW +149 = TF_SPRINKLESAND +150 = TF_BACKSLIDING +151 = TF_PICKSTONE +152 = TF_THROWSTONE +153 = MC_CARTREVOLUTION +154 = MC_CHANGECART +155 = MC_LOUD +156 = AL_HOLYLIGHT +157 = MG_ENERGYCOAT +158 = NPC_PIERCINGATT +159 = NPC_MENTALBREAKER +160 = NPC_RANGEATTACK +161 = NPC_ATTRICHANGE +162 = NPC_CHANGEWATER +163 = NPC_CHANGEGROUND +164 = NPC_CHANGEFIRE +165 = NPC_CHANGEWIND +166 = NPC_CHANGEPOISON +167 = NPC_CHANGEHOLY +168 = NPC_CHANGEDARLNESS +169 = NPC_CHANGETELEKINESIS +170 = NPC_CRITICALSLASH +171 = NPC_COMBOATTACK +172 = NPC_GUIDEATTACK +173 = NPC_SELFDESTRUCTION +174 = NPC_SPLASHATTACK +175 = NPC_SUICIDE +176 = NPC_POISON +177 = NPC_BLINDATTACK +178 = NPC_SILENCEATTACK +179 = NPC_STUNATTACK +180 = NPC_PETRIFYATTACK +181 = NPC_CURSEATTACK +182 = NPC_SLEEPATTACK +183 = NPC_RANDOMATTACK +184 = NPC_WATERATTACK +185 = NPC_GROUNDATTACK +186 = NPC_FIREATTACK +187 = NPC_WINDATTACK +188 = NPC_POISONATTACK +189 = NPC_HOLYATTACK +190 = NPC_DARKNESSATTACK +191 = NPC_TELEKINESISATTACK +192 = NPC_MAGICALATTACK +193 = NPC_METAMORPHOSIS +194 = NPC_PROVOCATION +195 = NPC_SMOKING +196 = NPC_SUMMONSLAVE +197 = NPC_EMOTION +198 = NPC_TRANSFORMATION +199 = NPC_BLOODDRAIN +200 = NPC_ENERGYDRAIN +201 = NPC_KEEPING +202 = NPC_DARKBREATH +203 = NPC_DARKBLESSING +204 = NPC_BARRIER +205 = NPC_DEFENDER +206 = NPC_LICK +207 = NPC_HALLUCINATION +208 = NPC_REBIRTH +209 = NPC_SUMMONMONSTER +210 = RG_SNATCHER +211 = RG_STEALCOIN +212 = RG_BACKSTAP +213 = RG_TUNNELDRIVE +214 = RG_RAID +215 = RG_STRIPWEAPON +216 = RG_STRIPSHIELD +217 = RG_STRIPARMOR +218 = RG_STRIPHELM +219 = RG_INTIMIDATE +220 = RG_GRAFFITI +221 = RG_FLAGGRAFFITI +222 = RG_CLEANER +223 = RG_GANGSTER +224 = RG_COMPULSION +225 = RG_PLAGIARISM +226 = AM_AXEMASTERY +227 = AM_LEARNINGPOTION +228 = AM_PHARMACY +229 = AM_DEMONSTRATION +230 = AM_ACIDTERROR +231 = AM_POTIONPITCHER +232 = AM_CANNIBALIZE +233 = AM_SPHEREMINE +234 = AM_CP_WEAPON +235 = AM_CP_SHIELD +236 = AM_CP_ARMOR +237 = AM_CP_HELM +248 = CR_TRUST +249 = CR_AUTOGUARD +250 = CR_SHIELDCHARGE +251 = CR_SHIELDBOOMERANG +252 = CR_REFLECTSHIELD +253 = CR_HOLYCROSS +254 = CR_GRANDCROSS +255 = CR_DEVOTION +256 = CR_PROVIDENCE +257 = CR_DEFENDER +258 = CR_SPEARQUICKEN +259 = MO_IRONHAND +260 = MO_SPIRITSRECOVERY +261 = MO_CALLSPIRITS +262 = MO_ABSORBSPIRITS +263 = MO_TRIPLEATTACK +264 = MO_BODYRELOCATION +265 = MO_DODGE +266 = MO_INVESTIGATE +267 = MO_FINGEROFFENSIVE +268 = MO_STEELBODY +269 = MO_BLADESTOP +270 = MO_EXPLOSIONSPIRITS +271 = MO_EXTREMITYFIST +272 = MO_CHAINCOMBO +273 = MO_COMBOFINISH +274 = SA_ADVANCEDBOOK +275 = SA_CASTCANCEL +276 = SA_MAGICROD +277 = SA_SPELLBREAKER +278 = SA_FREECAST +279 = SA_AUTOSPELL +280 = SA_FLAMELAUNCHER +281 = SA_FROSTWEAPON +282 = SA_LIGHTNINGLOADER +283 = SA_SEISMICWEAPON +284 = SA_DRAGONOLOGY +285 = SA_VOLCANO +286 = SA_DELUGE +287 = SA_VIOLENTGALE +288 = SA_LANDPROTECTOR +289 = SA_DISPELL +290 = SA_ABRACADABRA +291 = SA_MONOCELL +292 = SA_CLASSCHANGE +293 = SA_SUMMONMONSTER +294 = SA_REVERSEORCISH +295 = SA_DEATH +296 = SA_FORTUNE +297 = SA_TAMINGMONSTER +298 = SA_QUESTION +299 = SA_GRAVITY +300 = SA_LEVELUP +301 = SA_INSTANTDEATH +302 = SA_FULLRECOVERY +303 = SA_COMA +304 = BD_ADAPTATION +305 = BD_ENCORE +306 = BD_LULLABY +307 = BD_RICHMANKIM +308 = BD_ETERNALCHAOS +309 = BD_DRUMBATTLEFIELD +310 = BD_RINGNIBELUNGEN +311 = BD_ROKISWEIL +312 = BD_INTOABYSS +313 = BD_SIEGFRIED +315 = BA_MUSICALLESSON +316 = BA_MUSICALSTRIKE +317 = BA_DISSONANCE +318 = BA_FROSTJOKE +319 = BA_WHISTLE +320 = BA_ASSASSINCROSS +321 = BA_POEMBRAGI +322 = BA_APPLEIDUN +323 = DC_DANCINGLESSON +324 = DC_THROWARROW +325 = DC_UGLYDANCE +326 = DC_SCREAM +327 = DC_HUMMING +328 = DC_DONTFORGETME +329 = DC_FORTUNEKISS +330 = DC_SERVICEFORYOU +334 = WE_MALE +335 = WE_FEMALE +336 = WE_CALLPARTNER +355 = LK_AURABLADE +356 = LK_PARRYING +357 = LK_CONCENTRATION +358 = LK_TENSIONRELAX +359 = LK_BERSERK +361 = HP_ASSUMPTIO +362 = HP_BASILICA +363 = HP_MEDITATIO +364 = HW_SOULDRAIN +365 = HW_MAGICCRASHER +366 = HW_MAGICPOWER +367 = PA_PRESSURE +368 = PA_SACRIFICE +369 = PA_GOSPEL +370 = CH_PALMSTRIKE +371 = CH_TIGERFIST +372 = CH_CHAINCRUSH +373 = PF_HPCONVERSION +374 = PF_SOULCHANGE +375 = PF_SOULBURN +376 = ASC_KATAR +377 = ASC_HALLUCINATION +378 = ASC_EDP +379 = ASC_BREAKER +380 = SN_SIGHT +381 = SN_FALCONASSAULT +382 = SN_SHARPSHOOTING +383 = SN_WINDWALK +384 = WS_MELTDOWN +385 = WS_CREATECOIN +386 = WS_CREATENUGGET +387 = WS_CARTBOOST +388 = WS_SYSTEMCREATE +389 = ST_CHASEWALK +390 = ST_REJECTSWORD +392 = CR_ALCHEMY +393 = CR_SYNTHESISPOTION +394 = CG_ARROWVULCAN +395 = CG_MOONLIT +396 = CG_MARIONETTE +397 = LK_SPIRALPIERCE +398 = LK_HEADCRUSH +399 = LK_JOINTBEAT +400 = HW_NAPALMVULCAN +401 = CH_SOULCOLLECT +402 = PF_MINDBREAKER +403 = PF_MEMORIZE +404 = PF_FOGWALL +405 = PF_SPIDERWEB +406 = ASC_METEORASSAULT +407 = ASC_CDP +408 = WE_BABY +409 = WE_CALLPARENT +410 = WE_CALLBABY +411 = TK_RUN +412 = TK_READYSTORM +413 = TK_STORMKICK +414 = TK_READYDOWN +415 = TK_DOWNKICK +416 = TK_READYTURN +417 = TK_TURNKICK +418 = TK_READYCOUNTER +419 = TK_COUNTER +420 = TK_DODGE +421 = TK_JUMPKICK +422 = TK_HPTIME +423 = TK_SPTIME +424 = TK_POWER +425 = TK_SEVENWIND +426 = TK_HIGHJUMP +427 = SG_FEEL +428 = SG_SUN_WARM +429 = SG_MOON_WARM +430 = SG_STAR_WARM +431 = SG_SUN_COMFORT +432 = SG_MOON_COMFORT +433 = SG_STAR_COMFORT +434 = SG_HATE +435 = SG_SUN_ANGER +436 = SG_MOON_ANGER +437 = SG_STAR_ANGER +438 = SG_SUN_BLESS +439 = SG_MOON_BLESS +440 = SG_STAR_BLESS +441 = SG_DEVIL +442 = SG_FRIEND +443 = SG_KNOWLEDGE +444 = SG_FUSION +445 = SL_ALCHEMIST +446 = AM_BERSERKPITCHER +447 = SL_MONK +448 = SL_STAR +449 = SL_SAGE +450 = SL_CRUSADER +451 = SL_SUPERNOVICE +452 = SL_KNIGHT +453 = SL_WIZARD +454 = SL_PRIEST +455 = SL_BARDDANCER +456 = SL_ROGUE +457 = SL_ASSASIN +458 = SL_BLACKSMITH +459 = BS_ADRENALINE2 +460 = SL_HUNTER +461 = SL_SOULLINKER +462 = SL_KAIZEL +463 = SL_KAAHI +464 = SL_KAUPE +465 = SL_KAITE +466 = SL_KAINA +467 = SL_STIN +468 = SL_STUN +469 = SL_SMA +470 = SL_SWOO +471 = SL_SKE +472 = SL_SKA +10000 = GD_APPROVAL +10001 = GD_KAFRACONTRACT +10002 = GD_GUARDRESEARCH +10003 = GD_CHARISMA +10004 = GD_EXTENSION + +// ************************ +// * Item DB - Use Script * +// ************************ +itemskill: + -Format: itemskill skill_id,skill_lvl,"name"; + -Example: itemskill 28,3,"Heal"; //Healing skill + +itemheal: + -Format: itemheal hp,sp; + -Example: itemheal 30,0; //+30 HP, +0 SP. + +sc_start: + -Format: sc_start SC_CONSTANT,duration,value; + -Example: sc_start SC_POISON,1800,; //Starts Poison Status for 30 seconds + +sc_end: + -Format: sc_end SC_CONSTANT; + -Example: sc_end SC_BLIND; //Ends Blind Status + +warp: + -Format: warp "map",x,y; + -Example: warp "Random",0,0; //Fly wing + -Example: warp "SavePoint",0,0; //Butterfly wing + +getitem: + -Format: getitem item_id,count; + -Example: getitem 512,2; //Gives you two Apples + +produce: + -Format: produce produce_type; + -Example: produce 16; //Mini-furnace + +pet: + -Format: pet pet_id; + -Example: pet 1002; //Taming item for Poring + +monster: + -Example: monster "this",0,0,"--ja--",-1,1,""; //Dead branch + +percentheal: + -Format: percentheal percent_hp,percent_sp; + -Example: percentheal 100,100; //Heals you 100% of both HP and SP + +// ************************** +// * Item DB - Equip Script * // ************************** \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 4431323e09b1ab9875ea8ac67f0ecd1b36420559 Mon Sep 17 00:00:00 2001 From: celest Date: Wed, 16 Feb 2005 08:25:45 +0000 Subject: * Fixed a typo in quests/all_quest.txt * Set 'killerrid' and do PCKillEvent before calling PCDieEvent * Added some new script event related options to script config * Added 10 of the new card effects on the 2/15's patch * Minor rewrites on self and enemy weapon/armor breaking * Added missing code for 'bBreakWeaponRate' and 'bBreakWeaponRate' effects * Added missing code for 'bAddStealRate' effect * Removed redundant 'infinite_autospell' in map_session_data git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1116 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 20 ++++++++ conf-tmpl/script_athena.conf | 25 ++++++++- db/const.txt | 8 ++- doc/item_bonus.txt | 20 ++++++++ npc/Changelog.txt | 1 + npc/quests/all_quest.txt | 2 +- src/map/battle.c | 120 +++++++++++++++++++++++++++++++------------ src/map/map.c | 5 +- src/map/map.h | 12 +++-- src/map/pc.c | 117 ++++++++++++++++++++++++++++++++++------- src/map/script.c | 43 ++++++++++++++-- src/map/script.h | 7 +++ src/map/skill.c | 116 ++++++++++++++++++++++++++--------------- src/map/status.c | 24 +++++++++ 14 files changed, 409 insertions(+), 111 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 87da4e190..bbbe894e7 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,6 +1,25 @@ Date Added 02/16 + * Set 'killerrid' and do PCKillEvent before calling PCDieEvent, thanks to + mrmagoo for pointing it out [celest] + + * Added some new script event related options to script config [celest] + + - [die/kill/login/logout]_event_name: Name of script to activate when an + event has occured + - event_requires_trigger: whether or not a 'set [EventName],1;' has to be + defined first for the event to be activated + + * Added 10 of the new card effects on the 2/15's patch (still untested and + not yet added to the item_db) + - Refer to doc/item_bonus.txt for description + + * Minor rewrites on self and enemy weapon/armor breaking during battle [celest] + * Added missing code for 'bBreakWeaponRate' and 'bBreakWeaponRate' effects + [celest] + * Added missing code for 'bAddStealRate' effect [celest] + * Removed redundant 'infinite_autospell' in map_session_data [celest] * Fixed Treasure Box spawn bug in all castles. [Lupus] * Fixed wrong PresentLOG (it wasn't showing PRESENT BOX type ID) [Lupus] * Expanded Monsters Drops Slots from 8 to 10. Everywhere in the sources. [Lupus] @@ -10,6 +29,7 @@ Date Added On expanding MOB_DB.TXT we'll remove that plug. We are adding new cards and some monsters have no free slots for them. Current state is tested and works fine. + 02/15 * Allow Potion Pitcher to be able to cast on yourself -- i've almost forgot about this, thanks to Filougarou and Poki#3 for the fix ^^; [celest] diff --git a/conf-tmpl/script_athena.conf b/conf-tmpl/script_athena.conf index 45ee734f7..bc8f1c907 100644 --- a/conf-tmpl/script_athena.conf +++ b/conf-tmpl/script_athena.conf @@ -11,4 +11,27 @@ warn_cmd_mismatch_paramnum: yes check_cmdcount: 8192 -check_gotocount: 512 \ No newline at end of file +check_gotocount: 512 + + +//---- Custom script functions ---- + +// 0 - Event script is defined as an NPC by itself +// 1 - Event script can be called by script label +event_script_type: 0 + +// Name of event when a player has died +die_event_name: PCDieEvent + +// Name of event when a player kills something +kill_event_name: PCKillEvent + +// Name of event when a player logs out +logout_event_name: PCLogoutEvent + +// Name of event when a player logs in +login_event_name: PCLoginEvent + +// For events to be activated do we require +// a 'set [EventName],1;' to be called first? +event_requires_trigger: yes diff --git a/db/const.txt b/db/const.txt index 71082acce..e8cd07893 100644 --- a/db/const.txt +++ b/db/const.txt @@ -110,8 +110,8 @@ MaxHp 6 1 Sp 7 1 MaxSp 8 1 BaseJob 119 1 -Karma 4 -Manner 5 +Karma 4 1 +Manner 5 1 bMaxHP 6 bMaxSP 8 @@ -241,9 +241,7 @@ bAddEffWhenHit 2016 bAutoSpellWhenHit 2017 bSkillAtk 2018 bUnstripable 2019 -bAddMob 2020 -bSubMob 2021 -bAddByMob 2022 +bAddDamageByClass 2020 Eff_Stone 0 diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 30202ee2d..818a1980f 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -135,3 +135,23 @@ bonus3 bAutoSpell,n,x,y; Auto Spell casting of spell n at level x with y% chanc // bAddDamageClass, bAddMagicDamageClass and bAddMonsterDropItem it is setting possible up to 10. Those which exceed 10 are ignored. // those which can be used with the arrow are only bCritical, bAtkEle, bHit, bAddEle, bAddRace, bAddSize and bAddEff. The other things are ignored. + + + +//---- 2/15 new card effects ---- + +bonus bCritAtkRate,n; Increase critical damage by +n% +bonus bNoRegen,n; Stops regeneration for n. + n: 1=HP, 2=SP +bonus bUnstripable,n; Armor cannot be taken off via Strip skills + +bonus2 bCriticalAddRace,n,x; Increase critical + n vs. enemies of type x + +bonus2 bAddEffWhenHit,n,x; n% chance to cause x state to the enemy when + being hit by physical close range damage +bonus2 bSkillAtk,n,x; Increase damage of skill n by x% +bonus2 bAddDamageByClass,n,x; When being hit by monster of class n increase + damage taken by x% + +bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when + being hit by physical close range damage diff --git a/npc/Changelog.txt b/npc/Changelog.txt index 12a9e1871..afd47834e 100644 --- a/npc/Changelog.txt +++ b/npc/Changelog.txt @@ -35,6 +35,7 @@ Other Ppl Date Added ====== 02/16 + * Fixed a typo in quests/all_quest.txt, thanks to hongmei [celest] * Fixed treasure chests spawn in the castles. (had to simplify some code and unroll some loops) [Lupus] 02/13 diff --git a/npc/quests/all_quest.txt b/npc/quests/all_quest.txt index a6a6e3264..73a47c6e7 100644 --- a/npc/quests/all_quest.txt +++ b/npc/quests/all_quest.txt @@ -501,7 +501,7 @@ LCancel6: Headset: mes "[Quest Assistant]"; mes "These are Articles needed for my Grandfather's masterpiece."; - mes "^3355FF100 Steel^000000"; + mes "^3355FF40 Steel^000000"; mes "^3355FF1 Oridecon^000000"; mes "^3355FF1 Alchol^000000"; mes "^3355FF1 Coal^000000"; diff --git a/src/map/battle.c b/src/map/battle.c index aa94ac9fc..35b1d2737 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1508,6 +1508,12 @@ static struct Damage battle_calc_mob_weapon_attack( break; } } + for(i=0;iadd_damage_class_count2;i++) { + if(tsd->add_damage_classid2[i] == md->class_) { + cardfix=cardfix*(100+tsd->add_damage_classrate2[i])/100; + break; + } + } if(flag&BF_LONG) cardfix=cardfix*(100-tsd->long_attack_def_rate)/100; if(flag&BF_SHORT) @@ -1776,6 +1782,7 @@ static struct Damage battle_calc_pc_weapon_attack( if(da == 0){ //ダブルアタックが発動していない // クリティカル計算 cri = status_get_critical(src); + cri += sd->critaddrace[t_race]; if(sd->state.arrow_atk) cri += sd->arrow_cri; @@ -1798,7 +1805,6 @@ static struct Damage battle_calc_pc_weapon_attack( else cri <<= 1; } - if(skill_num == SN_SHARPSHOOTING) cri += 200; } @@ -1812,13 +1818,16 @@ static struct Damage battle_calc_pc_weapon_attack( damage += atkmax; damage2 += atkmax_; if(sd->atk_rate != 100 || sd->weapon_atk_rate != 0) { - if (sd->status.weapon < 16) { - damage = (damage * (sd->atk_rate + sd->weapon_atk_rate[sd->status.weapon]))/100; - damage2 = (damage2 * (sd->atk_rate + sd->weapon_atk_rate[sd->status.weapon]))/100; - } + if (sd->status.weapon < 16) { + damage = (damage * (sd->atk_rate + sd->weapon_atk_rate[sd->status.weapon]))/100; + damage2 = (damage2 * (sd->atk_rate + sd->weapon_atk_rate[sd->status.weapon]))/100; + } } if(sd->state.arrow_atk) damage += sd->arrow_atk; + + damage += damage * sd->crit_atk_rate / 100; + type = 0x0a; /* if(def1 < 1000000) { @@ -2322,6 +2331,8 @@ static struct Damage battle_calc_pc_weapon_attack( damage *= div_; damage2 *= div_; } + if (sd && skill_num > 0 && sd->skillatk[0] == skill_num) + damage += damage*sd->skillatk[1]/100; } if(da == 2) { //三段掌が発動しているか type = 0x08; @@ -2815,37 +2826,45 @@ struct Damage battle_calc_weapon_attack( memset(&wd,0,sizeof(wd)); if(battle_config.equipment_breaking && src->type==BL_PC && (wd.damage > 0 || wd.damage2 > 0)) { - struct map_session_data *sd=(struct map_session_data *)src; - int breakrate = 1; //0.01% weapon breaking chance [DracoRPG] - - if(sd->status.weapon && sd->status.weapon != 11) { - if(sd->sc_data[SC_MELTDOWN].timer!=-1) { - int breakrate_; // separate breaking rates for meltdown [Celest] - breakrate_ = 100*sd->sc_data[SC_MELTDOWN].val1; - if(rand()%10000 < breakrate_*battle_config.equipment_break_rate/100 || breakrate_ >= 10000) { - if (target->type == BL_PC) - pc_breakweapon((struct map_session_data *)target); - else - status_change_start(target,SC_STRIPWEAPON,1,75,0,0,skill_get_time2(WS_MELTDOWN,1),0 ); - } - - breakrate_ = 70*sd->sc_data[SC_MELTDOWN].val1; - if (rand()%10000 < breakrate_*battle_config.equipment_break_rate/100 || breakrate_ >= 10000) { - if (target->type == BL_PC) - pc_breakarmor((struct map_session_data *)target); - else - status_change_start(target,SC_STRIPSHIELD,1,75,0,0,skill_get_time2(WS_MELTDOWN,1),0 ); - } + struct map_session_data *sd = (struct map_session_data *)src; + // weapon = 0, armor = 1 + int breakrate = 1; //0.01% default self weapon breaking chance [DracoRPG] + int breakrate_[2] = {0,0}; //enemy breaking chance [celest] + int breaktime = 5000; + + breakrate_[0] += sd->break_weapon_rate; + breakrate_[1] += sd->break_armor_rate; + + if (sd->sc_count) { + if (sd->sc_data[SC_MELTDOWN].timer!=-1) { + breakrate_[0] += 100*sd->sc_data[SC_MELTDOWN].val1; + breakrate_[1] = 70*sd->sc_data[SC_MELTDOWN].val1; + breaktime = skill_get_time2(WS_MELTDOWN,1); } if(sd->sc_data[SC_OVERTHRUST].timer!=-1) - breakrate += 10; //+ 0.1% whatever skill level you use [DracoRPG] + breakrate += 10; + } - //if(wd.type==0x0a) //removed! because CRITS don't affect on breaking chance [Lupus] - // breakrate*=2; - if(rand()%10000 < breakrate*battle_config.equipment_break_rate/100 || breakrate >= 10000) { - if(pc_breakweapon(sd)==1) + if(sd->status.weapon && sd->status.weapon != 11) { + if(rand() % 10000 < breakrate * battle_config.equipment_break_rate / 100 || breakrate >= 10000) + if (pc_breakweapon(sd) == 1) wd = battle_calc_pc_weapon_attack(src,target,skill_num,skill_lv,wflag); - } + } + if(rand() % 10000 < breakrate_[0] * battle_config.equipment_break_rate / 100 || breakrate_[0] >= 10000) { + if (target->type == BL_PC) { + struct map_session_data *tsd = (struct map_session_data *)target; + if(tsd->status.weapon != 11) + pc_breakweapon(tsd); + } else + status_change_start(target,SC_STRIPWEAPON,1,75,0,0,breaktime,0); + } + if(rand() % 10000 < breakrate_[1] * battle_config.equipment_break_rate/100 || breakrate_[1] >= 10000) { + if (target->type == BL_PC) { + struct map_session_data *tsd = (struct map_session_data *)target; + if(tsd->status.weapon != 11) + pc_breakarmor(tsd); + } else + status_change_start(target,SC_STRIPSHIELD,1,75,0,0,breaktime,0); } } @@ -3084,6 +3103,8 @@ struct Damage battle_calc_magic_attack( } } damage=damage*cardfix/100; + if (skill_num > 0 && sd->skillatk[0] == skill_num) + damage += damage*sd->skillatk[1]/100; } if( tsd ){ @@ -3283,6 +3304,9 @@ struct Damage battle_calc_misc_attack( cardfix=cardfix*(100-tsd->misc_def_rate)/100; damage=damage*cardfix/100; } + if (sd && skill_num > 0 && sd->skillatk[0] == skill_num) + damage += damage*sd->skillatk[1]/100; + if(damage < 0) damage = 0; damage=battle_attr_fix(damage, ele, status_get_element(target) ); // 属性修正 } @@ -3517,7 +3541,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, } } if(sd) { - if(sd->autospell_id > 0 && sd->autospell_lv > 0 && rand()%100 < sd->autospell_rate) { + if(sd->autospell_id > 0 && rand()%100 < sd->autospell_rate) { int skilllv=sd->autospell_lv,i,f=0,sp; i = rand()%100; if(i >= 50) skilllv -= 2; @@ -3564,6 +3588,36 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, if (hp || sp) pc_heal(sd, hp, sp); } } + if (target->type == BL_PC) { + struct map_session_data *tsd = (struct map_session_data *)target; + if(tsd->autospell2_id > 0 && rand()%100 < tsd->autospell2_rate) { + int skilllv = tsd->autospell_lv,i,f=0,sp; + i = rand()%100; + if(i >= 50) skilllv -= 2; + else if(i >= 15) skilllv--; + if(skilllv < 1) skilllv = 1; + sp = skill_get_sp(tsd->autospell2_id,skilllv)*2/3; + if(tsd->status.sp >= sp) { + if((i=skill_get_inf(tsd->autospell2_id) == 2) || i == 32) + f = skill_castend_pos2(target,src->x,src->y,tsd->autospell2_id,skilllv,tick,flag); + else { + switch( skill_get_nk(tsd->autospell2_id) ) { + case 0: case 2: + f = skill_castend_damage_id(target,src,tsd->autospell2_id,skilllv,tick,flag); + break; + case 1:/* 支援系 */ + if((tsd->autospell2_id==AL_HEAL || (tsd->autospell2_id==ALL_RESURRECTION && src->type != BL_PC)) && + battle_check_undead(status_get_race(src),status_get_elem_type(src))) + f = skill_castend_damage_id(target,src,tsd->autospell2_id,skilllv,tick,flag); + else + f = skill_castend_nodamage_id(target,src,tsd->autospell2_id,skilllv,tick,flag); + break; + } + } + if(!f) pc_heal(tsd,0,-sp); + } + } + } if(rdamage > 0) battle_damage(target,src,rdamage,0); diff --git a/src/map/map.c b/src/map/map.c index f47d705c1..ee597789c 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1426,9 +1426,10 @@ int map_quit(struct map_session_data *sd) { if (sd->state.event_disconnect) { struct npc_data *npc; - if ((npc = npc_name2id("PCLogoutEvent"))) { + if ((npc = npc_name2id(script_config.logout_event_name))) { run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCLogoutNPC - ShowStatus("Event '"CL_WHITE"PCLogoutEvent"CL_RESET"' executed.\n"); + sprintf (tmp_output, "Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.logout_event_name); + ShowStatus(tmp_output); } } diff --git a/src/map/map.h b/src/map/map.h index ef104680b..4c5dbb15e 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -275,15 +275,17 @@ struct map_session_data { int weapon_coma_ele[10],weapon_coma_race[12]; int break_weapon_rate,break_armor_rate; short add_steal_rate; - //--- 02/15's new card effectds [celest] + //--- 02/15's new card effects [celest] int crit_atk_rate; - int critaddrace[12],critaddrace_[12],arrow_critaddrace[12]; + int critaddrace[12]; int no_regen; - int addeff3[10], arrow_addeff3[10]; + int addeff3[10]; short autospell2_id,autospell2_lv,autospell2_rate; int skillatk[2]; unsigned short unstripable_equip; - int addmob[2],submob[2],addbymob[2]; + short add_damage_classid2[10]; + int add_damage_classrate2[10]; + int add_damage_class_count2; short spiritball, spiritball_old; int spirit_timer[MAX_SKILL_LEVEL]; @@ -625,7 +627,7 @@ enum { SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017 SP_SKILL_ATK, SP_UNSTRIPABLE, // 2018-2019 - SP_ADDMOB, SP_SUBMOB, SP_ADDBYMOB // 2020-2022 + SP_ADD_DAMAGE_BY_CLASS // 2020-2022 }; enum { diff --git a/src/map/pc.c b/src/map/pc.c index 8cfebbaf2..c8ab8fae4 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -808,9 +808,16 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars sd->die_counter = pc_readglobalreg(sd,"PC_DIE_COUNTER"); // Automated script events - sd->state.event_death = pc_readglobalreg(sd,"PCDieEvent"); - sd->state.event_kill = pc_readglobalreg(sd,"PCKillEvent"); - sd->state.event_disconnect = pc_readglobalreg(sd,"PCLogoffEvent"); + if (script_config.event_requires_trigger) { + sd->state.event_death = pc_readglobalreg(sd,"PCDieEvent"); + sd->state.event_kill = pc_readglobalreg(sd,"PCKillEvent"); + sd->state.event_disconnect = pc_readglobalreg(sd,"PCLogoffEvent"); + // if script triggers are not required + } else { + sd->state.event_death = 1; + sd->state.event_kill = 1; + sd->state.event_disconnect = 1; + } if (night_flag == 1 && !map[sd->bl.m].flag.indoors) { char tmpstr[1024]; @@ -835,9 +842,10 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars { struct npc_data *npc; //printf("pc: OnPCLogin event done. (%d events)\n", npc_event_doall("OnPCLogin") ); - if ((npc = npc_name2id("PCLoginEvent"))) { + if ((npc = npc_name2id(script_config.login_event_name))) { run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCLoginNPC - ShowStatus("Event '"CL_WHITE"PCLoginEvent"CL_RESET"' executed.\n"); + sprintf (tmp_output, "Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.login_event_name); + ShowStatus(tmp_output); } } // Send friends list @@ -1539,10 +1547,34 @@ int pc_bonus(struct map_session_data *sd,int type,int val) if(sd->status.weapon == 11 && sd->state.lr_flag != 2) sd->atk_rate += val; break; + case SP_BREAK_WEAPON_RATE: + if(sd->state.lr_flag != 2) + sd->break_weapon_rate+=val; + break; + case SP_BREAK_ARMOR_RATE: + if(sd->state.lr_flag != 2) + sd->break_armor_rate+=val; + break; + case SP_ADD_STEAL_RATE: + if(sd->state.lr_flag != 2) + sd->add_steal_rate+=val; + break; case SP_DELAYRATE: if(sd->state.lr_flag != 2) sd->delayrate+=val; break; + case SP_CRIT_ATK_RATE: + if(sd->state.lr_flag != 2) + sd->crit_atk_rate += val; + break; + case SP_NO_REGEN: + if(sd->state.lr_flag != 2) + sd->no_regen = val; + break; + case SP_UNSTRIPABLE: + if(sd->state.lr_flag != 2) + sd->unstripable_equip |= EQP_ARMOR; + break; default: if(battle_config.error_log) printf("pc_bonus: unknown type %d %d !\n",type,val); @@ -1758,6 +1790,39 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) if(sd->state.lr_flag != 2) sd->weapon_atk_rate[type2]+=val; break; + case SP_CRITICAL_ADDRACE: + if(sd->state.lr_flag != 2) + sd->critaddrace[type2]+=val; + break; + case SP_ADDEFF_WHENHIT: + if(sd->state.lr_flag != 2) + sd->addeff3[type2]+=val; + break; + case SP_SKILL_ATK: + if(sd->state.lr_flag != 2) { + if (sd->skillatk[0] == type2) + sd->skillatk[1] += val; + else { + sd->skillatk[0] = type2; + sd->skillatk[1] = val; + } + } + break; + case SP_ADD_DAMAGE_BY_CLASS: + if(sd->state.lr_flag != 2) { + for(i=0;iadd_damage_class_count2;i++) { + if(sd->add_damage_classid2[i] == type2) { + sd->add_damage_classrate2[i] += val; + break; + } + } + if(i >= sd->add_damage_class_count2 && sd->add_damage_class_count2 < 10) { + sd->add_damage_classid2[sd->add_damage_class_count2] = type2; + sd->add_damage_classrate2[sd->add_damage_class_count2] += val; + sd->add_damage_class_count2++; + } + } + break; default: if(battle_config.error_log) printf("pc_bonus2: unknown type %d %d %d!\n",type,type2,val); @@ -1795,6 +1860,13 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) sd->autospell_rate = val; } break; + case SP_AUTOSPELL_WHENHIT: + if(sd->state.lr_flag != 2){ + sd->autospell2_id = type2; + sd->autospell2_lv = type3; + sd->autospell2_rate = val; + } + break; default: if(battle_config.error_log) printf("pc_bonus3: unknown type %d %d %d %d!\n",type,type2,type3,val); @@ -2622,6 +2694,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl) if(itemid > 0 && itemdb_type(itemid) != 6) { rate = (mob_db[md->class_].dropitem[i].p / battle_config.item_rate_common * 100 * skill)/100; + rate += sd->add_steal_rate; if(rand()%10000 < rate) { @@ -4467,25 +4540,27 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage) clif_updatestatus(sd,SP_HP); status_calc_pc(sd,0); - if (sd->state.event_death) { - struct npc_data *npc; - if ((npc = npc_name2id("PCDeathEvent"))) { - run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCDeathNPC - ShowStatus("Event '"CL_WHITE"PCDeathEvent"CL_RESET"' executed.\n"); - } - } - if (src && src->type == BL_PC) { + if (sd->state.event_death) + pc_setglobalreg(sd,"killerrid",((struct map_session_data *)src)->status.account_id); + if (((struct map_session_data *)src)->state.event_kill) { struct npc_data *npc; - if ((npc = npc_name2id("PCKillEvent"))) { + if ((npc = npc_name2id(script_config.kill_event_name))) { run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCKillNPC - ShowStatus("Event '"CL_WHITE"PCKillEvent"CL_RESET"' executed.\n"); + sprintf (tmp_output, "Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.kill_event_name); + ShowStatus(tmp_output); } - } + } + } - if (sd->state.event_death) - pc_setglobalreg(sd,"killerrid",((struct map_session_data *)src)->status.account_id); + if (sd->state.event_death) { + struct npc_data *npc; + if ((npc = npc_name2id(script_config.die_event_name))) { + run_script(npc->u.scr.script,0,sd->bl.id,npc->bl.id); // PCDeathNPC + sprintf (tmp_output, "Event '"CL_WHITE"%s"CL_RESET"' executed.\n", script_config.die_event_name); + ShowStatus(tmp_output); + } } if(battle_config.bone_drop==2 @@ -6277,6 +6352,9 @@ static int pc_natural_heal_hp(struct map_session_data *sd) if (sd->sc_count && sd->sc_data[SC_TRICKDEAD].timer != -1) // Modified by RoVeRT return 0; + if (sd->no_regen & 1) + return 0; + if(pc_checkoverhp(sd)) { sd->hp_sub = sd->inchealhptick = 0; return 0; @@ -6376,6 +6454,9 @@ static int pc_natural_heal_sp(struct map_session_data *sd) sd->sc_data[SC_BERSERK].timer != -1)) return 0; + if (sd->no_regen & 2) + return 0; + if(pc_checkoversp(sd)) { sd->sp_sub = sd->inchealsptick = 0; return 0; diff --git a/src/map/script.c b/src/map/script.c index 6daa1340a..263aba6bc 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -7222,6 +7222,14 @@ int script_config_read(char *cfgName) script_config.check_cmdcount=8192; script_config.check_gotocount=512; + script_config.die_event_name = (char *)aCallocA(24,sizeof(char)); + script_config.kill_event_name = (char *)aCallocA(24,sizeof(char)); + script_config.login_event_name = (char *)aCallocA(24,sizeof(char)); + script_config.logout_event_name = (char *)aCallocA(24,sizeof(char)); + + script_config.event_script_type = 0; + script_config.event_requires_trigger = 1; + fp=fopen(cfgName,"r"); if(fp==NULL){ printf("file not found: %s\n",cfgName); @@ -7254,6 +7262,24 @@ int script_config_read(char *cfgName) else if(strcmpi(w1,"check_gotocount")==0) { script_config.check_gotocount = battle_config_switch(w2); } + else if(strcmpi(w1,"event_script_type")==0) { + script_config.event_script_type = battle_config_switch(w2); + } + else if(strcmpi(w1,"die_event_name")==0) { + strcpy(script_config.die_event_name, w2); + } + else if(strcmpi(w1,"kill_event_name")==0) { + strcpy(script_config.kill_event_name, w2); + } + else if(strcmpi(w1,"login_event_name")==0) { + strcpy(script_config.login_event_name, w2); + } + else if(strcmpi(w1,"logout_event_name")==0) { + strcpy(script_config.logout_event_name, w2); + } + else if(strcmpi(w1,"require_set_trigger")==0) { + script_config.event_requires_trigger = battle_config_switch(w2); + } else if(strcmpi(w1,"import")==0){ script_config_read(w2); } @@ -7302,10 +7328,19 @@ int do_final_script() if(userfunc_db) strdb_final(userfunc_db,userfunc_db_final); - if (str_data) - aFree(str_data); - if (str_buf) - aFree(str_buf); + if (str_data) + aFree(str_data); + if (str_buf) + aFree(str_buf); + + if (script_config.die_event_name) + aFree(script_config.die_event_name); + if (script_config.kill_event_name) + aFree(script_config.die_event_name); + if (script_config.login_event_name) + aFree(script_config.die_event_name); + if (script_config.logout_event_name) + aFree(script_config.die_event_name); return 0; } diff --git a/src/map/script.h b/src/map/script.h index eecc45e8f..759013e95 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -9,6 +9,13 @@ extern struct Script_Config { int warn_cmd_mismatch_paramnum; int check_cmdcount; int check_gotocount; + + int event_script_type; + char* die_event_name; + char* kill_event_name; + char* login_event_name; + char* logout_event_name; + int event_requires_trigger; } script_config; struct script_data { diff --git a/src/map/skill.c b/src/map/skill.c index 78849469c..e4b171636 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1050,7 +1050,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s diff = mhp*10/100; if (hp - diff < mhp>>2) diff = hp - (mhp>>2); - pc_heal((struct map_session_data *)bl, -hp, 0); + pc_heal(dstsd, -hp, 0); } else if(bl->type == BL_MOB) { struct mob_data *md = (struct mob_data *)bl; hp -= mhp*15/100; @@ -1287,59 +1287,89 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s break; } - if(sd && skillid != MC_CARTREVOLUTION && attack_type&BF_WEAPON){ /* カ?ドによる追加?果 */ + if((sd||dstsd) && skillid != MC_CARTREVOLUTION && attack_type&BF_WEAPON){ /* カ?ドによる追加?果 */ int i; int sc_def_card=100; for(i=SC_STONE;i<=SC_BLIND;i++){ //?象に?態異常 - if(i==SC_STONE || i==SC_FREEZE) - sc_def_card=sc_def_mdef; - else if(i==SC_STAN || i==SC_POISON || i==SC_SILENCE) - sc_def_card=sc_def_vit; - else if(i==SC_SLEEP || i==SC_CONFUSION || i==SC_BLIND) - sc_def_card=sc_def_int; - else if(i==SC_CURSE) - sc_def_card=sc_def_luk; - - if(!sd->state.arrow_atk) { - if(rand()%10000 < (sd->addeff[i-SC_STONE])*sc_def_card/100 ){ - if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]); - status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); - } + switch (i) { + case SC_STONE: + case SC_FREEZE: + sc_def_card=sc_def_mdef; + break; + case SC_STAN: + case SC_POISON: + case SC_SILENCE: + sc_def_card=sc_def_vit; + break; + case SC_SLEEP: + case SC_CONFUSION: + case SC_BLIND: + sc_def_card=sc_def_int; + break; + case SC_CURSE: + sc_def_card=sc_def_luk; } - else { - if(rand()%10000 < (sd->addeff[i-SC_STONE]+sd->arrow_addeff[i-SC_STONE])*sc_def_card/100 ){ - if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]); - status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + + if (sd) { + if(!sd->state.arrow_atk) { + if(rand()%10000 < (sd->addeff[i-SC_STONE])*sc_def_card/100 ){ + if(battle_config.battle_log) + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]); + status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + } + } + else { + if(rand()%10000 < (sd->addeff[i-SC_STONE]+sd->arrow_addeff[i-SC_STONE])*sc_def_card/100 ){ + if(battle_config.battle_log) + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]); + status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + } } } //自分に?態異常 - if(i==SC_STONE || i==SC_FREEZE) - sc_def_card=sc_def_mdef2; - else if(i==SC_STAN || i==SC_POISON || i==SC_SILENCE) - sc_def_card=sc_def_vit2; - else if(i==SC_SLEEP || i==SC_CONFUSION || i==SC_BLIND) - sc_def_card=sc_def_int2; - else if(i==SC_CURSE) - sc_def_card=sc_def_luk2; - - if(!sd->state.arrow_atk) { - if(rand()%10000 < (sd->addeff2[i-SC_STONE])*sc_def_card/100 ){ - if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]); - status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); - } + switch (i) { + case SC_STONE: + case SC_FREEZE: + sc_def_card=sc_def_mdef2; + break; + case SC_STAN: + case SC_POISON: + case SC_SILENCE: + sc_def_card=sc_def_vit2; + break; + case SC_SLEEP: + case SC_CONFUSION: + case SC_BLIND: + sc_def_card=sc_def_int2; + break; + case SC_CURSE: + sc_def_card=sc_def_luk2; } - else { - if(rand()%10000 < (sd->addeff2[i-SC_STONE]+sd->arrow_addeff2[i-SC_STONE])*sc_def_card/100 ){ - if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]); - status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + + if (sd) { + if(!sd->state.arrow_atk) { + if(rand()%10000 < (sd->addeff2[i-SC_STONE])*sc_def_card/100 ){ + if(battle_config.battle_log) + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]); + status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + } + } + else { + if(rand()%10000 < (sd->addeff2[i-SC_STONE]+sd->arrow_addeff2[i-SC_STONE])*sc_def_card/100 ){ + if(battle_config.battle_log) + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]); + status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + } } } + if (dstsd && + rand()%10000 < dstsd->addeff3[i-SC_STONE]*sc_def_card/100){ + if(battle_config.battle_log) + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,dstsd->addeff3[i-SC_STONE]); + status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + } } } return 0; @@ -3952,6 +3982,8 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int if (tsc_data && tsc_data[scid].timer != -1) break; + if (dstsd && dstsd->unstripable_equip & equip) + break; strip_fix = status_get_dex(src) - status_get_dex(bl); if(strip_fix < 0) diff --git a/src/map/status.c b/src/map/status.c index a98fd9559..d6a8b1a22 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -252,6 +252,30 @@ int status_calc_pc(struct map_session_data* sd,int first) sd->hp_drain_value = sd->hp_drain_value_ = sd->sp_drain_value = sd->sp_drain_value_ = 0; sd->unbreakable_equip = 0; + sd->break_weapon_rate = sd->break_armor_rate = 0; + sd->add_steal_rate = 0; + sd->crit_atk_rate = 0; + sd->no_regen = 0; + sd->unstripable_equip = 0; + sd->autospell2_id = sd->autospell2_lv = sd->autospell2_rate = 0; + memset(sd->critaddrace,0,sizeof(sd->critaddrace)); + memset(sd->addeff3,0,sizeof(sd->addeff3)); + memset(sd->skillatk,0,sizeof(sd->skillatk)); + sd->add_damage_class_count = sd->add_damage_class_count_ = sd->add_magic_damage_class_count = 0; + sd->add_def_class_count = sd->add_mdef_class_count = 0; + sd->add_damage_class_count2 = 0; + memset(sd->add_damage_classid,0,sizeof(sd->add_damage_classid)); + memset(sd->add_damage_classid_,0,sizeof(sd->add_damage_classid_)); + memset(sd->add_magic_damage_classid,0,sizeof(sd->add_magic_damage_classid)); + memset(sd->add_damage_classrate,0,sizeof(sd->add_damage_classrate)); + memset(sd->add_damage_classrate_,0,sizeof(sd->add_damage_classrate_)); + memset(sd->add_magic_damage_classrate,0,sizeof(sd->add_magic_damage_classrate)); + memset(sd->add_def_classid,0,sizeof(sd->add_def_classid)); + memset(sd->add_def_classrate,0,sizeof(sd->add_def_classrate)); + memset(sd->add_mdef_classid,0,sizeof(sd->add_mdef_classid)); + memset(sd->add_mdef_classrate,0,sizeof(sd->add_mdef_classrate)); + memset(sd->add_damage_classid2,0,sizeof(sd->add_damage_classid2)); + memset(sd->add_damage_classrate2,0,sizeof(sd->add_damage_classrate2)); if(!sd->disguiseflag && sd->disguise) { sd->disguise=0; -- cgit v1.2.3-70-g09d2 From d704f26907c104336bc47fde4e27448dcfa38444 Mon Sep 17 00:00:00 2001 From: celest Date: Wed, 16 Feb 2005 12:46:21 +0000 Subject: Added 3 more of the new card effects git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1117 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 8 ++++-- db/const.txt | 9 ++++-- doc/item_bonus.txt | 7 ++++- src/map/battle.c | 28 ++++++++++++++---- src/map/map.h | 15 ++++++---- src/map/mob.c | 25 +++++++++------- src/map/pc.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++----- src/map/pc.h | 1 + src/map/script.c | 18 ++++++++++++ src/map/status.c | 3 ++ 10 files changed, 162 insertions(+), 35 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index bbbe894e7..8b48759d4 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,6 +1,10 @@ Date Added 02/16 + * Added 3 more of the new card effects -- check item_bonus.txt [celest] + + * Added 'bonus4' to support the new card effects that might need up to 4 + parameters [celest] * Set 'killerrid' and do PCKillEvent before calling PCDieEvent, thanks to mrmagoo for pointing it out [celest] @@ -11,12 +15,12 @@ Date Added - event_requires_trigger: whether or not a 'set [EventName],1;' has to be defined first for the event to be activated - * Added 10 of the new card effects on the 2/15's patch (still untested and + * Added 8 of the new card effects on the 2/15's patch (still untested and not yet added to the item_db) - Refer to doc/item_bonus.txt for description * Minor rewrites on self and enemy weapon/armor breaking during battle [celest] - * Added missing code for 'bBreakWeaponRate' and 'bBreakWeaponRate' effects + * Added missing code for 'bBreakWeaponRate' and 'bBreakArmorRate' effects [celest] * Added missing code for 'bAddStealRate' effect [celest] * Removed redundant 'infinite_autospell' in map_session_data [celest] diff --git a/db/const.txt b/db/const.txt index e8cd07893..a2f199c0b 100644 --- a/db/const.txt +++ b/db/const.txt @@ -242,6 +242,9 @@ bAutoSpellWhenHit 2017 bSkillAtk 2018 bUnstripable 2019 bAddDamageByClass 2020 +bSPGainValue 2021 +bIgnoreDefMob 2022 +bHPLossRate 2023 Eff_Stone 0 @@ -253,6 +256,7 @@ Eff_Curse 5 Eff_Silence 6 Eff_Confusion 7 Eff_Blind 8 +Eff_Bleeding 9 SC_Stone 128 SC_Freeze 129 @@ -263,6 +267,7 @@ SC_Curse 133 SC_Silence 134 SC_Confusion 135 SC_Blind 136 +SC_Bleeding 137 SC_SpeedPot0 37 SC_SpeedPot1 38 SC_SpeedPot2 39 @@ -275,6 +280,4 @@ SC_Holy 17 SC_Flame 90 SC_Frost 91 SC_Lightning 92 -SC_Seismic 93 -SC_Bleeding 124 -SC_BlockSkill 194 +SC_Seismic 93 \ No newline at end of file diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 818a1980f..476c8ff6d 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -144,9 +144,14 @@ bonus bCritAtkRate,n; Increase critical damage by +n% bonus bNoRegen,n; Stops regeneration for n. n: 1=HP, 2=SP bonus bUnstripable,n; Armor cannot be taken off via Strip skills +bonus bSPGainValue,n; When killing a monster by physical attack + gain n amount of sp +bonus bIgnoreDefMob,n; Ignore monster's DEF when attacking. + n:0=All normal monsters, except Bosses + 1=All monsters bonus2 bCriticalAddRace,n,x; Increase critical + n vs. enemies of type x - +bonus2 bHPLossRate,n,x; Lose n amount of hp every x amount of time bonus2 bAddEffWhenHit,n,x; n% chance to cause x state to the enemy when being hit by physical close range damage bonus2 bSkillAtk,n,x; Increase damage of skill n by x% diff --git a/src/map/battle.c b/src/map/battle.c index 35b1d2737..634b04a70 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2365,6 +2365,19 @@ static struct Damage battle_calc_pc_weapon_attack( } t_def = def2*8/10; vitbonusmax = (t_vit/20)*(t_vit/20)-1; + if (tmd) { + if(t_mode & 0x20) { + if(sd->ignore_def_mob & 2) + idef_flag = 1; + if(sd->ignore_def_mob_ & 2) + idef_flag_ = 1; + } else { + if(sd->ignore_def_mob & 1) + idef_flag = 1; + if(sd->ignore_def_mob_ & 1) + idef_flag_ = 1; + } + } if(sd->ignore_def_ele & (1<ignore_def_race & (1<ignore_def_ele_ & (1<ignore_def_race_ & (1<autospell2_id,skilllv)*2/3; if(tsd->status.sp >= sp) { + struct block_list *tbl; + if (tsd->autospell2_type == 0) tbl = target; + else tbl = src; if((i=skill_get_inf(tsd->autospell2_id) == 2) || i == 32) - f = skill_castend_pos2(target,src->x,src->y,tsd->autospell2_id,skilllv,tick,flag); + f = skill_castend_pos2(target,tbl->x,tbl->y,tsd->autospell2_id,skilllv,tick,flag); else { switch( skill_get_nk(tsd->autospell2_id) ) { case 0: case 2: - f = skill_castend_damage_id(target,src,tsd->autospell2_id,skilllv,tick,flag); + f = skill_castend_damage_id(target,tbl,tsd->autospell2_id,skilllv,tick,flag); break; case 1:/* 支援系 */ - if((tsd->autospell2_id==AL_HEAL || (tsd->autospell2_id==ALL_RESURRECTION && src->type != BL_PC)) && - battle_check_undead(status_get_race(src),status_get_elem_type(src))) - f = skill_castend_damage_id(target,src,tsd->autospell2_id,skilllv,tick,flag); + if((tsd->autospell2_id==AL_HEAL || (tsd->autospell2_id==ALL_RESURRECTION && tbl->type != BL_PC)) && + battle_check_undead(status_get_race(tbl),status_get_elem_type(tbl))) + f = skill_castend_damage_id(target,tbl,tsd->autospell2_id,skilllv,tick,flag); else - f = skill_castend_nodamage_id(target,src,tsd->autospell2_id,skilllv,tick,flag); + f = skill_castend_nodamage_id(target,tbl,tsd->autospell2_id,skilllv,tick,flag); break; } } diff --git a/src/map/map.h b/src/map/map.h index 4c5dbb15e..d4cd5084e 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -278,14 +278,17 @@ struct map_session_data { //--- 02/15's new card effects [celest] int crit_atk_rate; int critaddrace[12]; - int no_regen; + short no_regen; int addeff3[10]; - short autospell2_id,autospell2_lv,autospell2_rate; + short autospell2_id,autospell2_lv,autospell2_rate,autospell2_type; int skillatk[2]; unsigned short unstripable_equip; - short add_damage_classid2[10]; + short add_damage_classid2[10],add_damage_class_count2; int add_damage_classrate2[10]; - int add_damage_class_count2; + short sp_gain_value; + short ignore_def_mob, ignore_def_mob_; + int hp_loss_tick, hp_loss_rate; + short hp_loss_value, hp_loss_type; short spiritball, spiritball_old; int spirit_timer[MAX_SKILL_LEVEL]; @@ -626,8 +629,8 @@ enum { SP_UNBREAKABLE_SHIELD, SP_LONG_ATK_RATE, // 2011-2012 SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017 - SP_SKILL_ATK, SP_UNSTRIPABLE, // 2018-2019 - SP_ADD_DAMAGE_BY_CLASS // 2020-2022 + SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020 + SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE // 2021-2023 }; enum { diff --git a/src/map/mob.c b/src/map/mob.c index 15f06f940..b32db9966 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2164,8 +2164,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) struct item item; int ret; int drop_rate; - int skill,sp; - + nullpo_retr(0, md); //srcはNULLで呼ばれる場合もあるので、他でチェック max_hp = status_get_max_hp(&md->bl); @@ -2384,14 +2383,20 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) if(src && src->type == BL_MOB) mob_unlocktarget((struct mob_data *)src,tick); - /* ソウルドレイン */ - if(sd && sd->state.attack_type == BF_MAGIC && (skill=pc_checkskill(sd,HW_SOULDRAIN))>0){ - clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,skill,1); - sp = (status_get_lv(&md->bl))*(65+15*skill)/100; - if(sd->status.sp + sp > sd->status.max_sp) - sp = sd->status.max_sp - sd->status.sp; - sd->status.sp += sp; - clif_heal(sd->fd,SP_SP,sp); + + if(sd) { + int sp = 0; + if (sd->state.attack_type == BF_MAGIC && (i=pc_checkskill(sd,HW_SOULDRAIN))>0){ /* ソウルドレイン */ + clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,i,1); + sp += (status_get_lv(&md->bl))*(65+15*i)/100; + } + sp += sd->sp_gain_value; + if (sp > 0) { + if(sd->status.sp + sp > sd->status.max_sp) + sp = sd->status.max_sp - sd->status.sp; + sd->status.sp += sp; + clif_heal(sd->fd,SP_SP,sp); + } } // map外に消えた人は計算から除くので diff --git a/src/map/pc.c b/src/map/pc.c index c8ab8fae4..78d7102b8 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1575,6 +1575,16 @@ int pc_bonus(struct map_session_data *sd,int type,int val) if(sd->state.lr_flag != 2) sd->unstripable_equip |= EQP_ARMOR; break; + case SP_SP_GAIN_VALUE: + if(!sd->state.lr_flag) + sd->sp_gain_value += val; + break; + case SP_IGNORE_DEF_MOB: // 0:normal monsters only, 1:affects boss monsters as well + if(!sd->state.lr_flag) + sd->ignore_def_mob |= 1<state.lr_flag == 1) + sd->ignore_def_mob_ |= 1<state.lr_flag != 2) { + sd->hp_loss_value = type2; + sd->hp_loss_rate = val; + } + break; + default: if(battle_config.error_log) printf("pc_bonus2: unknown type %d %d %d!\n",type,type2,val); @@ -1865,6 +1882,7 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) sd->autospell2_id = type2; sd->autospell2_lv = type3; sd->autospell2_rate = val; + sd->autospell2_type = 1; // enemy } break; default: @@ -1876,6 +1894,26 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) return 0; } +int pc_bonus4(struct map_session_data *sd,int type,int type2,int type3,int type4,int val) +{ + switch(type){ + case SP_AUTOSPELL_WHENHIT: + if(sd->state.lr_flag != 2){ + sd->autospell2_id = type2; + sd->autospell2_lv = type3; + sd->autospell2_rate = type4; + sd->autospell2_type = val; // 0: self, 1: enemy + } + break; + default: + if(battle_config.error_log) + printf("pc_bonus4: unknown type %d %d %d %d %d!\n",type,type2,type3,type4,val); + break; + } + + return 0; +} + /*========================================== * スクリプトによるスキル所得 *------------------------------------------ @@ -6513,7 +6551,7 @@ static int pc_natural_heal_sp(struct map_session_data *sd) return 0; } -static int pc_spirit_heal_hp(struct map_session_data *sd,int level) +static int pc_spirit_heal_hp(struct map_session_data *sd) { int bonus_hp,interval = battle_config.natural_heal_skill_interval; @@ -6553,7 +6591,7 @@ static int pc_spirit_heal_hp(struct map_session_data *sd,int level) return 0; } -static int pc_spirit_heal_sp(struct map_session_data *sd,int level) +static int pc_spirit_heal_sp(struct map_session_data *sd) { int bonus_sp,interval = battle_config.natural_heal_skill_interval; @@ -6594,6 +6632,30 @@ static int pc_spirit_heal_sp(struct map_session_data *sd,int level) return 0; } +static int pc_bleeding (struct map_session_data *sd) +{ + int interval, hp; + + nullpo_retr(0, sd); + interval = sd->hp_loss_rate; + hp = sd->hp_loss_value; + + sd->hp_loss_tick += natural_heal_diff_tick; + if(sd->hp_loss_tick >= interval) { + while(sd->hp_loss_tick >= interval) { + sd->hp_loss_tick -= interval; + if (sd->status.hp < hp) + hp = sd->status.hp; + if (sd->hp_loss_type == 0) { + pc_heal(sd,-hp,0); + } else if (sd->hp_loss_type == 1) { + } + sd->hp_loss_tick = 0; + } + } + return 0; +} + /*========================================== * HP/SP 自然回復 各クライアント *------------------------------------------ @@ -6601,15 +6663,17 @@ static int pc_spirit_heal_sp(struct map_session_data *sd,int level) static int pc_natural_heal_sub(struct map_session_data *sd,va_list ap) { int skill; + int tick; nullpo_retr(0, sd); + tick = va_arg(ap,int); // -- moonsoul (if conditions below altered to disallow natural healing if under berserk status) if ((battle_config.natural_heal_weight_rate > 100 || sd->weight*100/sd->max_weight < battle_config.natural_heal_weight_rate) && !pc_isdead(sd) && !pc_ishiding(sd) && //-- cannot regen for 5 minutes after using Berserk --- [Celest] - DIFF_TICK (gettick(), sd->canregen_tick)>=0 && + DIFF_TICK (tick, sd->canregen_tick)>=0 && (sd->sc_data && !(sd->sc_data[SC_POISON].timer != -1 && sd->sc_data[SC_SLOWPOISON].timer == -1) && sd->sc_data[SC_BERSERK].timer == -1 )) { pc_natural_heal_hp(sd); @@ -6617,20 +6681,25 @@ static int pc_natural_heal_sub(struct map_session_data *sd,va_list ap) { sd->sc_data[SC_DANCING].timer == -1 && //ダンス?態ではSPが回復しない sd->sc_data[SC_BERSERK].timer == -1 ) //バ?サ?ク?態ではSPが回復しない pc_natural_heal_sp(sd); - sd->canregen_tick = gettick(); + sd->canregen_tick = tick; } else { sd->hp_sub = sd->inchealhptick = 0; sd->sp_sub = sd->inchealsptick = 0; } if((skill = pc_checkskill(sd,MO_SPIRITSRECOVERY)) > 0 && !pc_ishiding(sd) && sd->sc_data[SC_POISON].timer == -1 && sd->sc_data[SC_BERSERK].timer == -1){ - pc_spirit_heal_hp(sd,skill); - pc_spirit_heal_sp(sd,skill); + pc_spirit_heal_hp(sd); + pc_spirit_heal_sp(sd); } else { sd->inchealspirithptick = 0; sd->inchealspiritsptick = 0; } + if (sd->hp_loss_value > 0) + pc_bleeding(sd); + else + sd->hp_loss_tick = 0; + return 0; } @@ -6642,7 +6711,7 @@ int pc_natural_heal(int tid,unsigned int tick,int id,int data) { natural_heal_tick = tick; natural_heal_diff_tick = DIFF_TICK(natural_heal_tick,natural_heal_prev_tick); - clif_foreachclient(pc_natural_heal_sub); + clif_foreachclient(pc_natural_heal_sub, tick); natural_heal_prev_tick = tick; return 0; diff --git a/src/map/pc.h b/src/map/pc.h index 067c3af81..f7fd924fd 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -89,6 +89,7 @@ int pc_checkweighticon(struct map_session_data *sd); int pc_bonus(struct map_session_data*,int,int); int pc_bonus2(struct map_session_data *sd,int,int,int); int pc_bonus3(struct map_session_data *sd,int,int,int,int); +int pc_bonus4(struct map_session_data *sd,int,int,int,int,int); int pc_skill(struct map_session_data*,int,int,int); void pc_blockskill_start (struct map_session_data*,int,int); // [celest] diff --git a/src/map/script.c b/src/map/script.c index 263aba6bc..ce70b29c3 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -150,6 +150,7 @@ int buildin_statusup2(struct script_state *st); int buildin_bonus(struct script_state *st); int buildin_bonus2(struct script_state *st); int buildin_bonus3(struct script_state *st); +int buildin_bonus4(struct script_state *st); int buildin_skill(struct script_state *st); int buildin_addtoskill(struct script_state *st); // [Valaris] int buildin_guildskill(struct script_state *st); @@ -373,6 +374,7 @@ struct { {buildin_bonus,"bonus","ii"}, {buildin_bonus2,"bonus2","iii"}, {buildin_bonus3,"bonus3","iiii"}, + {buildin_bonus4,"bonus4","iiiii"}, {buildin_skill,"skill","ii*"}, {buildin_addtoskill,"addtoskill","ii*"}, // [Valaris] {buildin_guildskill,"guildskill","ii"}, @@ -3185,6 +3187,22 @@ int buildin_bonus3(struct script_state *st) return 0; } + +int buildin_bonus4(struct script_state *st) +{ + int type,type2,type3,type4,val; + struct map_session_data *sd; + + type=conv_num(st,& (st->stack->stack_data[st->start+2])); + type2=conv_num(st,& (st->stack->stack_data[st->start+3])); + type3=conv_num(st,& (st->stack->stack_data[st->start+4])); + type4=conv_num(st,& (st->stack->stack_data[st->start+5])); + val=conv_num(st,& (st->stack->stack_data[st->start+6])); + sd=script_rid2sd(st); + pc_bonus4(sd,type,type2,type3,type4,val); + + return 0; +} /*========================================== * スキル所得 *------------------------------------------ diff --git a/src/map/status.c b/src/map/status.c index d6a8b1a22..55f4326f9 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -276,6 +276,9 @@ int status_calc_pc(struct map_session_data* sd,int first) memset(sd->add_mdef_classrate,0,sizeof(sd->add_mdef_classrate)); memset(sd->add_damage_classid2,0,sizeof(sd->add_damage_classid2)); memset(sd->add_damage_classrate2,0,sizeof(sd->add_damage_classrate2)); + sd->sp_gain_value = 0; + sd->ignore_def_mob = sd->ignore_def_mob_ = 0; + sd->hp_loss_rate = sd->hp_loss_value = sd->hp_loss_type = 0; if(!sd->disguiseflag && sd->disguise) { sd->disguise=0; -- cgit v1.2.3-70-g09d2 From d8465064129398f9c6010eacc835bca139977704 Mon Sep 17 00:00:00 2001 From: celest Date: Wed, 16 Feb 2005 13:32:38 +0000 Subject: Some updates git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1120 54d463be-8e91-2dee-dedb-b68131a5f0ec --- doc/item_bonus.txt | 6 ++++++ src/map/pc.c | 13 ++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'doc') diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 476c8ff6d..fedf6b37e 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -158,5 +158,11 @@ bonus2 bSkillAtk,n,x; Increase damage of skill n by x% bonus2 bAddDamageByClass,n,x; When being hit by monster of class n increase damage taken by x% +bonus3 bHPLossRate,n,x,y; Lose n amount of hp every x amount of time + y:0=Don't show damage 1=Show damage bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when being hit by physical close range damage + +bonus4 bAutoSpellWhenHit,x,y,n,i; n% chance to cast skill x of level y when + being hit by physical close range damage + i:0=cast on self 1=cast on enemy \ No newline at end of file diff --git a/src/map/pc.c b/src/map/pc.c index 78d7102b8..3d40da95a 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1885,6 +1885,13 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) sd->autospell2_type = 1; // enemy } break; + case SP_HP_LOSS_RATE: + if(sd->state.lr_flag != 2) { + sd->hp_loss_value = type2; + sd->hp_loss_rate = type3; + sd->hp_loss_type = val; + } + break; default: if(battle_config.error_log) printf("pc_bonus3: unknown type %d %d %d %d!\n",type,type2,type3,val); @@ -6646,10 +6653,10 @@ static int pc_bleeding (struct map_session_data *sd) sd->hp_loss_tick -= interval; if (sd->status.hp < hp) hp = sd->status.hp; - if (sd->hp_loss_type == 0) { - pc_heal(sd,-hp,0); - } else if (sd->hp_loss_type == 1) { + if (sd->hp_loss_type == 1) { + clif_damage(&sd->bl,&sd->bl,gettick(),0,0,hp,0,0,0); } + pc_heal(sd,-hp,0); sd->hp_loss_tick = 0; } } -- cgit v1.2.3-70-g09d2 From aa52f1d90449e970bd5972db00ef29f77eaa39d7 Mon Sep 17 00:00:00 2001 From: celest Date: Fri, 18 Feb 2005 07:07:25 +0000 Subject: * Added bAddRace2 * Added mob_race2_db.txt * Updated description for backup_txt in char_athena.conf a bit * Added some suggestions by Poki#3 * Use the event names from script_athena.conf to check whenever a player event trigger is being read/set * Removed an unused save/bank.txt git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1131 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 11 +++++++++ conf-tmpl/battle_athena.conf | 4 ++-- conf-tmpl/char_athena.conf | 2 +- conf-tmpl/map_athena.conf | 4 ++-- db/Changelog.txt | 2 ++ db/const.txt | 1 + db/item_db.txt | 2 +- db/mob_race2_db.txt | 6 +++++ doc/item_bonus.txt | 2 ++ save-tmpl/bank.txt | 0 src/map/battle.c | 20 +++++++++++------ src/map/map.h | 3 ++- src/map/mob.c | 53 +++++++++++++++++++++++++++++++++++++++++++- src/map/mob.h | 2 ++ src/map/pc.c | 20 ++++++++++++----- src/map/status.c | 12 ++++++++++ src/map/status.h | 1 + 17 files changed, 124 insertions(+), 21 deletions(-) create mode 100644 db/mob_race2_db.txt delete mode 100644 save-tmpl/bank.txt (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 8d5ab72cb..5a3de0f2c 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,7 +1,18 @@ Date Added 02/18 + * Added bAddRace2 -- check item_bonus.txt [celest] + * Added mob_race2_db.txt -- contains 'main races' of certain monsters [celest] + * Updated description for backup_txt in char_athena.conf a bit [celest] + * Set read_map_from_cache to 2 (enable compression), and map_cache_file back to + saving in /db instead of /save, as suggested by Poki#3 [celest] + * Updated description for auto_counter_type, and set plaer_auto_counter_type + to 0 by default, as suggested by Poki#3 [celest] + * Use the event names from script_athena.conf to check whenever a player event + trigger is being read/set [celest] + * Removed an unused save/bank.txt [celest] * Added some new cards effects. (check DB\changelog.txt) [Lupus] + 02/17 * Now all mobs have 10 drops slots. the last one is used for Cards Drops [Lupus] Don't forget to update your SQL files (Drop Log: logs.sql and db_tables.sql diff --git a/conf-tmpl/battle_athena.conf b/conf-tmpl/battle_athena.conf index 2b5114f95..34e047990 100644 --- a/conf-tmpl/battle_athena.conf +++ b/conf-tmpl/battle_athena.conf @@ -466,12 +466,12 @@ save_clothcolor: yes // 2 = both undead_detect_type: 2 -// Operational mode of automatic counter. +// Counter Attack Skill Type // 0 = 100% critical // 1 = disregard DEF and HIT+20, CRI*2 // 2 = Same as 0, but can counter skills (?) // Players -player_auto_counter_type: 1 +player_auto_counter_type: 0 // Monsters monster_auto_counter_type: 0 diff --git a/conf-tmpl/char_athena.conf b/conf-tmpl/char_athena.conf index 97021d816..6b73b3447 100644 --- a/conf-tmpl/char_athena.conf +++ b/conf-tmpl/char_athena.conf @@ -84,7 +84,7 @@ char_txt: save/athena.txt // default is 'no', because backup file take time for nothing. Actually, there is no problem on characters file creation and save. backup_txt_flag: no -// Character server flatfile database (backup) +// Character server flatfile database (backup, TXT only) backup_txt: save/athena_backup.txt // Friends list flatfile database diff --git a/conf-tmpl/map_athena.conf b/conf-tmpl/map_athena.conf index ad01675d0..405af5d80 100644 --- a/conf-tmpl/map_athena.conf +++ b/conf-tmpl/map_athena.conf @@ -57,10 +57,10 @@ map_port: 5121 // It is possible to reduce the map cache to 1MB for 400+ maps with compression // enabled. If all maps are already loaded in the cache, Athena can boot without // reading the grf files. -read_map_from_cache: 1 +read_map_from_cache: 2 // //Where is the bitmap file stored? -map_cache_file: save/mapinfo.txt +map_cache_file: db/mapinfo.txt // Console Commands // Allow for console commands to be used on/off diff --git a/db/Changelog.txt b/db/Changelog.txt index c757a0adf..73f7b4380 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -6,6 +6,8 @@ Skill databases == celest working on them i believe. 02/18 + * Changed Goblin Leader Card to using bAddRace2 -- each player can only save + 10 AddDamageClass, so this would save some space for other cards ^^ [celest] * Started adding new cards effects. Also big thanks to Landarma [Lupus] 02/17 diff --git a/db/const.txt b/db/const.txt index a2f199c0b..5e3976c86 100644 --- a/db/const.txt +++ b/db/const.txt @@ -245,6 +245,7 @@ bAddDamageByClass 2020 bSPGainValue 2021 bIgnoreDefMob 2022 bHPLossRate 2023 +bAddRace2 2024 Eff_Stone 0 diff --git a/db/item_db.txt b/db/item_db.txt index d439a11d9..3a8556870 100644 --- a/db/item_db.txt +++ b/db/item_db.txt @@ -1185,7 +1185,7 @@ 4152,Galapago_Card,Galapago Card,6,20,0,10,,,,,,,,,,,{},{} 4153,Crab_Card,Crab Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,5; bonus2 bAddDamageClass,1266,30; bonus2 bAddEle,4,30; if(isequipped(4247,4273)) bonus3 bAddMonsterDropItem,544,5,3000; } 4154,Dumpling_Child_Card,Dumpling Child Card,6,20,0,10,,,,,,,,,,,{},{} -4155,Goblin_Leader_Card,Goblin Leader Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddDamageClass,1122,30; bonus2 bAddDamageClass,1123,30; bonus2 bAddDamageClass,1124,30; bonus2 bAddDamageClass,1125,30; bonus2 bAddDamageClass,1126,30; bAddDamageClass,1245,30; bAddDamageClass,1258,30; bAddDamageClass,1280,30; bAddDamageClass,1299,30; bAddDamageClass,1308,30; } +4155,Goblin_Leader_Card,Goblin Leader Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,1,30; } 4156,Goblin_Steamrider_Card,Goblin Steamrider Card,6,20,0,10,,,,,,,2,,,,{},{} 4157,Goblin_Archer_Card,Goblin Archer Card,6,20,0,10,,,,,,,2,,,,{},{} 4158,Sky_Deleter_Card,Sky Deleter Card,6,20,0,10,,,,,,,16,,,,{},{} diff --git a/db/mob_race2_db.txt b/db/mob_race2_db.txt new file mode 100644 index 000000000..ebe563d52 --- /dev/null +++ b/db/mob_race2_db.txt @@ -0,0 +1,6 @@ +// RACE,Mob ID1,Mob ID2,Mob ID3,...,Mob ID9 +1,1122,1123,1124,1125,1126,1245,1258,1280,1308 // Goblins +2,1133,1134,1135,1136,1137,1226,1282,1455 // Kobolds +3,1023,1152,1153,1177,1189,1213,1273 // Orcs +4,1040,1278,1366,1497 // Golems +5,1285,1286,1287 // Guardians \ No newline at end of file diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index fedf6b37e..038383d1e 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -157,6 +157,8 @@ bonus2 bAddEffWhenHit,n,x; n% chance to cause x state to the enemy when bonus2 bSkillAtk,n,x; Increase damage of skill n by x% bonus2 bAddDamageByClass,n,x; When being hit by monster of class n increase damage taken by x% +bonus2 bAddRace2,n,x; Increase damage by x% vs. enemies of race n + (Check db/mob_race2_db.txt) bonus3 bHPLossRate,n,x,y; Lose n amount of hp every x amount of time y:0=Don't show damage 1=Show damage diff --git a/save-tmpl/bank.txt b/save-tmpl/bank.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/map/battle.c b/src/map/battle.c index 634b04a70..6b46a357e 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1617,6 +1617,7 @@ static struct Damage battle_calc_pc_weapon_attack( int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv); int flag,skill,dmg_lv = 0; int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0; + int t_race2=0; struct status_change *sc_data,*t_sc_data; short *sc_count; short *option, *opt1, *opt2; @@ -1644,6 +1645,7 @@ static struct Damage battle_calc_pc_weapon_attack( option=status_get_option(src); //鷹とかペコとかカートとか opt1=status_get_opt1(src); //石化、凍結、スタン、睡眠、暗闇 opt2=status_get_opt2(src); //毒、呪い、沈黙、暗闇? + t_race2=status_get_race2(target); if(skill_num != CR_GRANDCROSS) //グランドクロスでないなら sd->state.attack_type = BF_WEAPON; //攻撃タイプは武器攻撃 @@ -2517,17 +2519,20 @@ static struct Damage battle_calc_pc_weapon_attack( cardfix=cardfix*(100+sd->addrace[t_race])/100; // 種族によるダメージ修正 cardfix=cardfix*(100+sd->addele[t_ele])/100; // 属性によるダメージ修正 cardfix=cardfix*(100+sd->addsize[t_size])/100; // サイズによるダメージ修正 + cardfix=cardfix*(100+sd->addrace2[t_race2])/100; } else { cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100; // 種族によるダメージ修正(左手による追加あり) cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100; // 属性によるダメージ修正(左手による追加あり) cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100; // サイズによるダメージ修正(左手による追加あり) + cardfix=cardfix*(100+sd->addrace2[t_race2]+sd->addrace2_[t_race2])/100; } } else { //弓矢 cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100; // 種族によるダメージ修正(弓矢による追加あり) cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100; // 属性によるダメージ修正(弓矢による追加あり) cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100; // サイズによるダメージ修正(弓矢による追加あり) + cardfix=cardfix*(100+sd->addrace2[t_race2])/100; } if(t_mode & 0x20) { //ボス if(!sd->state.arrow_atk) { //弓矢攻撃以外なら @@ -2567,6 +2572,7 @@ static struct Damage battle_calc_pc_weapon_attack( cardfix=cardfix*(100+sd->addrace_[t_race])/100; // 種族によるダメージ修正左手 cardfix=cardfix*(100+sd->addele_[t_ele])/100; // 属 性によるダメージ修正左手 cardfix=cardfix*(100+sd->addsize_[t_size])/100; // サイズによるダメージ修正左手 + cardfix=cardfix*(100+sd->addrace2_[t_race2])/100; if(t_mode & 0x20) //ボス cardfix=cardfix*(100+sd->addrace_[10])/100; //ボスモンスターに追加ダメージ左手 else @@ -2580,8 +2586,8 @@ static struct Damage battle_calc_pc_weapon_attack( } } if(!no_cardfix) - damage2=damage2*cardfix/100; + //カード補正による左手ダメージ増加 //カードによるダメージ増加処理(左手)ここまで @@ -2629,14 +2635,14 @@ static struct Damage battle_calc_pc_weapon_attack( } if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //アスムプティオ if(!map[target->m].flag.pvp){ - damage=damage/3; - damage2=damage2/3; - }else{ - damage=damage/2; - damage2=damage2/2; + damage=damage/3; + damage2=damage2/3; + }else{ + damage=damage/2; + damage2=damage2/2; + } } } - } //対象にステータス異常がある場合のダメージ減算処理ここまで if(damage < 0) damage = 0; diff --git a/src/map/map.h b/src/map/map.h index d4cd5084e..b8fe82539 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -289,6 +289,7 @@ struct map_session_data { short ignore_def_mob, ignore_def_mob_; int hp_loss_tick, hp_loss_rate; short hp_loss_value, hp_loss_type; + int addrace2[6],addrace2_[6]; short spiritball, spiritball_old; int spirit_timer[MAX_SKILL_LEVEL]; @@ -630,7 +631,7 @@ enum { SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017 SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020 - SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE // 2021-2023 + SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2 // 2021-2023 }; enum { diff --git a/src/map/mob.c b/src/map/mob.c index 7d87b1b98..14a9b564b 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -35,7 +35,6 @@ #define MAX_MOB_DB 2000 /* Change this to increase the table size in your mob_db to accomodate numbers more than 2000 for mobs if you want to (and know what you're doing). Be sure to note that 4001 to 4047 are for advanced classes. */ - struct mob_db mob_db[2001]; #define CLASSCHANGE_BOSS_NUM 21 @@ -4318,6 +4317,57 @@ static int mob_readskilldb(void) } return 0; } +/*========================================== + * db/mob_race_db.txt reading + *------------------------------------------ + */ +static int mob_readdb_race(void) +{ + FILE *fp; + char line[1024]; + int race,j,k; + char *str[20],*p,*np; + + if( (fp=fopen("db/mob_race2_db.txt","r"))==NULL ){ + printf("can't read db/mob_race2_db.txt\n"); + return -1; + } + + while(fgets(line,1020,fp)){ + if(line[0]=='/' && line[1]=='/') + continue; + memset(str,0,sizeof(str)); + + for(j=0,p=line;j<12;j++){ + if((np=strchr(p,','))!=NULL){ + str[j]=p; + *np=0; + p=np+1; + } else + str[j]=p; + } + if(str[0]==NULL) + continue; + + race=atoi(str[0]); + if (race < 0 || race >= MAX_MOB_RACE_DB) + continue; + + for (j=1; j<20; j++) { + if (!str[j]) + break; + k=atoi(str[j]); + if (k < 1000 || k > MAX_MOB_DB) + continue; + mob_db[k].race2 = race; + //mob_race_db[race][j] = k; + } + } + fclose(fp); + sprintf(tmp_output,"Done reading '"CL_WHITE"%s"CL_RESET"'.\n","db/mob_race2_db.txt"); + ShowStatus(tmp_output); + return 0; +} void mob_reload(void) { @@ -4495,6 +4545,7 @@ int do_init_mob(void) mob_readdb_mobavail(); mob_read_randommonster(); mob_readskilldb(); + mob_readdb_race(); add_timer_func_list(mob_timer,"mob_timer"); add_timer_func_list(mob_delayspawn,"mob_delayspawn"); diff --git a/src/map/mob.h b/src/map/mob.h index 103335365..83a07d301 100644 --- a/src/map/mob.h +++ b/src/map/mob.h @@ -3,6 +3,7 @@ #define _MOB_H_ #define MAX_RANDOMMONSTER 3 +#define MAX_MOB_RACE_DB 6 struct mob_skill { short state; @@ -26,6 +27,7 @@ struct mob_db { int str,agi,vit,int_,dex,luk; int range,range2,range3; int size,race,element,mode; + short race2; // celest int speed,adelay,amotion,dmotion; int mexp,mexpper; struct { int nameid,p; } dropitem[10]; //8 -> 10 Lupus diff --git a/src/map/pc.c b/src/map/pc.c index 2bb6ddf5d..cd2d9bb64 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -809,9 +809,9 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars // Automated script events if (script_config.event_requires_trigger) { - sd->state.event_death = pc_readglobalreg(sd,"PCDieEvent"); - sd->state.event_kill = pc_readglobalreg(sd,"PCKillEvent"); - sd->state.event_disconnect = pc_readglobalreg(sd,"PCLogoffEvent"); + sd->state.event_death = pc_readglobalreg(sd, script_config.die_event_name); + sd->state.event_kill = pc_readglobalreg(sd, script_config.kill_event_name); + sd->state.event_disconnect = pc_readglobalreg(sd, script_config.logout_event_name); // if script triggers are not required } else { sd->state.event_death = 1; @@ -1839,6 +1839,14 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) sd->hp_loss_rate = val; } break; + case SP_ADDRACE2: + if (type2 > 0 && type2 < MAX_MOB_RACE_DB) + break; + if(sd->state.lr_flag != 2) + sd->addrace2[type2] += val; + else + sd->addrace2_[type2] += val; + break; default: if(battle_config.error_log) @@ -5560,11 +5568,11 @@ int pc_setglobalreg(struct map_session_data *sd,char *reg,int val) if(strcmp(reg,"PC_DIE_COUNTER") == 0 && sd->die_counter != val){ sd->die_counter = val; status_calc_pc(sd,0); - } else if(strcmp(reg,"PCDieEvent") == 0){ + } else if(strcmp(reg,script_config.die_event_name) == 0){ sd->state.event_death = val; - } else if(strcmp(reg,"PCKillEvent") == 0){ + } else if(strcmp(reg,script_config.kill_event_name) == 0){ sd->state.event_kill = val; - } else if(strcmp(reg,"PCLogoutEvent") == 0){ + } else if(strcmp(reg,script_config.logout_event_name) == 0){ sd->state.event_disconnect = val; } diff --git a/src/map/status.c b/src/map/status.c index 6c2300dca..74a7bd320 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -510,6 +510,8 @@ int status_calc_pc(struct map_session_data* sd,int first) sd->sp_gain_value = 0; sd->ignore_def_mob = sd->ignore_def_mob_ = 0; sd->hp_loss_rate = sd->hp_loss_value = sd->hp_loss_type = 0; + memset(sd->addrace2,0,sizeof(sd->addrace2)); + memset(sd->addrace2_,0,sizeof(sd->addrace2_)); if(!sd->disguiseflag && sd->disguise) { sd->disguise=0; @@ -2812,6 +2814,16 @@ int status_get_mexp(struct block_list *bl) else return 0; } +int status_get_race2(struct block_list *bl) +{ + nullpo_retr(0, bl); + if(bl->type == BL_MOB && (struct mob_data *)bl) + return mob_db[((struct mob_data *)bl)->class_].race2; + else if(bl->type==BL_PET && (struct pet_data *)bl) + return mob_db[((struct pet_data *)bl)->class_].race2; + else + return 0; +} // StatusChange系の所得 struct status_change *status_get_sc_data(struct block_list *bl) diff --git a/src/map/status.h b/src/map/status.h index dbb4ec21c..9bda514b7 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -240,6 +240,7 @@ int status_get_race(struct block_list *bl); int status_get_size(struct block_list *bl); int status_get_mode(struct block_list *bl); int status_get_mexp(struct block_list *bl); +int status_get_race2(struct block_list *bl); struct status_change *status_get_sc_data(struct block_list *bl); short *status_get_sc_count(struct block_list *bl); -- cgit v1.2.3-70-g09d2 From 3e443bdd932cc89194ff632998be050d7a0fc07b Mon Sep 17 00:00:00 2001 From: Lupus Date: Fri, 18 Feb 2005 15:39:39 +0000 Subject: added more cards effects git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1134 54d463be-8e91-2dee-dedb-b68131a5f0ec --- db/Changelog.txt | 4 +- db/item_db.txt | 107 ++++++++++++++++++++++++++--------------------------- doc/item_bonus.txt | 6 ++- 3 files changed, 61 insertions(+), 56 deletions(-) (limited to 'doc') diff --git a/db/Changelog.txt b/db/Changelog.txt index 73f7b4380..3253e118c 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -2,10 +2,12 @@ ==== progress ==== Ayathoya mobs == Added but using poring stats ( ? ) - Ayathoya items == Added but no effect ( all are "ect" itens) + Ayathoya items == Added but no effect ( all are "etc" itens) Skill databases == celest working on them i believe. 02/18 + * Added more new cards effects (thanks to DracoRPG at this time) [Lupus] + added missing bonus 'bAllStats' into doc/item_bonus.txt * Changed Goblin Leader Card to using bAddRace2 -- each player can only save 10 AddDamageClass, so this would save some space for other cards ^^ [celest] * Started adding new cards effects. Also big thanks to Landarma [Lupus] diff --git a/db/item_db.txt b/db/item_db.txt index 3a8556870..9630fed1d 100644 --- a/db/item_db.txt +++ b/db/item_db.txt @@ -1186,9 +1186,9 @@ 4153,Crab_Card,Crab Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,5; bonus2 bAddDamageClass,1266,30; bonus2 bAddEle,4,30; if(isequipped(4247,4273)) bonus3 bAddMonsterDropItem,544,5,3000; } 4154,Dumpling_Child_Card,Dumpling Child Card,6,20,0,10,,,,,,,,,,,{},{} 4155,Goblin_Leader_Card,Goblin Leader Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,1,30; } -4156,Goblin_Steamrider_Card,Goblin Steamrider Card,6,20,0,10,,,,,,,2,,,,{},{} -4157,Goblin_Archer_Card,Goblin Archer Card,6,20,0,10,,,,,,,2,,,,{},{} -4158,Sky_Deleter_Card,Sky Deleter Card,6,20,0,10,,,,,,,16,,,,{},{} +4156,Goblin_Steamrider_Card,Goblin Steamrider Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; } +4157,Goblin_Archer_Card,Goblin Archer Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; } +4158,Sky_Deleter_Card,Sky Deleter Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bNoRegen,1; } // Missing : bonus bHPGainValueWhenKill,100; 4159,Nine_Tail_Card,Nine Tail Card,6,20,0,10,,,,,,,,,,,{},{} 4160,Firelock_Soldier_Card,Firelock Soldier Card,6,20,0,10,,,,,,,,,,,{},{} 4161,Grand_Peco_Card,Grand Peco Card,6,20,0,10,,,,,,,,,,,{},{} @@ -1196,38 +1196,38 @@ 4163,Gryphon_Card,Gryphon Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bFlee,2; bonus bCritical,7; if (callfunc("Is_Sword_Class")!=0) bonus3 bAutoSpell,62,5,1; } 4164,Gullinbursti_Card,Gullinbursti Card,6,20,0,10,,,,,,,,,,,{},{} 4165,Gig_Card,Gig Card,6,20,0,10,,,,,,,,,,,{},{} -4166,Nightmare_Terror_Card,Nightmare Terror Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,2; } +4166,Nightmare_Terror_Card,Nightmare Terror Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,2; if(isequipped(4127)) bonus2 bAddEffWhenHit,Eff_Curse,30; } 4167,Nereid_Card,Neraid Card,6,20,0,10,,,,,,,,,,,{},{} 4168,Dark_Lord_Card,Dark Lord Card,6,20,0,10,,,,,,,,,,,{},{} 4169,Dark_Illusion_Card,Dark Illusion Card,6,20,0,10,,,,,,,,,,,{},{} 4170,Dark_Frame_Card,Dark Frame Card,6,20,0,10,,,,,,,,,,,{},{} 4171,Dark_Priest_Card,Dark Priest Card,6,20,0,10,,,,,,,2,,,,{},{} -4172,The_Paper_Card,The Paper Card,6,20,0,10,,,,,,,2,,,,{},{} +4172,The_Paper_Card,The Paper Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,15; if(BaseJob==Job_Assassin) bonus bCritical,4; } 4173,Demon_Pungus_Card,Demon Pungus Card,6,20,0,10,,,,,,,,,,,{},{} 4174,Deviling_Card,Deviling Card,6,20,0,10,,,,,,,,,,,{},{} 4175,Poisonous_Toad_Card,Poisonous Toad Card,6,20,0,10,,,,,,,2,,,,{},{ bonus3 bAutoSpell,52,1,2; } -4176,Dullahan_Card,Dullahan Card,6,20,0,10,,,,,,,2,,,,{},{} +4176,Dullahan_Card,Dullahan Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; } 4177,Dryad_Card,Dryad Card,6,20,0,10,,,,,,,,,,,{},{} 4178,Dragon_Tail_Card,Dragon Tail Card,6,20,0,10,,,,,,,,,,,{},{} -4179,Dragon_Fly_Card,Dragon Fly Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bAgi,1; } +4179,Dragon_Fly_Card,Dragon Fly Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bAgi,1; if(isequipped(4009)) bonus bFlee,18; } 4180,Driller_Card,Driller Card,6,20,0,10,,,,,,,,,,,{},{} -4181,Disguise_Card,Disguise Card,6,20,0,10,,,,,,,16,,,,{},{} +4181,Disguise_Card,Disguise Card,6,20,0,10,,,,,,,16,,,,{},{ if(readparam(bVit)<=77) bonus bAddEffWhenHit,10,Eff_Blind; if(readparam(bVit)>77) bonus bAddEffWhenHit,30,Eff_Blind; } 4182,Diabolic_Card,Diabolic Card,6,20,0,10,,,,,,,,,,,{},{} -4183,Vagabond_Wolf_Card,Vagabond Wolf Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bStr,1; } +4183,Vagabond_Wolf_Card,Vagabond Wolf Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bStr,1; if(isequipped(4029)) bonus bFlee,18; } 4184,Lava_Golem_Card,Lava Golem Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddDamageClass,1040,30; } -4185,Rideword_Card,Rideword Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bInt,1; } +4185,Rideword_Card,Rideword Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bInt,1; if(callfunc("Is_Holy_Class")) bonus bMdef,1; } 4186,Raggler_Card,Raggler Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bStr,1; bonus bVit,1; } 4187,Raydric_Archer_Card,Raydric Archer Card,6,20,0,10,,,,,,,,,,,{},{} 4188,Leib_Olmai_Card,Leib Olmai Card,6,20,0,10,,,,,,,,,,,{},{} 4189,Wraith_Dead_Card,Wraith Dead Card,6,20,0,10,,,,,,,,,,,{},{} 4190,Wraith_Card,Wraith Card,6,20,0,10,,,,,,,,,,,{},{} -4191,Loli_Ruri_Card,Loli Ruri Card,6,20,0,10,,,,,,,16,,,,{},{} -4192,Rotar_Zairo_Card,Rotar Zairo Card,6,20,0,10,,,,,,,2,,,,{},{} -4193,Lude_Card,Lude Card,6,20,0,10,,,,,,,136,,,,{},{} -4194,Rybio_Card,Rybio Card,6,20,0,10,,,,,,,16,,,,{},{} +4191,Loli_Ruri_Card,Loli Ruri Card,6,20,0,10,,,,,,,16,,,,{},{ bonus4 bAutoSpellWhenHit,28,3,5,0; } +4192,Rotar_Zairo_Card,Rotar Zairo Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; } +4193,Lude_Card,Lude Card,6,20,0,10,,,,,,,136,,,,{},{ if((Class==Job_Novice)||(Class==Job_Super_Novice)) bonus3 bAutoSpellWhenHit,8,1,20; if(isequipped(4294)) bonus bMaxHP,300; } +4194,Rybio_Card,Rybio Card,6,20,0,10,,,,,,,16,,,,{},{ if(readparam(bDex)<=77) bonus bAddEffWhenHit,10,Eff_Stan; if(readparam(bDex)>77) bonus bAddEffWhenHit,30,Eff_Stan; } 4195,Leaf_Cat_Card,Leaf Cat Card,6,20,0,10,,,,,,,,,,,{},{} 4196,Marin_Card,Marin Card,6,20,0,10,,,,,,,,,,,{},{} -4197,Mastering_Card,Mastering Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bLuk,1; } +4197,Mastering_Card,Mastering Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bLuk,1; if(isequipped(4001)) bonus bFlee,18; } 4198,Maya_Purple_Card,Maya Purple Card,6,20,0,10,,,,,,,,,,,{},{} 4199,Merman_Card,Merman Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bHPrecovRate,10; bonus bSPrecovRate,10; } 4200,Megalith_Card,Megalith Card,6,20,0,10,,,,,,,,,,,{},{} @@ -1238,13 +1238,13 @@ 4205,Mimic_Card,Mimic Card,6,20,0,10,,,,,,,,,,,{},{} 4206,Myst_Case_Card,Mystcase Card,6,20,0,10,,,,,,,,,,,{},{} 4207,Mysteltainn_Card,Mysteltainn Card,6,20,0,10,,,,,,,32,,,,{},{} -4208,Miyabi_Ningyo_Card,Miyabi Ningyo Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bMaxSPrate,10; } +4208,Miyabi_Ningyo_Card,Miyabi Ningyo Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bMaxSPrate,10; bonus2 bSkillAtk,15,5; } 4209,Violy_Card,Violy Card,6,20,0,10,,,,,,,,,,,{},{} -4210,Wanderer_Card,Wanderer Card,6,20,0,10,,,,,,,4,,,,{},{ bonus3 bAutoSpell,219,1,1; } -4211,Vocal_Card,Vocal Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bMdef,3; } +4210,Wanderer_Card,Wanderer Card,6,20,0,10,,,,,,,4,,,,{},{ bonus3 bAutoSpell,219,1,1; if(callfunc("Is_Thief_Class")) bonus bFlee,20; } +4211,Vocal_Card,Vocal Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bMdef,3; if(isequipped(4021)) bonus bFlee,18; } 4212,Bon_Gun_Card,Bon Gun Card,6,20,0,10,,,,,,,136,,,,{},{ bonus3 bAutoSpell,5,1,1; bonus2 bAddDefClass,1026,-100; } 4213,Brilight_Card,Brilight Card,6,20,0,10,,,,,,,,,,,{},{} -4214,Bloody_Murderer_Card,Bloody Murderer Card,6,20,0,10,,,,,,,2,,,,{},{} +4214,Bloody_Murderer_Card,Bloody Murderer Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; } 4215,Blazer_Card,Blazer Card,6,20,0,10,,,,,,,,,,,{},{} 4216,Sasquatch_Card,Sasquatch Card,6,20,0,10,,,,,,,,,,,{},{} 4217,Enchanted_Peach_Tree_Card,Enchanted Peach Tree Card,6,20,0,10,,,,,,,,,,,{},{} @@ -1252,7 +1252,7 @@ 4219,Sage_Worm_Card,Sage Worm Card,6,20,0,10,,,,,,,,,,,{},{} 4220,Solider_Card,Solider Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,2; bonus bMdef,2; } 4221,Skeleton_General_Card,Skeleton General Card,6,20,0,10,,,,,,,,,,,{},{} -4222,Skeleton_Prisoner_Card,Skel Prisoner Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,2; } +4222,Skeleton_Prisoner_Card,Skel Prisoner Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,2; if(isequipped(4025)) bonus2 bAddEffWhenHit,30,Eff_Sleep; } 4223,Stalactic_Golem_Card,Stalactic Golem Card,6,20,0,10,,,,,,,,,,,{},{} 4224,Stem_Worm_Card,Stem Worm Card,6,20,0,10,,,,,,,,,,,{},{} 4225,Stone_Shooter_Card,Stone Shooter Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,10; bonus bHit,10; } @@ -1263,15 +1263,15 @@ 4230,Shinobi_Card,Shinobi Card,6,20,0,10,,,,,,,,,,,{},{} 4231,Increase_Soil_Card,Increase Soil Card,6,20,0,10,,,,,,,,,,,{},{} 4232,Hermit_Plant_Card,Hermit Plant Card,6,20,0,10,,,,,,,,,,,{},{} -4233,Baby_Leopard_Card,Baby Leopard Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bLuk,3; } +4233,Baby_Leopard_Card,Baby Leopard Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bLuk,3; if(callfunc("Is_Merc_Class")) bonus bUnbreakableArmor,0; if(callfunc("Is_Merc_Class")) bonus bUnstrippable,0; } 4234,Anolian_Card,Anolian Card,6,20,0,10,,,,,,,,,,,{},{} -4235,Anubis_2_Card,Anubis 2 Card,6,20,0,10,,,,,,,,,,,{},{} -4236,Amon_Ra_Card,Amon Ra Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bAllStats,1; bonus bDef,1; bonus bMdef,1; } +4235,Cookie_Xmas_Card,Cookie Xmas Card,6,20,0,10,,,,,,,136,,,,{},{} +4236,Amon_Ra_Card,Amon Ra Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bAllStats,1; bonus bDef,1; bonus bMdef,1; if(readparam(bInt)<99) bonus4 bAutoSpellWhenHit,73,10,1,0; if(readparam(bInt)>=99) bonus4 bAutoSpellWhenHit,73,10,2,0; } 4237,Owl_Duke_Card,Owl Duke Card,6,20,0,10,,,,,,,,,,,{},{} 4238,Owl_Baron_Card,Owl Baron Card,6,20,0,10,,,,,,,,,,,{},{} 4239,Iron_Fist_Card,Iron Fist Card,6,20,0,10,,,,,,,,,,,{},{} 4240,Arclouze_Card,Arclouze Card,6,20,0,10,,,,,,,,,,,{},{} -4241,Arc_Angeling_Card,Arc Angeling Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bMaxHP,300; } +4241,Arc_Angeling_Card,Arc Angeling Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bMaxHP,300; if(readparam(bLuk)>77) bonus bHPrecovRate,100; if(readparam(bLuk)>77) bonus bSPrecovRate,100; } 4242,Apocalipse_Card,Apocalipse Card,6,20,0,10,,,,,,,,,,,{},{} 4243,Antonio_Card,Antonio Card,6,20,0,10,,,,,,,,,,,{},{} 4244,Alarm_Card,Alarm Card,6,20,0,10,,,,,,,,,,,{},{} @@ -1281,24 +1281,24 @@ 4248,Ancient_Mummy_Card,Ancient Mummy Card,6,20,0,10,,,,,,,,,,,{},{} 4249,Ancient_Worm_Card,Ancient Worm Card,6,20,0,10,,,,,,,,,,,{},{} 4250,Executioner_Card,Executioner Card,6,20,0,10,,,,,,,32,,,,{},{} -4251,Elder_Card,Elder Card,6,20,0,10,,,,,,,2,,,,{},{} +4251,Elder_Card,Elder Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,5,40; } 4252,Alligator_Card,Alligator Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bLongAtkDef,5; } 4253,Alice_Card,Alice Card,6,20,0,10,,,,,,,,,,,{},{ bonus2 bSubRace,10,40; bonus2 bSubRace,11,-40; } 4254,Tirfing_Card,Tirfing Card,6,20,0,10,,,,,,,32,,,,{},{} -4255,Orc_Lady_Card,Orc Lady Card,6,20,0,10,,,,,,,2,,,,{},{} +4255,Orc_Lady_Card,Orc Lady Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,3,30; } 4256,Orc_Archer_Card,Orc Archer Card,6,20,0,10,,,,,,,,,,,{},{} -4257,Wild_Rose_Card,Wild Rose Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bAgi,1; } +4257,Wild_Rose_Card,Wild Rose Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bAgi,1; if(callfunc("Is_Thief_Class")) bonus bFlee2,5; } 4258,Evil_Nymph_Card,Evil Nymph Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bInt,1; bonus bMaxSP,50; } 4259,Wooden_Golem_Card,Wooden Golem Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,1; bonus bHPrecovRate,30; } 4260,Wootan_Shooter_Card,Wootan Shooter Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bDef,1; bonus2 bResEff, Eff_Confusion,2000; } -4261,Wootan_Fighter_Card,Wootan Fighter Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bDef,1; } +4261,Wootan_Fighter_Card,Wootan Fighter Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bDef,1; bonus2 bResEff, Eff_Bleeding,2000; } 4262,Taoist_Hermit_Card,Taoist Hermit Card,6,20,0,10,,,,,,,,,,,{},{} -4263,Incantation_Samurai_Card,Incantation Samurai Card,6,20,0,10,,,,,,,2,,,,{},{} +4263,Incantation_Samurai_Card,Incantation Samurai Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bIgnoreDefMob,0; bonus2 bHPLossRate,300,10; } //Missing : lose 1000HP when unequip 4264,Wind_Ghost_Card,Wind Ghost Card,6,20,0,10,,,,,,,,,,,{},{} 4265,Li_Me_Mang_Ryang_Card,Li Me Mang Ryang Card,6,20,0,10,,,,,,,,,,,{},{} -4266,Eclipse_Card,Eclipse Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bVit,1; } +4266,Eclipse_Card,Eclipse Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bVit,1; if(isequipped(4006)) bonus bFlee,18; } 4267,Explosion_Card,Explosion Card,6,20,0,10,,,,,,,,,,,{},{} -4268,Incubus_Card,Incubus Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bInt,-3; bonus bMaxSP,150; } +4268,Incubus_Card,Incubus Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bInt,-3; bonus bMaxSP,150; bonus bSPrecovRate,-20; } //Missing : Succubus + Incubus combo because I dunno wether combo effects stack or replace non-combo ones 4269,Injustice_Card,Injustice Card,6,20,0,10,,,,,,,,,,,{},{} 4270,Giant_Spider_Card,Giant Spider Card,6,20,0,10,,,,,,,,,,,{},{} 4271,Giant_Hornet_Card,Giant Hornet Card,6,20,0,10,,,,,,,,,,,{},{} @@ -1309,59 +1309,58 @@ 4276,Lord_of_Death_Card,Lord of Death Card,6,20,0,10,,,,,,,,,,,{},{} 4277,Zherlthsh_Card,Zherlthsh Card,6,20,0,10,,,,,,,,,,,{},{} 4278,Gibbet_Card,Gibbet Card,6,20,0,10,,,,,,,,,,,{},{} -4279,Earth_Deleter_Card,Earth Deleter Card,6,20,0,10,,,,,,,16,,,,{},{} +4279,Earth_Deleter_Card,Earth Deleter Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bNoRegen,2; } //Missing : bonus bSPGainValueWhenKill,15; 4280,Geographer_Card,Geographer Card,6,20,0,10,,,,,,,,,,,{},{} -4281,Zipper_Bear_Card,Zipper Bear Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,30; } +4281,Zipper_Bear_Card,Zipper Bear Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,30; if(callfunc("Is_Merc_Class")) bonus bUnbreakableWeapon,0; } // Missing : bonus bSPGainValueWhenAttack,-1; if(callfunc("Is_Merc_Class")) bonus bUnstrippableWeapon,0; 4282,Tengu_Card,Tengu Card,6,20,0,10,,,,,,,,,,,{},{} 4283,Greatest_General_Card,Greatest General Card,6,20,0,10,,,,,,,,,,,{},{} -4284,Chepet_Card,Chepet Card,6,20,0,10,,,,,,,2,,,,{},{} +4284,Chepet_Card,Chepet Card,6,20,0,10,,,,,,,2,,,,{},{ bonus3 bAutoSpell,28,5,5; } 4285,Choco_Card,Choco Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee2,5; bonus bFlee,10; } -4286,Karakasa_Card,Karakasa Card,6,20,0,10,,,,,,,16,,,,{},{} +4286,Karakasa_Card,Karakasa Card,6,20,0,10,,,,,,,16,,,,{},{ if(readparam(bStr)<=77) bonus2 bAddEffWhenHit,10,Eff_Confusion; if(readparam(bStr)>77) bonus2 bAddEffWhenHit,30,Eff_Confusion; } 4287,Kapha_Card,Kapha Card,6,20,0,10,,,,,,,,,,,{},{} 4288,Carat_Card,Carat Card,6,20,0,10,,,,,,,,,,,{},{} 4289,Caterpillar_Card,Caterpillar Card,6,20,0,10,,,,,,,,,,,{},{} -4290,Cat_o'_Nine_Tail_Card,Cat o' Nine Tail Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bMdef,3; } -4291,Kobold_Leader_Card,Kobold Leader Card,6,20,0,10,,,,,,,2,,,,{},{} -4292,Kobold_Archer_Card,Kobold Archer Card,6,20,0,10,,,,,,,2,,,,{},{} -4293,Cookie_Card,Cookie Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bLuk,2; } -4294,Quve_Card,Quve Card,6,20,0,10,,,,,,,136,,,,{},{} +4290,Cat_o'_Nine_Tail_Card,Cat o' Nine Tail Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bMdef,3; bonus bMagicDamageReturn,5; } +4291,Kobold_Leader_Card,Kobold Leader Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,2,30; } +4292,Kobold_Archer_Card,Kobold Archer Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,7,3; } +4293,Cookie_Card,Cookie Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bLuk,2; bonus2 bSkillAtk,156,10; } +4294,Quve_Card,Quve Card,6,20,0,10,,,,,,,136,,,,{},{ if((Class==Job_Novice)||(Class==Job_Super_Novice)) bonus4 bAutoSpellWhenHit,29,1,20,0; if(isequipped(4193)) bonus bMaxSP,60; } 4295,Kraben_Card,Kraben Card,6,20,0,10,,,,,,,,,,,{},{} 4296,Cramp_Card,Cramp Card,6,20,0,10,,,,,,,,,,,{},{} -4297,Cruiser_Card,Cruiser Card,6,20,0,10,,,,,,,2,,,,{},{} +4297,Cruiser_Card,Cruiser Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,7,2; } 4298,Creamy_Fear_Card,Creamy Fear Card,6,20,0,10,,,,,,,,,,,{},{} 4299,Clock_Card,Clock Card,6,20,0,10,,,,,,,,,,,{},{} -4300,Chimera_Card,Chimera Card,6,20,0,10,,,,,,,16,,,,{},{} +4300,Chimera_Card,Chimera Card,6,20,0,10,,,,,,,16,,,,{},{ if(BaseJob!=Job_Assassin) bonus2 bAddEffWhenHit,10,Eff_Poison; if(BaseJob==Job_Assassin) bonus2 bAddEffWhenHit,30,Eff_Poison; } 4301,Killer_Mantis_Card,Killer Mantis Card,6,20,0,10,,,,,,,,,,,{},{} 4302,Tao_Gunka_Card,Tao Gunka Card,6,20,0,10,,,,,,,,,,,{},{} 4304,Tamruan_Card,Tamruan Card,6,20,0,10,,,,,,,,,,,{},{} 4305,Turtle_General_Card,Turtle General Card,6,20,0,10,,,,,,,,,,,{},{} -4306,Toad_Card,Toad Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee2,1; } +4306,Toad_Card,Toad Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee2,1; if(isequipped(4014)) bonus bFlee,18; } 4307,Beetle_King_Card,Beetle King Card,6,20,0,10,,,,,,,,,,,{},{} 4308,Tri_Joint_Card,Tri Joint Card,6,20,0,10,,,,,,,,,,,{},{} 4309,Parasite_Card,Parasite Card,6,20,0,10,,,,,,,32,,,,{},{ bonus bDef,1; bonus2 bSubEle,0,5; } -4310,Panzer_Goblin_Card,Panzer Goblin Card,6,20,0,10,,,,,,,2,,,,{},{} +4310,Panzer_Goblin_Card,Panzer Goblin Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,7,6; } 4311,Permeter_Card,Permeter Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bSubEle,7,15; bonus2 bSubEle,9,15; } -4312,Seal_Card,Seal Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bFlee,3; bonus bHit,10; } +4312,Seal_Card,Seal Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bFlee,3; bonus bHit,10; if(callfunc("Is_Holy_Class")) bonus2 bCriticalAddRace,9,1; if(callfunc("Is_Holy_Class")) bonus2 bCriticalAddRace,9,6; } 4313,Punk_Card,Punk Card,6,20,0,10,,,,,,,,,,,{},{} 4314,Penomena_Card,Penomena Card,6,20,0,10,,,,,,,32,,,,{},{ bonus2 bSubRace,0,30; } -4315,Pest_Card,Pest Card,6,20,0,10,,,,,,,16,,,,{},{} +4315,Pest_Card,Pest Card,6,20,0,10,,,,,,,16,,,,{},{ if(readparam(bInt)<=77) bonus2 bAddEffWhenHit,10,Eff_Stone; if(readparam(bInt)>77) bonus2 bAddEffWhenHit,30,Eff_Stone; } 4316,False_Angel_Card,False Angel Card,6,20,0,10,,,,,,,,,,,{},{} -4317,Mobster_Card,Mobster Card,6,20,0,10,,,,,,,2,,,,{},{} -4318,Stormy_Knight_Card,Stormy Knight Card,6,20,0,10,,,,,,,2,,,,{},{ bonus3 bAutoSpell,89,1,1; bonus2 bAddEff,Eff_Freeze,2000; } +4317,Mobster_Card,Mobster Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,20; } // Missing : bonus bSPGainValueWhenAttack,-1; +4318,Stormy_Knight_Card,Stormy Knight Card,6,20,0,10,,,,,,,2,,,,{},{ bonus3 bAutoSpell,89,1,1; bonus2 bAddEffWhenHit,20,Eff_Freeze; } 4319,Freezer_Card,Freezer Card,6,20,0,10,,,,,,,,,,,{},{} 4320,Bloody_Knight_Card,Bloody Knight Card,6,20,0,10,,,,,,,2,,,,{},{ bonus3 bAutoSpell,83,1,1; } 4321,Heirozoist_Card,Heirozoist Card,6,20,0,10,,,,,,,,,,,{},{} 4322,High_Orc_Card,High Orc Card,6,20,0,10,,,,,,,,,,,{},{} 4323,Garm_Baby_Card,Garm Baby Card,6,20,0,10,,,,,,,,,,,{},{} -4324,Garm_Card,Garm Card,6,20,0,10,,,,,,,16,,,,{},{} -4325,Harpy_Card,Harpy Card,6,20,0,10,,,,,,,4,,,,{},{ bonus2 bSubEle,0,15; } +4324,Garm_Card,Garm Card,6,20,0,10,,,,,,,16,,,,{},{ bonus2 bAddEffWhenHit,50,Eff_Freeze; } +4325,Harpy_Card,Harpy Card,6,20,0,10,,,,,,,4,,,,{},{ bonus2 bSubEle,0,15; bonus2 bSkillAtk,11,5; } 4326,Sea_Otter_Card,Sea Otter Card,6,20,0,10,,,,,,,,,,,{},{} -4327,Bloody_Butterfly_Card,Bloody Butterfly Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bCastrate,30; bonus bNoCastCancel2,0; } +4327,Bloody_Butterfly_Card,Bloody Butterfly Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bCastrate,30; bonus bNoCastCancel2,0; bonus2 bSkillAtk,18,5; } 4328,Hyegun_Card,Hyegun Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee,15; bonus bCritical,1; } 4329,Phendark_Card,Phendark Card,6,20,0,10,,,,,,,,,,,{},{} -4330,Evil_Snake_Lord_Card,Evil Snake Lord Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bResEff, Eff_Blind,10000; bonus2 bResEff, Eff_Curse,10000; } -4331,Heater_Card,Heater Card,6,20,0,10,,,,,,,,,,,{},{} -4332,Cookie_Xmas_Card,Cookie Xmas Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bCritical,3; } +4330,Evil_Snake_Lord_Card,Evil Snake Lord Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bInt,3; bonus2 bResEff, Eff_Blind,10000; bonus2 bResEff, Eff_Curse,10000; } +4331,Heater_Card,Heater Card,6,20,0,10,,,,,,,,,,,{},{ bonus bCritical,3; if(callfunc("Is_Sword_Class")) bonus bFlee2,3; } // Extra Headgears //=================================================================== diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 038383d1e..3403bc3c5 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -1,4 +1,6 @@ -サソskill n,x; skill n of level x +//eAthena Items Scripting Manual + +skill n,x; skill n of level x bonus bStr,n; STR + n bonus bAgi,n; AGI + n @@ -7,6 +9,8 @@ bonus bInt,n; INT + n bonus bDex,n; DEX + n bonus bLuk,n; LUK + n +bonus bAllStats,n; STR + n, AGI + n, VIT + n, INT + n, DEX + n, LUK + n + bonus bMaxHP,n; MAXHP + n bonus bMaxSP,n; MAXSP + n bonus bMaxHPrate,n; MAXHP + n% -- cgit v1.2.3-70-g09d2 From 48f8a39dbac7dd47104933a5c7cab30412987ecc Mon Sep 17 00:00:00 2001 From: celest Date: Sat, 19 Feb 2005 08:04:33 +0000 Subject: * Added bSubSize, bHPGainValue, and bDamageWhenUnequip * Updated bSPDrainValue/Rate * Set baby class players' size to 0(small) * Fixed item_db2.txt reading printing wrong number of entries read * Fixed @allskill not giving the newer stalker, whitesmith and creator skills git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1139 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 8 ++++++++ conf-tmpl/battle_athena.conf | 3 ++- db/const.txt | 3 +++ doc/item_bonus.txt | 16 ++++++++++++++- src/map/battle.c | 18 ++++++++++++---- src/map/itemdb.c | 1 + src/map/map.h | 8 ++++++-- src/map/mob.c | 9 +++++++- src/map/pc.c | 49 ++++++++++++++++++++++++++++++++++++++++++-- src/map/skill.c | 5 ++++- src/map/skill.h | 3 ++- src/map/status.c | 14 ++++++++++--- 12 files changed, 121 insertions(+), 16 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 3b227cee5..08755e4a8 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,5 +1,13 @@ Date Added +02/19 + * Added bSubSize, bHPGainValue, and bDamageWhenUnequip [celest] + * Updated bSPDrainValue/Rate to accept a 'type' [celest] + * Set baby class players' size to 0(small) [celest] + * Fixed item_db2.txt reading printing wrong number of entries read [celest] + * Fixed @allskill not giving the newer stalker, whitesmith and creator skills + [celest] + 02/18 * Fixed a bug with statpoint.txt reading and giving too much stat points, thanks to Benz / eAthenaC [celest] diff --git a/conf-tmpl/battle_athena.conf b/conf-tmpl/battle_athena.conf index 34e047990..a6615b9e2 100644 --- a/conf-tmpl/battle_athena.conf +++ b/conf-tmpl/battle_athena.conf @@ -258,7 +258,8 @@ gm_skill_unconditional: no // Can a normal player by-pass the skill tree? (Note 1) player_skillfree: no -// When doing a skill reset, whether the skill's restriction is to be ignored or not. (Note 1) +// When set to yes, forces skill points gained from 1st class to be put into 1st class +// sklls, and forces novice skill points to be put into the basic skill. (Note 1) player_skillup_limit: no // Forging success rate. (Note 2) diff --git a/db/const.txt b/db/const.txt index 5e3976c86..b902d4350 100644 --- a/db/const.txt +++ b/db/const.txt @@ -246,6 +246,9 @@ bSPGainValue 2021 bIgnoreDefMob 2022 bHPLossRate 2023 bAddRace2 2024 +bHPGainValue 2025 +bSubSize 2026 +bDamageWhenUnequip 2027 Eff_Stone 0 diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 3403bc3c5..96a2ebe5f 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -1,4 +1,4 @@ -//eAthena Items Scripting Manual +サソ//eAthena Items Scripting Manual skill n,x; skill n of level x @@ -150,9 +150,12 @@ bonus bNoRegen,n; Stops regeneration for n. bonus bUnstripable,n; Armor cannot be taken off via Strip skills bonus bSPGainValue,n; When killing a monster by physical attack gain n amount of sp +bonus bHPGainValue,n; When killing a monster by physical attack + gain n amount of hp bonus bIgnoreDefMob,n; Ignore monster's DEF when attacking. n:0=All normal monsters, except Bosses 1=All monsters +bonus bDamageWhenUnequip,n; Lose n HP when the item is unequipped bonus2 bCriticalAddRace,n,x; Increase critical + n vs. enemies of type x bonus2 bHPLossRate,n,x; Lose n amount of hp every x amount of time @@ -163,11 +166,22 @@ bonus2 bAddDamageByClass,n,x; When being hit by monster of class n increase damage taken by x% bonus2 bAddRace2,n,x; Increase damage by x% vs. enemies of race n (Check db/mob_race2_db.txt) +bonus2 bSubSize,n,x; Damage x% reduction from n size + n:0=Small 1=Medium 2=Large bonus3 bHPLossRate,n,x,y; Lose n amount of hp every x amount of time y:0=Don't show damage 1=Show damage bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when being hit by physical close range damage +bonus3 bSPDrainRate,n,x,y; When attacking there is a n% chance to either + gain SP equivalent to x% of damage dealt, OR + drain the amount of sp from the enemy. + y:0=gain sp 1:drain enemy sp +bonus3 bSPDrainValue,n,x,y; When attacking there is a n% chance to either + gain x SP, OR drain the amount of sp from the + enemy. y:0=gain sp 1:drain enemy sp + (Note: setting x to -1 or below will reduce + YOUR sp) bonus4 bAutoSpellWhenHit,x,y,n,i; n% chance to cast skill x of level y when being hit by physical close range damage diff --git a/src/map/battle.c b/src/map/battle.c index 6b46a357e..707362f7f 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1058,7 +1058,7 @@ static struct Damage battle_calc_mob_weapon_attack( struct Damage wd; int damage,damage2=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv); int flag,skill,ac_flag = 0,dmg_lv = 0; - int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0; + int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0,s_size=0; struct status_change *sc_data,*t_sc_data; short *sc_count; short *option, *opt1, *opt2; @@ -1074,6 +1074,7 @@ static struct Damage battle_calc_mob_weapon_attack( s_race = status_get_race(src); s_ele = status_get_attack_element(src); + s_size = status_get_size(src); sc_data = status_get_sc_data(src); sc_count = status_get_sc_count(src); option = status_get_option(src); @@ -1498,6 +1499,7 @@ static struct Damage battle_calc_mob_weapon_attack( int cardfix=100,i; cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属 性によるダメージ耐性 cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性 + cardfix=cardfix*(100-tsd->subsize[s_size])/100; if(mob_db[md->class_].mode & 0x20) cardfix=cardfix*(100-tsd->subrace[10])/100; else @@ -1616,7 +1618,7 @@ static struct Damage battle_calc_pc_weapon_attack( struct Damage wd; int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv); int flag,skill,dmg_lv = 0; - int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0; + int t_mode=0,t_race=0,t_size=1,s_race=7,s_ele=0,s_size=1; int t_race2=0; struct status_change *sc_data,*t_sc_data; short *sc_count; @@ -1640,6 +1642,7 @@ static struct Damage battle_calc_pc_weapon_attack( s_race=status_get_race(src); //種族 s_ele=status_get_attack_element(src); //属性 s_ele_=status_get_attack_element2(src); //左手属性 + s_size=status_get_size(src); sc_data=status_get_sc_data(src); //ステータス異常 sc_count=status_get_sc_count(src); //ステータス異常の数 option=status_get_option(src); //鷹とかペコとかカートとか @@ -2602,6 +2605,7 @@ static struct Damage battle_calc_pc_weapon_attack( cardfix=100; cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性 cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属性によるダメージ耐性 + cardfix=cardfix*(100-tsd->subsize[s_size])/100; if(status_get_mode(src) & 0x20) cardfix=cardfix*(100-tsd->subrace[10])/100; //ボスからの攻撃はダメージ減少 else @@ -2904,7 +2908,7 @@ struct Damage battle_calc_magic_attack( int aflag; int normalmagic_flag=1; int matk_flag = 1; - int ele=0,race=7,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i; + int ele=0,race=7,size=1,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i; struct map_session_data *sd=NULL,*tsd=NULL; struct mob_data *tmd = NULL; @@ -2925,6 +2929,7 @@ struct Damage battle_calc_magic_attack( matk2=status_get_matk2(bl); ele = skill_get_pl(skill_num); race = status_get_race(bl); + size = status_get_size(bl); t_ele = status_get_elem_type(target); t_race = status_get_race(target); t_mode = status_get_mode(target); @@ -3131,6 +3136,7 @@ struct Damage battle_calc_magic_attack( cardfix=100; cardfix=cardfix*(100-tsd->subele[ele])/100; // 属 性によるダメージ耐性 cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 + cardfix=cardfix*(100-tsd->subsize[size])/100; cardfix=cardfix*(100-tsd->magic_subrace[race])/100; if(status_get_mode(bl) & 0x20) cardfix=cardfix*(100-tsd->magic_subrace[10])/100; @@ -3207,7 +3213,7 @@ struct Damage battle_calc_misc_attack( int int_=status_get_int(bl); // int luk=status_get_luk(bl); int dex=status_get_dex(bl); - int skill,ele,race,cardfix; + int skill,ele,race,size,cardfix; struct map_session_data *sd=NULL,*tsd=NULL; int damage=0,div_=1,blewcount=skill_get_blewcount(skill_num,skill_lv); struct Damage md; @@ -3311,6 +3317,7 @@ struct Damage battle_calc_misc_attack( ele = skill_get_pl(skill_num); race = status_get_race(bl); + size = status_get_size(bl); if(damagefix){ if(damage<1 && skill_num != NPC_DARKBREATH) @@ -3320,6 +3327,7 @@ struct Damage battle_calc_misc_attack( cardfix=100; cardfix=cardfix*(100-tsd->subele[ele])/100; // 属性によるダメージ耐性 cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 + cardfix=cardfix*(100-tsd->subsize[size])/100; cardfix=cardfix*(100-tsd->misc_def_rate)/100; damage=damage*cardfix/100; } @@ -3605,6 +3613,8 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, } if (hp || sp) pc_heal(sd, hp, sp); + if (sd->sp_drain_type && target->type == BL_PC) + battle_heal(NULL,target,0,-sp,0); } } if (target->type == BL_PC) { diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 5e19b1aca..41e2e2a75 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -381,6 +381,7 @@ static int itemdb_readdb(void) fclose(fp); sprintf(tmp_output,"Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n",ln,filename[i]); ShowStatus(tmp_output); + ln=0; // reset to 0 } return 0; } diff --git a/src/map/map.h b/src/map/map.h index b8fe82539..99bceb884 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -285,11 +285,14 @@ struct map_session_data { unsigned short unstripable_equip; short add_damage_classid2[10],add_damage_class_count2; int add_damage_classrate2[10]; - short sp_gain_value; + short sp_gain_value, hp_gain_value; + short sp_drain_type; short ignore_def_mob, ignore_def_mob_; int hp_loss_tick, hp_loss_rate; short hp_loss_value, hp_loss_type; int addrace2[6],addrace2_[6]; + int subsize[3]; + short unequip_damage; short spiritball, spiritball_old; int spirit_timer[MAX_SKILL_LEVEL]; @@ -631,7 +634,8 @@ enum { SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017 SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020 - SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2 // 2021-2023 + SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025 + SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP // 2026 }; enum { diff --git a/src/map/mob.c b/src/map/mob.c index 14a9b564b..6b2e4e37a 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2384,18 +2384,25 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) if(sd) { - int sp = 0; + int sp = 0, hp = 0; if (sd->state.attack_type == BF_MAGIC && (i=pc_checkskill(sd,HW_SOULDRAIN))>0){ /* ソウルドレイン */ clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,i,1); sp += (status_get_lv(&md->bl))*(65+15*i)/100; } sp += sd->sp_gain_value; + hp += sd->hp_gain_value; if (sp > 0) { if(sd->status.sp + sp > sd->status.max_sp) sp = sd->status.max_sp - sd->status.sp; sd->status.sp += sp; clif_heal(sd->fd,SP_SP,sp); } + if (hp > 0) { + if(sd->status.hp + hp > sd->status.max_hp) + hp = sd->status.max_hp - sd->status.hp; + sd->status.hp += hp; + clif_heal(sd->fd,SP_HP,hp); + } } // map外に消えた人は計算から除くので diff --git a/src/map/pc.c b/src/map/pc.c index eac66bb97..4b2131f57 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -980,6 +980,8 @@ int pc_calc_skilltree(struct map_session_data *sd) if(battle_config.enable_upper_class){ //confで無?でなければ?み?む for(i=355;i<411;i++) sd->status.skill[i].id=i; + for(i=475;i<480;i++) + sd->status.skill[i].id=i; } }else{ do { @@ -1585,6 +1587,14 @@ int pc_bonus(struct map_session_data *sd,int type,int val) else if(sd->state.lr_flag == 1) sd->ignore_def_mob_ |= 1<state.lr_flag) + sd->hp_gain_value += val; + break; + case SP_DAMAGE_WHEN_UNEQUIP: + if(!sd->state.lr_flag) + sd->unequip_damage += val; + break; default: if(battle_config.error_log) printf("pc_bonus: unknown type %d %d !\n",type,val); @@ -1764,8 +1774,9 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) } else if(sd->state.lr_flag == 1) { sd->sp_drain_rate_ += type2; - sd->sp_drain_per_ += val; + sd->sp_drain_per_ += val; } + sd->sp_drain_type = 0; break; case SP_SP_DRAIN_VALUE: if(!sd->state.lr_flag) { @@ -1776,7 +1787,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) sd->sp_drain_rate_ += type2; sd->sp_drain_value_ += val; } - + sd->sp_drain_type = 0; break; case SP_WEAPON_COMA_ELE: if(sd->state.lr_flag != 2) @@ -1847,6 +1858,10 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) else sd->addrace2_[type2] += val; break; + case SP_SUBSIZE: + if(sd->state.lr_flag != 2) + sd->subsize[type2]+=val; + break; default: if(battle_config.error_log) @@ -1900,6 +1915,27 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) sd->hp_loss_type = val; } break; + case SP_SP_DRAIN_RATE: + if(!sd->state.lr_flag) { + sd->sp_drain_rate += type2; + sd->sp_drain_per += type3; + } + else if(sd->state.lr_flag == 1) { + sd->sp_drain_rate_ += type2; + sd->sp_drain_per_ += type3; + } + sd->sp_drain_type = val; + break; + case SP_SP_DRAIN_VALUE: + if(!sd->state.lr_flag) { + sd->sp_drain_rate += type2; + sd->sp_drain_value += type3; + } + else if(sd->state.lr_flag == 1) { + sd->sp_drain_rate_ += type2; + sd->sp_drain_value_ += type3; + } + sd->sp_drain_type = val; default: if(battle_config.error_log) printf("pc_bonus3: unknown type %d %d %d %d!\n",type,type2,type3,val); @@ -4306,6 +4342,8 @@ int pc_allskillup(struct map_session_data *sd) if(battle_config.enable_upper_class){ //confで無?でなければ?み?む for(i=355;i<411;i++) sd->status.skill[i].id=i; + for(i=475;i<480;i++) + sd->status.skill[i].id=i; } } else { @@ -6067,6 +6105,13 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag) } else { clif_unequipitemack(sd,n,0,0); } + if (sd->unequip_damage > 0) { + short dmg = sd->unequip_damage; + if (dmg > sd->status.hp) + dmg = sd->status.hp; + pc_heal(sd,-dmg,0); + } + if(flag&1) { status_calc_pc(sd,0); if(sd->sc_count && sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 && !battle_check_undead(7,sd->def_ele)) diff --git a/src/map/skill.c b/src/map/skill.c index 4bdf4ae2a..03704839f 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1588,7 +1588,10 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds if(sd->sp_drain_rate_ > 0 && sp < 1) sp = 1; else if(sd->sp_drain_rate_ < 0 && sp > -1) sp = -1; } - if(hp || sp) pc_heal(sd,hp,sp); + if(hp || sp) + pc_heal(sd,hp,sp); + if (sd->sp_drain_type && bl->type == BL_PC) + battle_heal(NULL,bl,0,-sp,0); } if((skillid || flag) && rdamage > 0) diff --git a/src/map/skill.h b/src/map/skill.h index c06ab270f..dc789aa4a 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -611,7 +611,8 @@ enum { WE_BABY, WE_CALLPARENT, WE_CALLBABY, - TK_RUN, + + TK_RUN = 411, TK_READYSTORM, TK_STORMKICK, TK_READYDOWN, diff --git a/src/map/status.c b/src/map/status.c index 74a7bd320..05c6c8baa 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -512,6 +512,9 @@ int status_calc_pc(struct map_session_data* sd,int first) sd->hp_loss_rate = sd->hp_loss_value = sd->hp_loss_type = 0; memset(sd->addrace2,0,sizeof(sd->addrace2)); memset(sd->addrace2_,0,sizeof(sd->addrace2_)); + sd->hp_gain_value = sd->sp_drain_type = 0; + memset(sd->subsize,0,sizeof(sd->subsize)); + sd->unequip_damage = 0; if(!sd->disguiseflag && sd->disguise) { sd->disguise=0; @@ -2786,11 +2789,16 @@ int status_get_size(struct block_list *bl) nullpo_retr(1, bl); if(bl->type==BL_MOB && (struct mob_data *)bl) return mob_db[((struct mob_data *)bl)->class_].size; - else if(bl->type==BL_PC && (struct map_session_data *)bl) - return 1; else if(bl->type==BL_PET && (struct pet_data *)bl) return mob_db[((struct pet_data *)bl)->class_].size; - else + else if(bl->type==BL_PC) { + struct map_session_data *sd = (struct map_session_data *)bl; + //if (pc_isriding(sd)) // fact or rumour? + // return 2; + if (pc_calc_upper(sd->status.class_) == 2) + return 0; + return 1; + } else return 1; } int status_get_mode(struct block_list *bl) -- cgit v1.2.3-70-g09d2 From 125ff2ca6b79b278576f7ddbbd6ac99526b7a852 Mon Sep 17 00:00:00 2001 From: celest Date: Wed, 23 Feb 2005 15:59:40 +0000 Subject: * Added bAddItemHealRate * Fixed a crash if adding an offline player to a party * Fixed a crash with Warp git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1169 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 4 ++++ db/const.txt | 1 + db/skill_unit_db.txt | 24 ++++++++++++------------ doc/item_bonus.txt | 8 +++++++- src/map/map.h | 4 +++- src/map/party.c | 12 +++++++----- src/map/pc.c | 46 +++++++++++++++++++++++++++++++++------------- src/map/skill.c | 20 ++++++++++++-------- 8 files changed, 79 insertions(+), 40 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 7e191639e..f6c0c52b6 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,6 +1,10 @@ Date Added 02/23 + * Added bAddItemHealRate [celest] + * Fixed a crash if adding an offline player to a party, thanks to Alex14 + [celest] + * Fixed a crash with Warp [celest] * New Cards: Some fixes, revisions, additions [Lupus] * Fixed char server crash when sending wisp with a "'" in the names [celest] * Fixed Backstab not checking for and consuming arrows [celest] diff --git a/db/const.txt b/db/const.txt index 768392519..6c3ec6b8b 100644 --- a/db/const.txt +++ b/db/const.txt @@ -249,6 +249,7 @@ bAddRace2 2024 bHPGainValue 2025 bSubSize 2026 bDamageWhenUnequip 2027 +bAddItemHealRate 2028 Eff_Stone 0 diff --git a/db/skill_unit_db.txt b/db/skill_unit_db.txt index 9c0616e30..70ea32109 100644 --- a/db/skill_unit_db.txt +++ b/db/skill_unit_db.txt @@ -19,26 +19,26 @@ 18,0x7f, , -1, 0, 1,enemy, 0x000 //MG_FIREWALL#ファイアーウォール 21,0x86, , 0, 1,1000,enemy, 0x008 //MG_THUNDERSTORM#サンダーストーム 25,0x85, , 1, 0, -1,all, 0x003 //AL_PNEUMA#ニューマ - 27,0x81,0x80, 0, 0, -1,all, 0x002 //AL_WARP#ワープポータル + 27,0x81,0x80, 0, 0, -1,all, 0x006 //AL_WARP#ワープポータル 70,0x83, , -1, 1,1000,all, 0x000 //PR_SANCTUARY#サンクチュアリ 79,0x84, , -1, 1,3000,enemy, 0x000 //PR_MAGNUS#マグヌスエクソシズム 80,0x87,0x88, 0, 1,2000,enemy, 0x002 //WZ_FIREPILLAR#ファイアーピラー 83,0x86, , 0, 3,1000,enemy, 0x000 //WZ_METEOR#メテオストーム 85,0x86, , 0, 6,1000,enemy, 0x008 //WZ_VERMILION#ロードオブヴァーミリオン - 87,0x8d, , -1, 0, -1,all, 0x000 //WZ_ICEWALL#アイスウォール + 87,0x8d, , -1, 0, -1,all, 0x004 //WZ_ICEWALL#アイスウォール 88,0x86, , 0, 2,1000,enemy, 0x000 //WZ_FROSTNOVA#フロストノヴァ 89,0x86, , 0, 5, 450,enemy, 0x000 //WZ_STORMGUST#ストームガスト 91,0x86, , 0, 2,1000,enemy, 0x000 //WZ_HEAVENDRIVE#ヘヴンズドライブ 92,0x8e, , 2, 0, -1,enemy, 0x000 //WZ_QUAGMIRE#クァグマイア -115,0x90, , 0, 1,1000,enemy, 0x002 //HT_SKIDTRAP#スキッドトラップ -116,0x93, , 0, 1,1000,enemy, 0x002 //HT_LANDMINE#ランドマイン -117,0x91, , 0, 1,1000,enemy, 0x002 //HT_ANKLESNARE#アンクルスネア -118,0x94, , 0, 1,1000,enemy, 0x002 //HT_SHOCKWAVE#ショックウェーブトラップ -119,0x95, , 0, 2,1000,enemy, 0x002 //HT_SANDMAN#サンドマン -120,0x96, , 0, 1,1000,enemy, 0x002 //HT_FLASHER#フラッシャー -121,0x97, , 0, 1,1000,enemy, 0x002 //HT_FREEZINGTRAP#フリージングトラップ -122,0x8f, , 0, 1,1000,enemy, 0x002 //HT_BLASTMINE#ブラストマイン -123,0x98, , 0, 2,1000,enemy, 0x002 //HT_CLAYMORETRAP#クレイモアトラップ +115,0x90, , 0, 1,1000,enemy, 0x006 //HT_SKIDTRAP#スキッドトラップ +116,0x93, , 0, 1,1000,enemy, 0x006 //HT_LANDMINE#ランドマイン +117,0x91, , 0, 1,1000,enemy, 0x006 //HT_ANKLESNARE#アンクルスネア +118,0x94, , 0, 1,1000,enemy, 0x006 //HT_SHOCKWAVE#ショックウェーブトラップ +119,0x95, , 0, 2,1000,enemy, 0x006 //HT_SANDMAN#サンドマン +120,0x96, , 0, 1,1000,enemy, 0x006 //HT_FLASHER#フラッシャー +121,0x97, , 0, 1,1000,enemy, 0x006 //HT_FREEZINGTRAP#フリージングトラップ +122,0x8f, , 0, 1,1000,enemy, 0x006 //HT_BLASTMINE#ブラストマイン +123,0x98, , 0, 2,1000,enemy, 0x006 //HT_CLAYMORETRAP#クレイモアトラップ 125,0x99, , 0, 1,1000,all, 0x002 //HT_TALKIEBOX#トーキーボックス 140,0x92, , -1, 0,1000,enemy, 0x000 //AS_VENOMDUST#ベナムダスト 220,0xb0, , 0, 0, -1,all, 0x002 //RG_GRAFFITI#グラフィティ @@ -71,7 +71,7 @@ 362,0xb4, , 0, 3, 300,all, 0x000,0 //HP_BASILICA#バジリカ 369,0xb3, , 3, 0, -1,all, 0x000,0 //PA_GOSPEL#ゴスペル 404,0xb6, , -1, 0, -1,all, 0x000,0 //PF_FOGWALL#フォグウォール -405,0xb7, , 0, 1,1000,enemy, 0x002,0 //PF_SPIDERWEB#スパイダーウェッブ +405,0xb7, , 0, 1,1000,enemy, 0x006,0 //PF_SPIDERWEB#スパイダーウェッブ 10006,0xc1, , 0, 2, -1,all, 0x000,0 //GD_LEADERSHIP 10007,0xc2, , 0, 2, -1,all, 0x000,0 //GD_GLORYWOUNDS 10008,0xc3, , 0, 2, -1,all, 0x000,0 //GD_SOULCOLD diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 96a2ebe5f..039a84bd7 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -185,4 +185,10 @@ bonus3 bSPDrainValue,n,x,y; When attacking there is a n% chance to either bonus4 bAutoSpellWhenHit,x,y,n,i; n% chance to cast skill x of level y when being hit by physical close range damage - i:0=cast on self 1=cast on enemy \ No newline at end of file + i:0=cast on self 1=cast on enemy + +//---- 2/22 new card effects ---- + +bonus2 bAddItemHealRate,n,x; Increases HP recovered by n type items by x% + n:1=potions 2=herbs 3=fruits 4=meat 5=candy + 6=juice 7=sashimi diff --git a/src/map/map.h b/src/map/map.h index 96cbc9fb3..fb11bc784 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -293,6 +293,8 @@ struct map_session_data { int addrace2[6],addrace2_[6]; int subsize[3]; short unequip_damage; + int itemid; + int itemhealrate[6]; short spiritball, spiritball_old; int spirit_timer[MAX_SKILL_LEVEL]; @@ -640,7 +642,7 @@ enum { SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017 SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020 SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025 - SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP // 2026 + SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP, SP_ADD_ITEM_HEAL_RATE // 2026-2028 }; enum { diff --git a/src/map/party.c b/src/map/party.c index 6c6bf9567..85774c33b 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -250,11 +250,13 @@ int party_reply_invite(struct map_session_data *sd,int account_id,int flag) // パーティが追加された int party_member_added(int party_id,int account_id,int flag) { - struct map_session_data *sd= map_id2sd(account_id),*sd2; - if(sd==NULL && flag==0){ - if(battle_config.error_log) - printf("party: member added error %d is not online\n",account_id); - intif_party_leave(party_id,account_id); // キャラ側に登録できなかったため脱退要求を出す + struct map_session_data *sd = map_id2sd(account_id),*sd2; + if(sd == NULL){ + if (flag == 0) { + if(battle_config.error_log) + printf("party: member added error %d is not online\n",account_id); + intif_party_leave(party_id,account_id); // キャラ側に登録できなかったため脱退要求を出す + } return 0; } sd2=map_id2sd(sd->party_invite_account); diff --git a/src/map/pc.c b/src/map/pc.c index 52c2b6a8f..20f5d8854 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1855,6 +1855,10 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) if(sd->state.lr_flag != 2) sd->subsize[type2]+=val; break; + case SP_ADD_ITEM_HEAL_RATE: + if(sd->state.lr_flag != 2) + sd->itemhealrate[type2 - 1] += val; + break; default: if(battle_config.error_log) @@ -2421,17 +2425,18 @@ int pc_isUseitem(struct map_session_data *sd,int n) */ int pc_useitem(struct map_session_data *sd,int n) { - int nameid,amount; + int amount; nullpo_retr(1, sd); if(n >=0 && n < MAX_INVENTORY) { - nameid = sd->status.inventory[n].nameid; + sd->itemid = sd->status.inventory[n].nameid; amount = sd->status.inventory[n].amount; if(sd->status.inventory[n].nameid <= 0 || sd->status.inventory[n].amount <= 0 || sd->sc_data[SC_BERSERK].timer!=-1 || sd->sc_data[SC_MARIONETTE].timer!=-1 || + (pc_issit(sd) && (sd->itemid == 605 || sd->itemid == 606)) || //added item_noequip.txt items check by Maya&[Lupus] (map[sd->bl.m].flag.pvp && (sd->inventory_data[n]->flag.no_equip&1) ) || // PVP (map[sd->bl.m].flag.gvg && (sd->inventory_data[n]->flag.no_equip>1) ) || // GVG @@ -2439,6 +2444,7 @@ int pc_useitem(struct map_session_data *sd,int n) clif_useitemack(sd,n,0,0); return 1; } + if(sd->inventory_data[n]) run_script(sd->inventory_data[n]->use_script,0,sd->bl.id,0); @@ -2902,7 +2908,7 @@ int pc_setpos(struct map_session_data *sd,char *mapname_org,int x,int y,int clrt status_change_end(&sd->bl, SC_HIDING, -1); if(sd->status.option&4) status_change_end(&sd->bl, SC_CLOAKING, -1); - if(sd->status.option&16386) + if(sd->status.option&16384) status_change_end(&sd->bl, SC_CHASEWALK, -1); if(sd->status.pet_id > 0 && sd->pd && sd->pet.intimate > 0) { @@ -4588,7 +4594,7 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage) status_change_end(&sd->bl, SC_HIDING, -1); if(sd->status.option&4) status_change_end(&sd->bl, SC_CLOAKING, -1); - if(sd->status.option&16386) + if(sd->status.option&16384) status_change_end(&sd->bl, SC_CHASEWALK, -1); if(sd->status.hp>0){ @@ -5124,7 +5130,7 @@ int pc_heal(struct map_session_data *sd,int hp,int sp) */ int pc_itemheal(struct map_session_data *sd,int hp,int sp) { - int bonus; + int bonus, type = 0; // if(battle_config.battle_log) // printf("heal %d %d\n",hp,sp); @@ -5147,19 +5153,33 @@ int pc_itemheal(struct map_session_data *sd,int hp,int sp) if(sp > 0) sp = 0; } + + if (sd->itemid >= 501 && sd->itemid <= 505) + type = 1; // potions + else if (sd->itemid >= 507 && sd->itemid <= 510) + type = 2; // herbs + else if (sd->itemid >= 512 && sd->itemid <= 516) + type = 3; // fruits + else if (sd->itemid == 517 || sd->itemid == 528) + type = 4; // meat + else if (sd->itemid == 529 || sd->itemid == 530) + type = 5; // candy + else if (sd->itemid >= 531 && sd->itemid <= 534) + type = 6; // juice + else if (sd->itemid == 544 || sd->itemid == 551) + type = 7; // sashimi + if(hp > 0) { - bonus = (sd->paramc[2]<<1) + 100 + pc_checkskill(sd,SM_RECOVERY)*10; - if(bonus != 100) - hp = hp * bonus / 100; - bonus = 100 + pc_checkskill(sd,AM_LEARNINGPOTION)*5; + bonus = (sd->paramc[2]<<1) + 100 + pc_checkskill(sd,SM_RECOVERY)*10 + + pc_checkskill(sd,AM_LEARNINGPOTION)*5; + if (type > 0) + bonus += sd->itemhealrate[type - 1]; if(bonus != 100) hp = hp * bonus / 100; } if(sp > 0) { - bonus = (sd->paramc[3]<<1) + 100 + pc_checkskill(sd,MG_SRECOVERY)*10; - if(bonus != 100) - sp = sp * bonus / 100; - bonus = 100 + pc_checkskill(sd,AM_LEARNINGPOTION)*5; + bonus = (sd->paramc[3]<<1) + 100 + pc_checkskill(sd,MG_SRECOVERY)*10 + + pc_checkskill(sd,AM_LEARNINGPOTION)*5; if(bonus != 100) sp = sp * bonus / 100; } diff --git a/src/map/skill.c b/src/map/skill.c index 296c95f93..75df62f6b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5030,6 +5030,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, int target,interval,range,unit_flag; struct skill_unit_layout *layout; struct status_change *sc_data; + int active_flag=1; nullpo_retr(0, src); @@ -5060,6 +5061,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, val1=skilllv+6; if(flag==0) limit=2000; + active_flag=0; break; case PR_SANCTUARY: /* サンクチュアリ */ @@ -5264,7 +5266,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, break; } } - if (range==0) + if (range==0 && active_flag) map_foreachinarea(skill_unit_effect,unit->bl.m ,unit->bl.x,unit->bl.y,unit->bl.x,unit->bl.y ,0,&unit->bl,gettick(),1); @@ -8059,19 +8061,22 @@ int skill_encchant_eremental_end(struct block_list *bl,int type) /* クロ?キング?査(周りに移動不可能地?があるか) */ int skill_check_cloaking(struct block_list *bl) { + struct map_session_data *sd = NULL; static int dx[]={ 0, 1, 0, -1, -1, 1, 1, -1}; //optimized by Lupus static int dy[]={-1, 0, 1, 0, -1, -1, 1, 1}; int end=1,i; - //missing sd [Found by Celest, commited by Aria] - struct map_session_data *sd=(struct map_session_data *)bl; - nullpo_retr(0, bl); if(bl->type == BL_PC && !battle_config.pc_cloak_check_type) // If it's No it shouldn't be checked return 0; else if(bl->type == BL_MOB && !battle_config.monster_cloak_check_type) return 0; + + //missing sd [Found by Celest, commited by Aria] + if (bl->type == BL_PC) + sd=(struct map_session_data *)bl; + for(i=0;im,bl->x+dx[i],bl->y+dy[i],CELL_CHKNOPASS)) { end=0; @@ -8079,17 +8084,16 @@ int skill_check_cloaking(struct block_list *bl) } } if(end){ - if ((bl->type == BL_PC && pc_checkskill(sd,AS_CLOAKING)<3) || bl->type == BL_MOB) { + if ((sd && pc_checkskill(sd,AS_CLOAKING)<3) || bl->type == BL_MOB) { status_change_end(bl, SC_CLOAKING, -1); - *status_get_option(bl)&=~4; /* 念のための?理 */ } - else if (bl->type == BL_PC && sd->sc_data[SC_CLOAKING].val3 != 130) { + else if (sd && sd->sc_data[SC_CLOAKING].val3 != 130) { sd->sc_data[SC_CLOAKING].val3 = 130; status_calc_speed (sd); } } else { - if (bl->type == BL_PC && sd->sc_data[SC_CLOAKING].val3 != 103) { + if (sd && sd->sc_data[SC_CLOAKING].val3 != 103) { sd->sc_data[SC_CLOAKING].val3 = 103; status_calc_speed (sd); } -- cgit v1.2.3-70-g09d2 From 257a41619254ceb14b6e0867a20449248b540d41 Mon Sep 17 00:00:00 2001 From: celest Date: Sun, 20 Mar 2005 12:07:52 +0000 Subject: * Added 4 new card effects from 3/15's patch * Added 'enable_ip_rules' to packet_athena.conf * Updated socket debug messages to be more readable git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1257 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 4 ++++ conf-tmpl/packet_athena.conf | 45 ++++++++++++++++++++++++----------------- db/const.txt | 4 ++++ doc/item_bonus.txt | 10 +++++++++ src/common/socket.c | 48 ++++++++++++++++++++++++++++++-------------- src/map/battle.c | 12 ++++++++--- src/map/map.h | 10 +++++++-- src/map/mob.c | 33 +++++++++++++++++------------- src/map/pc.c | 47 ++++++++++++++++++++++++++++++++++--------- src/map/status.c | 6 +++++- 10 files changed, 157 insertions(+), 62 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index bbbf13d6a..c05c01b98 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -2,8 +2,12 @@ Date Added 03/20 * Fixed @storage / @gstorage ATcommands thanks2 Yor/Freya [Lupus] + * Added 4 new card effects from 3/15's patch -- check item_bonus.txt [celest] + * Added 'enable_ip_rules' to packet_athena.conf [celest] + * Updated socket debug messages to be more readable [celest] * Added a sql upgrader to handle the mob_db changes to assist in migrating to the newer SVN servers [MouseJstr] + 03/19 * Added getrefine() for 3/15's card patch -- returns the refined number of the current item [celest] diff --git a/conf-tmpl/packet_athena.conf b/conf-tmpl/packet_athena.conf index b8e1f31f7..b11baa429 100644 --- a/conf-tmpl/packet_athena.conf +++ b/conf-tmpl/packet_athena.conf @@ -1,27 +1,18 @@ -// ソケット関連の設定です。 (Untranslated yet) +// Athena sockets Configuration file +// (Untranslated yet) -// How long can a socket stall before closing the connection (in seconds) -stall_time: 60 - -//---- Ddos Protection Settings ---- - // デバッグ情報の表示(バグ報告の際にコピペして頂けると助かります) -// debug: 1 +debug: no -// ddos攻撃と判断する為のルール設定 -// ddos_interval msec以内の接続要求がddos_count回続いた場合に、 -// ddos攻撃されたと判定します。 +// How long can a socket stall before closing the connection (in seconds) +stall_time: 60 -// 接続間隔(msec) -ddos_interval: 3000 -// 接続回数 -ddos_count: 5 +//----- IP Rules Settings ----- -// ddos制限を解除する間隔(msec) -// この時間経過すると、接続制限が解除されます。 -ddos_autoreset: 600000 +// Do we check IP's before allowing incoming connections? +enable_ip_rules: yes // アクセス制限の判定順序(Apacheと同じ) // deny,allow が標準になっています。 @@ -43,4 +34,22 @@ allow: all // deny: 127.0.0.1 -import: conf/import/packet_conf.txt \ No newline at end of file + +//---- Ddos Protection Settings ---- + +// ddos攻撃と判断する為のルール設定 +// ddos_interval msec以内の接続要求がddos_count回続いた場合に、 +// ddos攻撃されたと判定します。 + +// 接続間隔(msec) +ddos_interval: 3000 + +// 接続回数 +ddos_count: 5 + +// ddos制限を解除する間隔(msec) +// この時間経過すると、接続制限が解除されます。 +ddos_autoreset: 600000 + + +//import: conf/import/packet_conf.txt \ No newline at end of file diff --git a/db/const.txt b/db/const.txt index 6c3ec6b8b..329c3530f 100644 --- a/db/const.txt +++ b/db/const.txt @@ -250,6 +250,10 @@ bHPGainValue 2025 bSubSize 2026 bDamageWhenUnequip 2027 bAddItemHealRate 2028 +bLoseSPWhenUnequip 2029 +bExpAddRace 2030 +bSPGainRace 2031 +bSPSubRace2 2032 Eff_Stone 0 diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 039a84bd7..fbc613893 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -192,3 +192,13 @@ bonus4 bAutoSpellWhenHit,x,y,n,i; n% chance to cast skill x of level y when bonus2 bAddItemHealRate,n,x; Increases HP recovered by n type items by x% n:1=potions 2=herbs 3=fruits 4=meat 5=candy 6=juice 7=sashimi + +//---- 3/15 new card effects ---- + +bonus bLoseSPWhenUnequip.n; Lose n SP when the item is unequipped + +bonus2 bExpAddRace,n,x; Increase exp gained by n% vs. enemies of type x +bonus2 bSPGainRace,n,x; When killing a monster of type x by physical + attack gain n amount of sp +bonus2 bSPSubRace2,n,x; Damage x% reduction from enemies of race n + (Check db/mob_race2_db.txt) diff --git a/src/common/socket.c b/src/common/socket.c index 19e4275a8..f49d4c0ca 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -42,6 +42,7 @@ fd_set readfds; int fd_max; time_t tick_; time_t stall_time_ = 60; +int ip_rules = 1; int rfifo_size = 65536; int wfifo_size = 65536; @@ -50,6 +51,8 @@ int wfifo_size = 65536; #define TCP_FRAME_LEN 1053 #endif +#define CONVIP(ip) ip&0xFF,(ip>>8)&0xFF,(ip>>16)&0xFF,ip>>24 + struct socket_data *session[FD_SETSIZE]; static int null_parse(int fd); @@ -197,7 +200,7 @@ static int connect_client(int listen_fd) if(fd==-1) { perror("accept"); return -1; - } else if (!connect_check(*(unsigned int*)(&client_address.sin_addr))) { + } else if (ip_rules && !connect_check(*(unsigned int*)(&client_address.sin_addr))) { close(fd); return -1; } else @@ -554,7 +557,7 @@ static struct _access_control *access_deny; static int access_order=ACO_DENY_ALLOW; static int access_allownum=0; static int access_denynum=0; -static int access_debug; +static int access_debug=0; static int ddos_count = 10; static int ddos_interval = 3000; static int ddos_autoreset = 600*1000; @@ -576,8 +579,8 @@ static int connect_check_(unsigned int ip); static int connect_check(unsigned int ip) { int result = connect_check_(ip); if(access_debug) { - printf("connect_check: connection from %08x %s\n", - ip,result ? "allowed" : "denied"); + printf("connect_check: Connection from %d.%d.%d.%d %s\n", + CONVIP(ip),result ? "allowed." : "denied!"); } return result; } @@ -591,8 +594,10 @@ static int connect_check_(unsigned int ip) { for(i = 0;i < access_allownum; i++) { if((ip & access_allow[i].mask) == (access_allow[i].ip & access_allow[i].mask)) { if(access_debug) { - printf("connect_check: match allow list from:%08x ip:%08x mask:%08x\n", - ip,access_allow[i].ip,access_allow[i].mask); + printf("connect_check: Found match from allow list:%d.%d.%d.%d IP:%d.%d.%d.%d Mask:%d.%d.%d.%d\n", + CONVIP(ip), + CONVIP(access_allow[i].ip), + CONVIP(access_allow[i].mask)); } is_allowip = 1; break; @@ -601,8 +606,10 @@ static int connect_check_(unsigned int ip) { for(i = 0;i < access_denynum; i++) { if((ip & access_deny[i].mask) == (access_deny[i].ip & access_deny[i].mask)) { if(access_debug) { - printf("connect_check: match deny list from:%08x ip:%08x mask:%08x\n", - ip,access_deny[i].ip,access_deny[i].mask); + printf("connect_check: Found match from deny list:%d.%d.%d.%d IP:%d.%d.%d.%d Mask:%d.%d.%d.%d\n", + CONVIP(ip), + CONVIP(access_deny[i].ip), + CONVIP(access_deny[i].mask)); } is_denyip = 1; break; @@ -655,8 +662,8 @@ static int connect_check_(unsigned int ip) { if(hist->count++ >= ddos_count) { // ddos 攻撃を検出 hist->status = 1; - printf("connect_check: ddos attack detected (%d.%d.%d.%d)\n", - ip & 0xFF,(ip >> 8) & 0xFF,(ip >> 16) & 0xFF,ip >> 24); + printf("connect_check: DDOS Attack detected from %d.%d.%d.%d!\n", + CONVIP(ip)); return (connect_ok == 2 ? 1 : 0); } else { return connect_ok; @@ -715,7 +722,7 @@ static int connect_check_clear(int tid,unsigned int tick,int id,int data) { } } if(access_debug) { - printf("connect_check_clear: clear = %d list = %d\n",clear,list); + printf("connect_check_clear: Cleared %d of %d from IP list.\n", clear, clear+list); } return list; } @@ -729,7 +736,7 @@ int access_ipmask(const char *str,struct _access_control* acc) mask = 0; } else { if( sscanf(str,"%d.%d.%d.%d%n",&a0,&a1,&a2,&a3,&i)!=4 || i==0) { - printf("access_ipmask: unknown format %s\n",str); + printf("access_ipmask: Unknown format %s!\n",str); return 0; } ip = (a3 << 24) | (a2 << 16) | (a1 << 8) | a0; @@ -746,7 +753,8 @@ int access_ipmask(const char *str,struct _access_control* acc) } } if(access_debug) { - printf("access_ipmask: ip:%08x mask:%08x %s\n",ip,mask,str); + printf("access_ipmask: Loaded IP:%d.%d.%d.%d mask:%d.%d.%d.%d\n", + CONVIP(ip), CONVIP(mask)); } acc->ip = ip; acc->mask = mask; @@ -771,11 +779,17 @@ int socket_config_read(const char *cfgName) { continue; if(strcmpi(w1,"stall_time")==0){ stall_time_ = atoi(w2); + } else if(strcmpi(w1,"enable_ip_rules")==0){ + if(strcmpi(w2,"yes")==0) + ip_rules = 1; + else if(strcmpi(w2,"no")==0) + ip_rules = 0; + else ip_rules = atoi(w2); } else if(strcmpi(w1,"order")==0){ access_order=atoi(w2); if(strcmpi(w2,"deny,allow")==0) access_order=ACO_DENY_ALLOW; if(strcmpi(w2,"allow,deny")==0) access_order=ACO_ALLOW_DENY; - if(strcmpi(w2,"mutual-failture")==0) access_order=ACO_MUTUAL_FAILTURE; + if(strcmpi(w2,"mutual-failure")==0) access_order=ACO_MUTUAL_FAILTURE; } else if(strcmpi(w1,"allow")==0){ access_allow = aRealloc(access_allow,(access_allownum+1)*sizeof(struct _access_control)); if(access_ipmask(w2,&access_allow[access_allownum])) { @@ -793,7 +807,11 @@ int socket_config_read(const char *cfgName) { } else if(!strcmpi(w1,"ddos_autoreset")){ ddos_autoreset = atoi(w2); } else if(!strcmpi(w1,"debug")){ - access_debug = atoi(w2); + if(strcmpi(w2,"yes")==0) + access_debug = 1; + else if(strcmpi(w2,"no")==0) + access_debug = 0; + else access_debug = atoi(w2); } else if (strcmpi(w1, "import") == 0) socket_config_read(w2); } diff --git a/src/map/battle.c b/src/map/battle.c index 483ddffb7..81b2c3189 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1063,7 +1063,7 @@ static struct Damage battle_calc_mob_weapon_attack( struct Damage wd; int damage,damage2=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv); int flag,skill,ac_flag = 0,dmg_lv = 0; - int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0,s_size=0; + int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0,s_size=0,s_race2=0; struct status_change *sc_data,*t_sc_data; short *sc_count; short *option, *opt1, *opt2; @@ -1085,6 +1085,7 @@ static struct Damage battle_calc_mob_weapon_attack( option = status_get_option(src); opt1 = status_get_opt1(src); opt2 = status_get_opt2(src); + s_race2 = status_get_race2(src); // ターゲット if(target->type == BL_PC) @@ -1504,6 +1505,7 @@ static struct Damage battle_calc_mob_weapon_attack( cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属 性によるダメージ耐性 cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性 cardfix=cardfix*(100-tsd->subsize[s_size])/100; + cardfix=cardfix*(100-tsd->subrace2[s_race2])/100; // 種族によるダメージ耐性 if(mob_db[md->class_].mode & 0x20) cardfix=cardfix*(100-tsd->subrace[10])/100; else @@ -2857,7 +2859,7 @@ struct Damage battle_calc_magic_attack( int aflag; int normalmagic_flag=1; int matk_flag = 1; - int ele=0,race=7,size=1,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i; + int ele=0,race=7,size=1,race2=7,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i; struct map_session_data *sd=NULL,*tsd=NULL; struct mob_data *tmd = NULL; @@ -2879,6 +2881,7 @@ struct Damage battle_calc_magic_attack( ele = skill_get_pl(skill_num); race = status_get_race(bl); size = status_get_size(bl); + race2 = status_get_race2(bl); t_ele = status_get_elem_type(target); t_race = status_get_race(target); t_mode = status_get_mode(target); @@ -3091,6 +3094,7 @@ struct Damage battle_calc_magic_attack( cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 cardfix=cardfix*(100-tsd->subsize[size])/100; cardfix=cardfix*(100-tsd->magic_subrace[race])/100; + cardfix=cardfix*(100-tsd->subrace2[race2])/100; // 種族によるダメージ耐性 if(status_get_mode(bl) & 0x20) cardfix=cardfix*(100-tsd->magic_subrace[10])/100; else @@ -3166,7 +3170,7 @@ struct Damage battle_calc_misc_attack( int int_=status_get_int(bl); // int luk=status_get_luk(bl); int dex=status_get_dex(bl); - int skill,ele,race,size,cardfix; + int skill,ele,race,size,cardfix,race2; struct map_session_data *sd=NULL,*tsd=NULL; int damage=0,div_=1,blewcount=skill_get_blewcount(skill_num,skill_lv); struct Damage md; @@ -3270,6 +3274,7 @@ struct Damage battle_calc_misc_attack( ele = skill_get_pl(skill_num); race = status_get_race(bl); size = status_get_size(bl); + race2 = status_get_race(bl); if(damagefix){ if(damage<1 && skill_num != NPC_DARKBREATH) @@ -3281,6 +3286,7 @@ struct Damage battle_calc_misc_attack( cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 cardfix=cardfix*(100-tsd->subsize[size])/100; cardfix=cardfix*(100-tsd->misc_def_rate)/100; + cardfix=cardfix*(100-tsd->subrace2[race2])/100; damage=damage*cardfix/100; } if (sd && skill_num > 0 && sd->skillatk[0] == skill_num) diff --git a/src/map/map.h b/src/map/map.h index a83f810b9..8039615f7 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -297,9 +297,14 @@ struct map_session_data { short hp_loss_value, hp_loss_type; int addrace2[6],addrace2_[6]; int subsize[3]; - short unequip_damage[11]; + short unequip_losehp[11]; + short unequip_losesp[11]; int itemid; int itemhealrate[6]; + //--- 03/15's new card effects + int expaddrace[6]; + int subrace2[6]; + short sp_gain_race[6]; short spiritball, spiritball_old; int spirit_timer[MAX_SKILL_LEVEL]; @@ -647,7 +652,8 @@ enum { SP_CRIT_ATK_RATE, SP_CRITICAL_ADDRACE, SP_NO_REGEN, SP_ADDEFF_WHENHIT, SP_AUTOSPELL_WHENHIT, // 2013-2017 SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020 SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025 - SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP, SP_ADD_ITEM_HEAL_RATE // 2026-2028 + SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP, SP_ADD_ITEM_HEAL_RATE, SP_LOSESP_WHEN_UNEQUIP, SP_EXP_ADDRACE, // 2026-2030 + SP_SP_GAIN_RACE, SP_SUBRACE2, }; enum { diff --git a/src/map/mob.c b/src/map/mob.c index 584d9de2e..3cfb4e6d5 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2198,10 +2198,12 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) struct item item; int ret; int drop_rate; + int race; nullpo_retr(0, md); //srcはNULLで呼ばれる場合もあるので、他でチェック max_hp = status_get_max_hp(&md->bl); + race = status_get_race(&md->bl); if(src && src->type == BL_PC) { sd = (struct map_session_data *)src; @@ -2425,6 +2427,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) sp += (status_get_lv(&md->bl))*(65+15*i)/100; } sp += sd->sp_gain_value; + sp += sd->sp_gain_race[race]; hp += sd->hp_gain_value; if (sp > 0) { if(sd->status.sp + sp > sd->status.max_sp) @@ -2512,21 +2515,24 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) if(job_exp < 1) job_exp = 1; } - if(sd && battle_config.pk_mode && (mob_db[md->class_].lv - sd->status.base_level >= 20)) { - base_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris] - } - if(sd && battle_config.pk_mode && (mob_db[md->class_].lv - sd->status.base_level >= 20)) { - job_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris] + if(sd) { + int rate; + if ((rate = sd->expaddrace[race]) > 0) { + base_exp = (100+rate)*base_exp/100; + job_exp = (100+rate)*job_exp/100; + } + if (battle_config.pk_mode && (mob_db[md->class_].lv - sd->status.base_level >= 20)) { + base_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris] + job_exp*=1.15; + } } if(md->master_id) { - master = map_id2bl(md->master_id); - } - if((master && status_get_mode(master)&0x20) || // check if its master is a boss (MVP's and minibosses) - (md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1)) { // for summoned creatures [Valaris] - base_exp = 0; - job_exp = 0; - } - else { + if(((master = map_id2bl(md->master_id)) && status_get_mode(master)&0x20) || // check if its master is a boss (MVP's and minibosses) + (md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1)) { // for summoned creatures [Valaris] + base_exp = 0; + job_exp = 0; + } + } else { if(battle_config.zeny_from_mobs) { if(md->level > 0) zeny=(md->level+rand()%md->level)*per/256; // zeny calculation moblv + random moblv [Valaris] if(mob_db[md->class_].mexp > 0) @@ -2639,7 +2645,6 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) if(sd && sd->state.attack_type == BF_WEAPON) { for(i=0;imonster_drop_item_count;i++) { struct delay_item_drop *ditem; - int race = status_get_race(&md->bl); if(sd->monster_drop_itemid[i] <= 0) continue; if(sd->monster_drop_race[i] & (1<inventory_data[current_equip_item_index]->equip & equip_pos[i]) { - sd->unequip_damage[i] += val; + sd->unequip_losehp[i] += val; + break; + } + } + } + break; + case SP_LOSESP_WHEN_UNEQUIP: + if(!sd->state.lr_flag) { + int i; + for (i=0; i<11; i++) { + if (sd->inventory_data[current_equip_item_index]->equip & equip_pos[i]) { + sd->unequip_losesp[i] += val; break; } } @@ -1861,10 +1872,22 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) if(sd->state.lr_flag != 2) sd->subsize[type2]+=val; break; + case SP_SUBRACE2: + if(sd->state.lr_flag != 2) + sd->subrace2[type2]+=val; + break; case SP_ADD_ITEM_HEAL_RATE: if(sd->state.lr_flag != 2) sd->itemhealrate[type2 - 1] += val; break; + case SP_EXP_ADDRACE: + if(sd->state.lr_flag != 2) + sd->expaddrace[type2]+=val; + break; + case SP_SP_GAIN_RACE: + if(sd->state.lr_flag != 2) + sd->sp_gain_race[type2]+=val; + break; default: if(battle_config.error_log) @@ -6076,7 +6099,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int pos) */ int pc_unequipitem(struct map_session_data *sd,int n,int flag) { - short dmg = 0; + short hp = 0, sp = 0; nullpo_retr(0, sd); // -- moonsoul (if player is berserk then cannot unequip) @@ -6093,9 +6116,13 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag) for(i=0;i<11;i++) { if(sd->status.inventory[n].equip & equip_pos[i]) { sd->equip_index[i] = -1; - if(sd->unequip_damage[i] > 0) { - dmg += sd->unequip_damage[i]; - sd->unequip_damage[i] = 0; + if(sd->unequip_losehp[i] > 0) { + hp += sd->unequip_losehp[i]; + sd->unequip_losehp[i] = 0; + } + if(sd->unequip_losesp[i] > 0) { + sp += sd->unequip_losesp[i]; + sd->unequip_losesp[i] = 0; } } } @@ -6150,10 +6177,12 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag) status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1); } - if (dmg > 0) { - if (dmg > sd->status.hp) - dmg = sd->status.hp; - pc_heal(sd,-dmg,0); + if (hp > 0 || sp > 0) { + if (hp > sd->status.hp) + hp = sd->status.hp; + if (sp > sd->status.sp) + sp = sd->status.sp; + pc_heal(sd,-hp,-sp); } return 0; diff --git a/src/map/status.c b/src/map/status.c index b0c90d520..e05d33909 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -521,7 +521,11 @@ int status_calc_pc(struct map_session_data* sd,int first) memset(sd->addrace2_,0,sizeof(sd->addrace2_)); sd->hp_gain_value = sd->sp_drain_type = 0; memset(sd->subsize,0,sizeof(sd->subsize)); - memset(sd->unequip_damage,0,sizeof(sd->unequip_damage)); + memset(sd->unequip_losehp,0,sizeof(sd->unequip_losehp)); + memset(sd->unequip_losesp,0,sizeof(sd->unequip_losesp)); + memset(sd->subrace2,0,sizeof(sd->subrace2)); + memset(sd->expaddrace,0,sizeof(sd->expaddrace)); + memset(sd->sp_gain_race,0,sizeof(sd->sp_gain_race)); if(!sd->disguiseflag && sd->disguise) { sd->disguise=0; -- cgit v1.2.3-70-g09d2 From 3299e0cf10d83dfa8827a6f538ef1bcf1382ae45 Mon Sep 17 00:00:00 2001 From: DracoRPG Date: Sat, 26 Mar 2005 21:12:08 +0000 Subject: Added missing parenthesis preventing SinX etc to get +4/lv from Improve Dodge git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1301 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 13 +++++++------ doc/item_bonus.txt | 18 +++++++++--------- src/map/status.c | 4 ++-- 3 files changed, 18 insertions(+), 17 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 4dadf4540..2219d2176 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,8 +1,13 @@ Date Added 03/27 + * Added missing parenthesis in my Improve Dodge code, not giving +4/lv to proper jobs [DracoRPG] * Added all released cards into monsters drops and Old Card Album [Lupus] 03/25 + * Fixed a typo in my fix for Stalk / Tunnel Drive increasing instead of decreasing speed, sorry [DracoRPG] + * Rewrote a little bit Improve Dodge [DracoRPG] + - The speed bonus does not effect when Cloaked + - Assassins & Rogues get +4 Flee/lv, but all other jobs can get +3/lv if they have the skill (not only Thiefs & Super Novices) * Some minor changes to Sacrifice in battle.c [celest] * Set the Emperium to be immune to Sacrifice [celest] * Set the Emperium to be have max status effects immunity [celest] @@ -10,12 +15,10 @@ Date Added set to 'no' [celest] * Fixed @monsterbig/@monstersmall not working [celest] * Fixed @killmonster2 not working [celest] - * Fixed a typo in my fix for Stalk / Tunnel Drive increasing instead of decreasing speed, sorry [DracoRPG] - * Rewrote a little bit Improve Dodge [DracoRPG] - - The speed bonus does not effect when Cloaked - - Assassins & Rogues get +4 Flee/lv, but all other jobs can get +3/lv if they have the skill (not only Thiefs & Super Novices) 03/24 + * Updated obj_del to delete all GNUMakeFile and .o files + compiled exes [DracoRPG] + * Fixed a typo in Stalk / Tunnel Drive speed calculation [DracoRPG] * Added some mapflags for new towns [Lupus] * Added timer.c optimization / timers sort fix. 'no freezing mobs anymore' Thanx 2 Yor/Freya [Lupus] * Added 'map_charid2id' [celest] @@ -33,8 +36,6 @@ Date Added is set to 'yes' -- they're only not allowed to cast near players [celest] * Print number of online users in online.txt/.html even if there's only 1 user online [celest] - * Updated obj_del to delete all GNUMakeFile and .o files + compiled exes [DracoRPG] - * Fixed a typo in Stalk / Tunnel Drive speed calculation [DracoRPG] 03/23 * Adjusted my trade fix [1280: MouseJstr] diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index fbc613893..13dac4169 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -1,4 +1,4 @@ -サソ//eAthena Items Scripting Manual +//eAthena Items Scripting Manual skill n,x; skill n of level x @@ -45,11 +45,11 @@ bonus bDoubleRate,n; attack probability n% (with weapon disregard just high one bonus bDoubleAddRate,n; Double attack probability + n% (weapon disregard) bonus bPerfectHitRate,n; On-target impact attack probability n% (just high ones application) bonus bPerfectHitAddRate,n; On-target impact attack probability +n% -bonus bGetZenyNum,n; When pushing down the monster with physical attack, rand () 繧シ繝 of %n+1 is obtained, (as for n just high ones application) -bonus bAddGetZenyNum,n; When pushing down the monster with physical attack, rand () 繧シ繝 of %n+1 is obtained, (n is done +) -bonus bCriticalDef,n; Critical 蝟ー and others the trap it is, probability + n% -bonus bNearAtkDef,n; The damage of short-range attack n% reduction (magic and the trap, the 鮃ケ is excluded) -bonus bLongAtkDef,n; damage of stand off attack n% reduction (magic and the trap, the 鮃ケ is excluded) +bonus bGetZenyNum,n; When pushing down the monster with physical attack, rand () ?? of %n+1 is obtained, (as for n just high ones application) +bonus bAddGetZenyNum,n; When pushing down the monster with physical attack, rand () ?? of %n+1 is obtained, (n is done +) +bonus bCriticalDef,n; Critical ? and others the trap it is, probability + n% +bonus bNearAtkDef,n; The damage of short-range attack n% reduction (magic and the trap, the ? is excluded) +bonus bLongAtkDef,n; damage of stand off attack n% reduction (magic and the trap, the ? is excluded) bonus bMagicAtkDef the damage of magical attack n% reduction bonus bMiscAtkDef MISC attack (the trap and ?) the damage n% reduction @@ -121,7 +121,7 @@ bonus2 bMagicSubRace,n,x; Magical damage x% reduction from n race 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) bonus2 bAddEle,n,x; In n attribute the damage addition of x% 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus2 bMagicAddEle,n,x; In n attribute the damage addition of x% (only magical attack) +bonus2 bMagicAddEle,n,x In n attribute the damage addition of x% (only magical attack) 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality bonus2 bSubEle,n,x; Damage x% reduction from n attribute 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality @@ -176,7 +176,7 @@ bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when bonus3 bSPDrainRate,n,x,y; When attacking there is a n% chance to either gain SP equivalent to x% of damage dealt, OR drain the amount of sp from the enemy. - y:0=gain sp 1:drain enemy sp + y:0=gain sp 1:drain enemy sp bonus3 bSPDrainValue,n,x,y; When attacking there is a n% chance to either gain x SP, OR drain the amount of sp from the enemy. y:0=gain sp 1:drain enemy sp @@ -195,7 +195,7 @@ bonus2 bAddItemHealRate,n,x; Increases HP recovered by n type items by x% //---- 3/15 new card effects ---- -bonus bLoseSPWhenUnequip.n; Lose n SP when the item is unequipped +bonus bLoseSPWhenUnequip,n; Lose n SP when the item is unequipped bonus2 bExpAddRace,n,x; Increase exp gained by n% vs. enemies of type x bonus2 bSPGainRace,n,x; When killing a monster of type x by physical diff --git a/src/map/status.c b/src/map/status.c index 30887e201..bc059e442 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1034,7 +1034,7 @@ int status_calc_pc(struct map_session_data* sd,int first) //Flee上昇 if( (skill=pc_checkskill(sd,TF_MISS))>0 ){ // 回避率?加 - sd->flee += skill*(sd->status.class_==12 || sd->status.class_==17 || sd->status.class_==4013 || sd->status.class_==4018 ? 4 : 3); + sd->flee += skill*((sd->status.class_==12 || sd->status.class_==17 || sd->status.class_==4013 || sd->status.class_==4018) ? 4 : 3); if((sd->status.class_==12 || sd->status.class_==4013) && (sd->sc_count && sd->sc_data[SC_CLOAKING].timer==-1)) sd->speed -= (short)(skill*1.5/100 * DEFAULT_WALK_SPEED); } @@ -1539,7 +1539,7 @@ int status_calc_speed (struct map_session_data *sd) } if(sd->status.option&2 && (skill = pc_checkskill(sd,RG_TUNNELDRIVE))>0 ) - sd->speed += (1.2*DEFAULT_WALK_SPEED - skill*9); + sd->speed += (100-16*skill)*DEFAULT_WALK_SPEED/100; if (pc_iscarton(sd) && (skill=pc_checkskill(sd,MC_PUSHCART))>0) sd->speed += (10-skill) * (DEFAULT_WALK_SPEED * 0.1); else if (pc_isriding(sd)) { -- cgit v1.2.3-70-g09d2 From 96a3da18a1e77035ee894283a3c805c7062a203d Mon Sep 17 00:00:00 2001 From: celest Date: Fri, 1 Apr 2005 08:37:31 +0000 Subject: * Fixed a potential crash in pc_walk in Win32 builds * Added bAddEffWhenHitShort and changed bAddEffWhenHit back to all physical damage git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1373 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 314 +---------------------------------------------------- Changelog.txt | 310 ++++++++++++++++++++++++++++++++++++++++++++++++++++ db/const.txt | 1 + doc/item_bonus.txt | 6 +- src/map/map.h | 3 +- src/map/pc.c | 16 ++- src/map/skill.c | 36 +++--- src/map/status.c | 1 + 8 files changed, 354 insertions(+), 333 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 97d24977f..97243c19d 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,6 +1,12 @@ Date Added +04/01 + * Updated ShowMessage functions to use vprintf [celest] + * Fixed a potential crash in pc_walk in Win32 builds [celest] + * Added bAddEffWhenHitShort and changed bAddEffWhenHit back to all physical + damage [celest] + 03/31 * Fixed memory corruption during shutdown via the script_buf [SVN 1370: MouseJstr] @@ -377,311 +383,3 @@ Date Added * SQL: Fixed temporary ban. Now banned players can enter the server when the ban time is over. [Lupus] It wasn't working because STATE hasn't been cleared properly. Also fixed wrong client messages (ban reasons: Banned by GM / Temp ban till DATE). -03/01 - * Effects from dancer/bard skills will stay for 20 seconds after leaving the - skill area [celest] - * Fixed /resetstate /resetskill being unuseable at all [celest] - * Fixed /mm /mapmove being useable by all players [celest] - * Fixed some compile errors in mob_once_spawn [celest] - * Corrected a typo in Chemical Protection skills, thanks to holyfork [celest] - -02/28 - * Fixed SQL Castle saving bugs [Lupus] - * Corrected Tiger Fist, Chain Crush, and Palm Push Strike damage, thanks to - Eskadron [celest] - * Updated Endure to be usable in GvG, but only gives the mdef bonus [celest] - * Some rewrites on the passive guild skills effects [celest] - -02/27 - * Fixed some bugs in Monk Job Quest. Now it's fully passable. [Lupus] -02/26 - * Added jA's dummy socket to prevent fd crashes [celest] - * Added some jA script commands: [Lupus] (first steps to add ELSE, FOR, WHILE, etc) - - getusersname (works like @WHO ATCommand, outputs by 10 names in the Pop-up window) - - dispbottom (print message in the common chat window) - - recovery (restore MaxHP/SP and revives all players on the server) - - getpetinfo (returns pet's name, type, class, hunger, intimacy) - - globalmes (works like Announce, but outputs in the common chat window) - - jump_zero (reserved - for future compatibility) - - select (reserved - for future compatibility) - - getmapmobs (# mobs on a named map, use "this" for current map) - check script.c for their paremeters (in English) -02/25 - * Fixed npc_dequeue, testing on remove of RoVeRT's npc timer system [Shinomori] -02/24 - - * Re-added missing cart dupe-proof code. From Freya [Lupus] - * Some rewrites on Basilica [celest] - * Fixed another bad typo in skill list_num reading, thanks to orn [celest] - * Fixed Steal Item Rate. It has been multiplied twice on common_item_drop value for any kinds of items. [Lupus] - e.g. If you set droprate of comman items to 500%, then even rare items could be stolen more easily. Thanks to Freya - * Items Droprate fix. Now it adjusts correctly, w/o overflows. Thanks to Freya [Lupus] - * mob DBbs EXP reading fix. w/o overflows. Thanks to Freya [Lupus] - -02/23 - * Added bAddItemHealRate [celest] - * Fixed a crash if adding an offline player to a party, thanks to Alex14 - [celest] - * Fixed a crash with Warp [celest] - * New Cards: Some fixes, revisions, additions [Lupus] - * Fixed char server crash when sending wisp with a "'" in the names [celest] - * Fixed Backstab not checking for and consuming arrows [celest] - * Fixed another bad typo causing @allskill to not add points into advanced job - skills [celest] - * Fixed a bad typo in status.c's StatusChangeTable [celest] - * Corrected Spiral Pierce's hits in the skill_db [celest] - * Moved /common/*.o into a obj folder when compiling [celest] - * Updated core and map server to jA 1094~1115 [celest] - - Added End_of_exam's Memory Manager for detecting memory problems. - To enable remove the // in malloc.c line 11 - // #define USE_MEMMGR - - Added @npctalk and @pettalk - - Added support for jA's local zlib - - Fixed a bug with path search long - - Updated malloc.c to support Memwatch - - Added DB data loss detection - - Added db/skill_unit_db.txt - - Updated skill unit system - - Changed Waterball to the new timerskill system - ~ For more detailed logs check 'Readme-jap' (knowledge in japanese required, - obviously ^^;) - Please test if there's any skills that might have suddenly stopped working, - thanks ^^; - -02/22 - * Revised New Cards, added missing effects, fixed bugs [Lupus] - ~20 cards to check left 8) But on 22 Feb some new cards have been announced T__T' - * Cleaned up some compiler warnings [SVN 1158: MouseJstr] - * Added perl regular expression support.. look at src/map/npc_chat.c - for all the dirt on the new features. To build it, you have - to enable the PCRE_SUPPORT #define and you also have to - build/install the pcre library. [SVN 1157: MouseJstr] - -02/21 - * Added actual item_db.sql into sql-files. [Lupus] - * Added actual mob_db.sql into sql-files. If you use SQL Mob DB then update it [Lupus] - * Updated Bleeding effect [celest] - * Removed some unused code for Graffiti [celest] - -02/20 - * Char SQL: Rewrote/Fixed the castle save function, now the sql version saves castles! [Sirius] - * Fixed the /mm /mapmove command access bug [Sirius] - * Added skill requirements for the new guild skills [celest] - * Allow Emergency Recall to be cast in guild castles even if nowarp and - nowarpto mapflags are enabled [celest] - * Add 'minimum job level required' for skill_tree reading [celest] - - Berserk now requires job level 50 - * Added Spring Trap to be able to trigger ankle snare traps that aren't - activated yet [celest] - * Added a fix in guild.c by Mellowz [celest] - * Some rewrites on the pet skill bonuses system -- also fixes pet bonuses - not effecting stats as they should [celest] - * Check whether a monster is still alive before starting a status change - -- also fixes the status_change_timer nullpo errors with grimtooth [celest] - -02/19 - * Added bSubSize, bHPGainValue, and bDamageWhenUnequip [celest] - * Updated bSPDrainValue/Rate to accept a 'type' [celest] - * Set baby class players' size to 0(small) [celest] - * Fixed item_db2.txt reading printing wrong number of entries read [celest] - * Fixed @allskill not giving the newer stalker, whitesmith and creator skills - [celest] - -02/18 - * Fixed a bug with statpoint.txt reading and giving too much stat points, - thanks to Benz / eAthenaC [celest] - * Fixed client errors when pecopeco Lord Knights/Paladins log in with a weapon - equipped [celest] - * Added bAddRace2 -- check item_bonus.txt [celest] - * Added mob_race2_db.txt -- contains 'main races' of certain monsters [celest] - * Updated description for backup_txt in char_athena.conf a bit [celest] - * Set read_map_from_cache to 2 (enable compression), and map_cache_file back to - saving in /db instead of /save, as suggested by Poki#3 [celest] - * Updated description for auto_counter_type, and set plaer_auto_counter_type - to 0 by default, as suggested by Poki#3 [celest] - * Use the event names from script_athena.conf to check whenever a player event - trigger is being read/set [celest] - * Removed an unused save/bank.txt [celest] - * Added some new cards effects. (check DB\changelog.txt) [Lupus] - -02/17 - * Now all mobs have 10 drops slots. the last one is used for Cards Drops [Lupus] - Don't forget to update your SQL files (Drop Log: logs.sql and db_tables.sql - if u were using SQL Mobs DB. Update it from TXT! ) - * Fixed Branch Log TXT filename [Lupus] - * Made all logs work with compiled TXT Server, too (removed old #ifndef) [Lupus] - * Added 4 columns into mob_db.txt (check DB\changelog.txt) [Lupus] - * Fixed some mobs drops (Whisper, etc) and some MVP mobs (bonuses were shifted...) [Lupus] - * Readded Chemical Protection -- i forgot to check for it when changing some - jA stuff earlier, sorry ^^; [celest] - * Removed some old eA code that was causing Frost Nova to do an extra hit - [celest] - * Corrected Vulcan Arrow's hits in skill_db -- the bug appeared when the - correct numbers hardcoded were removed [celest] - * Readded zlib and zconf .h files to under /lib for compiling in Windows, - thanks to Ser [celest] - * Fixed some compile errors in Windows, thanks to Ser [celest] - * Changed remove_control_characters back to supporting korean chars [celest] - * Moved some other code around [celest] - * Added Shinomori's changes to Dissonance -- don't increment the timer again - if the target has died [celest] - * Changed some nullpo checks back to normal null checks -- in some situations - it would be normal to get a NULL [celest] - * Changed some nullpo checks to print some debug information [celest] - * Added some sd checks before calling pc_blockskill [celest] - * Added Dino9021's fix for SQL char's friend list updating [celest] - * Fixed a crash if the player invited to join a guild is not online, thanks to - Alex14 [celest] - * Find the guild invitation sender first before clearing its ID [celest] - - * Added 2 new script commands to support 2/15's cards patch... most of the - effects in kRO should be available now ^^ [celest] - - - isequipped(...): Accepts a list of item ID's and checks whether all of - the items/cards have been equipped. - - isequippedcnt(...): Same as above, except it returns how many of the items - are being equipped - - Example: if(isequipped(4002,4004,4006)) bonus bStr,1; - -02/16 - * Char SQL: Fixed the Whisper chat on splittet mapservers (i think now all features work!) [Sirius] - - * Added 3 more of the new card effects -- check item_bonus.txt [celest] - - * Added 'bonus4' to support the new card effects that might need up to 4 - parameters [celest] - * Set 'killerrid' and do PCKillEvent before calling PCDieEvent, thanks to - mrmagoo for pointing it out [celest] - - * Added some new script event related options to script config [celest] - - - [die/kill/login/logout]_event_name: Name of script to activate when an - event has occured - - event_requires_trigger: whether or not a 'set [EventName],1;' has to be - defined first for the event to be activated - - * Added 8 of the new card effects on the 2/15's patch (still untested and - not yet added to the item_db) - - Refer to doc/item_bonus.txt for description - - * Minor rewrites on self and enemy weapon/armor breaking during battle [celest] - * Added missing code for 'bBreakWeaponRate' and 'bBreakArmorRate' effects - [celest] - * Added missing code for 'bAddStealRate' effect [celest] - * Removed redundant 'infinite_autospell' in map_session_data [celest] - * Fixed Treasure Box spawn bug in all castles. [Lupus] - * Fixed wrong PresentLOG (it wasn't showing PRESENT BOX type ID) [Lupus] - * Expanded Monsters Drops Slots from 8 to 10. Everywhere in the sources. [Lupus] - But in TXT / SQL monsters DB reading functions, I added a temp plug - to make eA work fine with existing DBs. It reads only 8 drops and fills - 9th and 10th drops with Zero. - On expanding MOB_DB.TXT we'll remove that plug. - We are adding new cards and some monsters - have no free slots for them. Current state is tested and works fine. - -02/15 - * Allow Potion Pitcher to be able to cast on yourself -- i've almost forgot - about this, thanks to Filougarou and Poki#3 for the fix ^^; [celest] - * Added Wallex's changes for weapon skills to read list_num from the skill_db - when calculating damage [celest] - * Login / Login SQL: Fixed the EXE-Version check (now it works finally :) [Sirius] - * Char SQL: Fixed the '0x2b05' reply to the mapserver (now multi - mapservers works again!) - * Rewrote skill blocking system that was allowing people to bypass blocking - time simply by casting a different skill [celest] - * Edited out some inconsistencies with skillnotok [celest] - * Corrected Investigate's damage calculation, thanks to matthias [celest] - * Generate the remaining entries of the stat point DB if the number of - entries in db/statuspoints.txt is less than MAX_LEVEL, or statuspoints.txt - was not found [celest] - * Try to spawn the player at a default map ("prontera.gat") when logging in if - the save point map was not found [celest] - -02/13 - * added an @autoloot switch that Upa-kun has forgotten [Shinomori] - * changed pet_skillattack_timer and corrected the poison spore attack - * tighter check's on "unknown skill" error; but added prints to trace it - * Added Wallex's changes to only evoke script_rid2sd if agitcheck(1) is used - [celest] - * Merged jA's equipment breaking system into the current one, and corrected - items with unbreakable effects in the item_db [celest] - - "bonus bUnbreakable,[chance];" changed to - "bonus bUnbreakable[Weapon/Armor/Helm/Shield],0;" - -02/12 - * Merged Dexity's pc_statpointdb into pc_readdb, changed statp's string - array to short (less memory), and fixed the db not giving status points if - character level is above 255 [celest] - * fixing and optimizing sharp shooting - have implemented two different versions, just have a look and - decide which to use, description is in the code [Shinomori] - * Changed default map cache path from db/map.info to save/mapinfo.txt [celest] - * Removed old code for Sharp Shooting (still a little buggy) [celest] - * Merged Shinomori's code into map_foreachinpath [celest] - -02/11 - * mob.c fixed doubling entries in DROPS LOG, optimized [Lupus] - * item_noequip.txt now you can disable named consumable items - during GvG / PvP, too by Maya, optimized and checked [Lupus] - NOTE: Get rid of old cards on your server!!! IDs: 4149-4332 - before using of this item_db.txt (some cards have changed their IDs) - and it could cause ALIEN cards in your players equipment 8)) - i.g. a weapon compounding CARDS inserted in armor, etc... - * item_db.txt Massive update: [Lupus] - - Added all new missing items (up to st.Valentine's Day Event) - - Added new cards 4149-4332, sorted them and set their sripts. - - Fixed some names, typos, weigths and prices - * Commented out old custom cards from Old_Card_Album.txt till we brush them up [Lupus] - * Removed old custom cards from MOBs drops [Lupus] - thanks to Landarma(new items templates) Poki#3(removing cards from drops) - * Tidied up battle_check_target abit [celest] - * Updated traps to affect allies as well in GvG [celest] - * Check if login server is online before setting character to online (in SQL), - thanks to Alex14 [celest] - * Synchronise storage as well when saving character to cut down on item - rollbacks or duping, by Yor / Frea [celest] - * Added fix for super novices' Guardian Angel system crashing when base_exp = 0 - thanks to Alex14 [celest] - * not realy fixing the "unknown skill" error - but returning skill_castend_damage_id when called with skillid < 0 - still need to search a reason why it is called with -1 [Shinomori] - * EXPERIMENTAL: Reduced memory used for the skill_tree DB by 30+mb [celest] - * Added script commands isday and isnight - checks whether its night or - daytime. Example: if(isnight()) ... [celest] - * Skill Updates [celest] - - Sharp Shooting: Dropped jA's and kA's code and wrote a new - map_foreachinpath function in map.c -- about 14 times faster, but still - uncomplete - - Ankle Snare: Added matthias' suggestion to let agility reduce more trap - time, but no less than 3 seconds. - - Magnum Break: simplified code a bit, and changed to non-targetting / - automatically damages an area around the caster - - Tiger Fist: enable it to be used by its own besides as a part of - the combo skills - - Devotion: Fixed maximum level difference not reading its setting from - battle_athena.conf, thanks to leinsirk - - Soul Burn: Added some safety checks - -02/10 - * Login/Login SQL: fixed the client version check function [Sirius] - -02/09 - * Added conf-tmpl/readme.txt, explaining the import folder [1066: Ajarn] - * SQL Char: Rewrote the char_create function (now it's faster/optimized) [Sirius] - * SQL Char: Fixed the reply if a charname is invalid on create (now it replys denied..) [Sirius] - * SQL Char: Added a Character limit per Account (can be set in the config) [Sirius] - * SQL Char: Optimized some SQL-Querys [Sirius] - -02/06 - * NULL entries for guild data fixed [Credit to Sirius] [1060: Ajarn] - * Login server uses login_db_userid and login_db_user_pass for - queries now [Credit to Sirius] [1059: Ajarn] - * Login server can now check clientversion in clientinfo - [Credit to Sirius] [1059: Ajarn] - * Fixed txt build compile problems[1057: MouseJstr] - * Corrected end-of-line issues in source code [1056: MouseJstr] - * Coded new command: @MOBINFO [Lupus] - the command has also 2 aliases: @monsterinfo, @mi - It shows all Monster stats, Element, Race and stuff - It shows all items with their drop chance - It also shows MVP bonuses (MVP EXP, MVP Drops) diff --git a/Changelog.txt b/Changelog.txt index fe5d151b3..cec3bcfd8 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,6 +1,316 @@ Date Added -------- Read Changelog-SVN.txt for the newer SVN entries-------- + +03/01 + * Effects from dancer/bard skills will stay for 20 seconds after leaving the + skill area [celest] + * Fixed /resetstate /resetskill being unuseable at all [celest] + * Fixed /mm /mapmove being useable by all players [celest] + * Fixed some compile errors in mob_once_spawn [celest] + * Corrected a typo in Chemical Protection skills, thanks to holyfork [celest] + +02/28 + * Fixed SQL Castle saving bugs [Lupus] + * Corrected Tiger Fist, Chain Crush, and Palm Push Strike damage, thanks to + Eskadron [celest] + * Updated Endure to be usable in GvG, but only gives the mdef bonus [celest] + * Some rewrites on the passive guild skills effects [celest] + +02/27 + * Fixed some bugs in Monk Job Quest. Now it's fully passable. [Lupus] +02/26 + * Added jA's dummy socket to prevent fd crashes [celest] + * Added some jA script commands: [Lupus] (first steps to add ELSE, FOR, WHILE, etc) + - getusersname (works like @WHO ATCommand, outputs by 10 names in the Pop-up window) + - dispbottom (print message in the common chat window) + - recovery (restore MaxHP/SP and revives all players on the server) + - getpetinfo (returns pet's name, type, class, hunger, intimacy) + - globalmes (works like Announce, but outputs in the common chat window) + - jump_zero (reserved - for future compatibility) + - select (reserved - for future compatibility) + - getmapmobs (# mobs on a named map, use "this" for current map) + check script.c for their paremeters (in English) +02/25 + * Fixed npc_dequeue, testing on remove of RoVeRT's npc timer system [Shinomori] +02/24 + + * Re-added missing cart dupe-proof code. From Freya [Lupus] + * Some rewrites on Basilica [celest] + * Fixed another bad typo in skill list_num reading, thanks to orn [celest] + * Fixed Steal Item Rate. It has been multiplied twice on common_item_drop value for any kinds of items. [Lupus] + e.g. If you set droprate of comman items to 500%, then even rare items could be stolen more easily. Thanks to Freya + * Items Droprate fix. Now it adjusts correctly, w/o overflows. Thanks to Freya [Lupus] + * mob DBbs EXP reading fix. w/o overflows. Thanks to Freya [Lupus] + +02/23 + * Added bAddItemHealRate [celest] + * Fixed a crash if adding an offline player to a party, thanks to Alex14 + [celest] + * Fixed a crash with Warp [celest] + * New Cards: Some fixes, revisions, additions [Lupus] + * Fixed char server crash when sending wisp with a "'" in the names [celest] + * Fixed Backstab not checking for and consuming arrows [celest] + * Fixed another bad typo causing @allskill to not add points into advanced job + skills [celest] + * Fixed a bad typo in status.c's StatusChangeTable [celest] + * Corrected Spiral Pierce's hits in the skill_db [celest] + * Moved /common/*.o into a obj folder when compiling [celest] + * Updated core and map server to jA 1094~1115 [celest] + - Added End_of_exam's Memory Manager for detecting memory problems. + To enable remove the // in malloc.c line 11 + // #define USE_MEMMGR + - Added @npctalk and @pettalk + - Added support for jA's local zlib + - Fixed a bug with path search long + - Updated malloc.c to support Memwatch + - Added DB data loss detection + - Added db/skill_unit_db.txt + - Updated skill unit system + - Changed Waterball to the new timerskill system + ~ For more detailed logs check 'Readme-jap' (knowledge in japanese required, + obviously ^^;) + Please test if there's any skills that might have suddenly stopped working, + thanks ^^; + +02/22 + * Revised New Cards, added missing effects, fixed bugs [Lupus] + ~20 cards to check left 8) But on 22 Feb some new cards have been announced T__T' + * Cleaned up some compiler warnings [SVN 1158: MouseJstr] + * Added perl regular expression support.. look at src/map/npc_chat.c + for all the dirt on the new features. To build it, you have + to enable the PCRE_SUPPORT #define and you also have to + build/install the pcre library. [SVN 1157: MouseJstr] + +02/21 + * Added actual item_db.sql into sql-files. [Lupus] + * Added actual mob_db.sql into sql-files. If you use SQL Mob DB then update it [Lupus] + * Updated Bleeding effect [celest] + * Removed some unused code for Graffiti [celest] + +02/20 + * Char SQL: Rewrote/Fixed the castle save function, now the sql version saves castles! [Sirius] + * Fixed the /mm /mapmove command access bug [Sirius] + * Added skill requirements for the new guild skills [celest] + * Allow Emergency Recall to be cast in guild castles even if nowarp and + nowarpto mapflags are enabled [celest] + * Add 'minimum job level required' for skill_tree reading [celest] + - Berserk now requires job level 50 + * Added Spring Trap to be able to trigger ankle snare traps that aren't + activated yet [celest] + * Added a fix in guild.c by Mellowz [celest] + * Some rewrites on the pet skill bonuses system -- also fixes pet bonuses + not effecting stats as they should [celest] + * Check whether a monster is still alive before starting a status change + -- also fixes the status_change_timer nullpo errors with grimtooth [celest] + +02/19 + * Added bSubSize, bHPGainValue, and bDamageWhenUnequip [celest] + * Updated bSPDrainValue/Rate to accept a 'type' [celest] + * Set baby class players' size to 0(small) [celest] + * Fixed item_db2.txt reading printing wrong number of entries read [celest] + * Fixed @allskill not giving the newer stalker, whitesmith and creator skills + [celest] + +02/18 + * Fixed a bug with statpoint.txt reading and giving too much stat points, + thanks to Benz / eAthenaC [celest] + * Fixed client errors when pecopeco Lord Knights/Paladins log in with a weapon + equipped [celest] + * Added bAddRace2 -- check item_bonus.txt [celest] + * Added mob_race2_db.txt -- contains 'main races' of certain monsters [celest] + * Updated description for backup_txt in char_athena.conf a bit [celest] + * Set read_map_from_cache to 2 (enable compression), and map_cache_file back to + saving in /db instead of /save, as suggested by Poki#3 [celest] + * Updated description for auto_counter_type, and set plaer_auto_counter_type + to 0 by default, as suggested by Poki#3 [celest] + * Use the event names from script_athena.conf to check whenever a player event + trigger is being read/set [celest] + * Removed an unused save/bank.txt [celest] + * Added some new cards effects. (check DB\changelog.txt) [Lupus] + +02/17 + * Now all mobs have 10 drops slots. the last one is used for Cards Drops [Lupus] + Don't forget to update your SQL files (Drop Log: logs.sql and db_tables.sql + if u were using SQL Mobs DB. Update it from TXT! ) + * Fixed Branch Log TXT filename [Lupus] + * Made all logs work with compiled TXT Server, too (removed old #ifndef) [Lupus] + * Added 4 columns into mob_db.txt (check DB\changelog.txt) [Lupus] + * Fixed some mobs drops (Whisper, etc) and some MVP mobs (bonuses were shifted...) [Lupus] + * Readded Chemical Protection -- i forgot to check for it when changing some + jA stuff earlier, sorry ^^; [celest] + * Removed some old eA code that was causing Frost Nova to do an extra hit + [celest] + * Corrected Vulcan Arrow's hits in skill_db -- the bug appeared when the + correct numbers hardcoded were removed [celest] + * Readded zlib and zconf .h files to under /lib for compiling in Windows, + thanks to Ser [celest] + * Fixed some compile errors in Windows, thanks to Ser [celest] + * Changed remove_control_characters back to supporting korean chars [celest] + * Moved some other code around [celest] + * Added Shinomori's changes to Dissonance -- don't increment the timer again + if the target has died [celest] + * Changed some nullpo checks back to normal null checks -- in some situations + it would be normal to get a NULL [celest] + * Changed some nullpo checks to print some debug information [celest] + * Added some sd checks before calling pc_blockskill [celest] + * Added Dino9021's fix for SQL char's friend list updating [celest] + * Fixed a crash if the player invited to join a guild is not online, thanks to + Alex14 [celest] + * Find the guild invitation sender first before clearing its ID [celest] + + * Added 2 new script commands to support 2/15's cards patch... most of the + effects in kRO should be available now ^^ [celest] + + - isequipped(...): Accepts a list of item ID's and checks whether all of + the items/cards have been equipped. + - isequippedcnt(...): Same as above, except it returns how many of the items + are being equipped + + Example: if(isequipped(4002,4004,4006)) bonus bStr,1; + +02/16 + * Char SQL: Fixed the Whisper chat on splittet mapservers (i think now all features work!) [Sirius] + + * Added 3 more of the new card effects -- check item_bonus.txt [celest] + + * Added 'bonus4' to support the new card effects that might need up to 4 + parameters [celest] + * Set 'killerrid' and do PCKillEvent before calling PCDieEvent, thanks to + mrmagoo for pointing it out [celest] + + * Added some new script event related options to script config [celest] + + - [die/kill/login/logout]_event_name: Name of script to activate when an + event has occured + - event_requires_trigger: whether or not a 'set [EventName],1;' has to be + defined first for the event to be activated + + * Added 8 of the new card effects on the 2/15's patch (still untested and + not yet added to the item_db) + - Refer to doc/item_bonus.txt for description + + * Minor rewrites on self and enemy weapon/armor breaking during battle [celest] + * Added missing code for 'bBreakWeaponRate' and 'bBreakArmorRate' effects + [celest] + * Added missing code for 'bAddStealRate' effect [celest] + * Removed redundant 'infinite_autospell' in map_session_data [celest] + * Fixed Treasure Box spawn bug in all castles. [Lupus] + * Fixed wrong PresentLOG (it wasn't showing PRESENT BOX type ID) [Lupus] + * Expanded Monsters Drops Slots from 8 to 10. Everywhere in the sources. [Lupus] + But in TXT / SQL monsters DB reading functions, I added a temp plug + to make eA work fine with existing DBs. It reads only 8 drops and fills + 9th and 10th drops with Zero. + On expanding MOB_DB.TXT we'll remove that plug. + We are adding new cards and some monsters + have no free slots for them. Current state is tested and works fine. + +02/15 + * Allow Potion Pitcher to be able to cast on yourself -- i've almost forgot + about this, thanks to Filougarou and Poki#3 for the fix ^^; [celest] + * Added Wallex's changes for weapon skills to read list_num from the skill_db + when calculating damage [celest] + * Login / Login SQL: Fixed the EXE-Version check (now it works finally :) [Sirius] + * Char SQL: Fixed the '0x2b05' reply to the mapserver (now multi - mapservers works again!) + * Rewrote skill blocking system that was allowing people to bypass blocking + time simply by casting a different skill [celest] + * Edited out some inconsistencies with skillnotok [celest] + * Corrected Investigate's damage calculation, thanks to matthias [celest] + * Generate the remaining entries of the stat point DB if the number of + entries in db/statuspoints.txt is less than MAX_LEVEL, or statuspoints.txt + was not found [celest] + * Try to spawn the player at a default map ("prontera.gat") when logging in if + the save point map was not found [celest] + +02/13 + * added an @autoloot switch that Upa-kun has forgotten [Shinomori] + * changed pet_skillattack_timer and corrected the poison spore attack + * tighter check's on "unknown skill" error; but added prints to trace it + * Added Wallex's changes to only evoke script_rid2sd if agitcheck(1) is used + [celest] + * Merged jA's equipment breaking system into the current one, and corrected + items with unbreakable effects in the item_db [celest] + - "bonus bUnbreakable,[chance];" changed to + "bonus bUnbreakable[Weapon/Armor/Helm/Shield],0;" + +02/12 + * Merged Dexity's pc_statpointdb into pc_readdb, changed statp's string + array to short (less memory), and fixed the db not giving status points if + character level is above 255 [celest] + * fixing and optimizing sharp shooting + have implemented two different versions, just have a look and + decide which to use, description is in the code [Shinomori] + * Changed default map cache path from db/map.info to save/mapinfo.txt [celest] + * Removed old code for Sharp Shooting (still a little buggy) [celest] + * Merged Shinomori's code into map_foreachinpath [celest] + +02/11 + * mob.c fixed doubling entries in DROPS LOG, optimized [Lupus] + * item_noequip.txt now you can disable named consumable items + during GvG / PvP, too by Maya, optimized and checked [Lupus] + NOTE: Get rid of old cards on your server!!! IDs: 4149-4332 + before using of this item_db.txt (some cards have changed their IDs) + and it could cause ALIEN cards in your players equipment 8)) + i.g. a weapon compounding CARDS inserted in armor, etc... + * item_db.txt Massive update: [Lupus] + - Added all new missing items (up to st.Valentine's Day Event) + - Added new cards 4149-4332, sorted them and set their sripts. + - Fixed some names, typos, weigths and prices + * Commented out old custom cards from Old_Card_Album.txt till we brush them up [Lupus] + * Removed old custom cards from MOBs drops [Lupus] + thanks to Landarma(new items templates) Poki#3(removing cards from drops) + * Tidied up battle_check_target abit [celest] + * Updated traps to affect allies as well in GvG [celest] + * Check if login server is online before setting character to online (in SQL), + thanks to Alex14 [celest] + * Synchronise storage as well when saving character to cut down on item + rollbacks or duping, by Yor / Frea [celest] + * Added fix for super novices' Guardian Angel system crashing when base_exp = 0 + thanks to Alex14 [celest] + * not realy fixing the "unknown skill" error + but returning skill_castend_damage_id when called with skillid < 0 + still need to search a reason why it is called with -1 [Shinomori] + * EXPERIMENTAL: Reduced memory used for the skill_tree DB by 30+mb [celest] + * Added script commands isday and isnight - checks whether its night or + daytime. Example: if(isnight()) ... [celest] + * Skill Updates [celest] + - Sharp Shooting: Dropped jA's and kA's code and wrote a new + map_foreachinpath function in map.c -- about 14 times faster, but still + uncomplete + - Ankle Snare: Added matthias' suggestion to let agility reduce more trap + time, but no less than 3 seconds. + - Magnum Break: simplified code a bit, and changed to non-targetting / + automatically damages an area around the caster + - Tiger Fist: enable it to be used by its own besides as a part of + the combo skills + - Devotion: Fixed maximum level difference not reading its setting from + battle_athena.conf, thanks to leinsirk + - Soul Burn: Added some safety checks + +02/10 + * Login/Login SQL: fixed the client version check function [Sirius] + +02/09 + * Added conf-tmpl/readme.txt, explaining the import folder [1066: Ajarn] + * SQL Char: Rewrote the char_create function (now it's faster/optimized) [Sirius] + * SQL Char: Fixed the reply if a charname is invalid on create (now it replys denied..) [Sirius] + * SQL Char: Added a Character limit per Account (can be set in the config) [Sirius] + * SQL Char: Optimized some SQL-Querys [Sirius] + +02/06 + * NULL entries for guild data fixed [Credit to Sirius] [1060: Ajarn] + * Login server uses login_db_userid and login_db_user_pass for + queries now [Credit to Sirius] [1059: Ajarn] + * Login server can now check clientversion in clientinfo + [Credit to Sirius] [1059: Ajarn] + * Fixed txt build compile problems[1057: MouseJstr] + * Corrected end-of-line issues in source code [1056: MouseJstr] + * Coded new command: @MOBINFO [Lupus] + the command has also 2 aliases: @monsterinfo, @mi + It shows all Monster stats, Element, Race and stuff + It shows all items with their drop chance + It also shows MVP bonuses (MVP EXP, MVP Drops) + 02/05 * increased the max_files allowed in a grf [1054: MouseJstr] * Changed the way char deletion works for SQL [1051: Ajarn] diff --git a/db/const.txt b/db/const.txt index 9548c2bb7..f78d10b25 100644 --- a/db/const.txt +++ b/db/const.txt @@ -254,6 +254,7 @@ bLoseSPWhenUnequip 2029 bExpAddRace 2030 bSPGainRace 2031 bSPSubRace2 2032 +bAddEffWhenHitShort 2033 Eff_Stone 0 diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 13dac4169..d0113595d 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -121,7 +121,7 @@ bonus2 bMagicSubRace,n,x; Magical damage x% reduction from n race 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) bonus2 bAddEle,n,x; In n attribute the damage addition of x% 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus2 bMagicAddEle,n,x In n attribute the damage addition of x% (only magical attack) +bonus2 bMagicAddEle,n,x In n attribute the damage addition of x% (only magical attack) 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality bonus2 bSubEle,n,x; Damage x% reduction from n attribute 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality @@ -160,6 +160,8 @@ bonus bDamageWhenUnequip,n; Lose n HP when the item is unequipped bonus2 bCriticalAddRace,n,x; Increase critical + n vs. enemies of type x bonus2 bHPLossRate,n,x; Lose n amount of hp every x amount of time bonus2 bAddEffWhenHit,n,x; n% chance to cause x state to the enemy when + being hit by physical damage +bonus2 bAddEffWhenHitShort,n,x; n% chance to cause x state to the enemy when being hit by physical close range damage bonus2 bSkillAtk,n,x; Increase damage of skill n by x% bonus2 bAddDamageByClass,n,x; When being hit by monster of class n increase @@ -176,7 +178,7 @@ bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when bonus3 bSPDrainRate,n,x,y; When attacking there is a n% chance to either gain SP equivalent to x% of damage dealt, OR drain the amount of sp from the enemy. - y:0=gain sp 1:drain enemy sp + y:0=gain sp 1:drain enemy sp bonus3 bSPDrainValue,n,x,y; When attacking there is a n% chance to either gain x SP, OR drain the amount of sp from the enemy. y:0=gain sp 1:drain enemy sp diff --git a/src/map/map.h b/src/map/map.h index 0193c315e..ceddea0e8 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -286,6 +286,7 @@ struct map_session_data { int critaddrace[12]; short no_regen; int addeff3[10]; + short addeff3_type[10]; short autospell2_id,autospell2_lv,autospell2_rate,autospell2_type; int skillatk[2]; unsigned short unstripable_equip; @@ -659,7 +660,7 @@ enum { SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020 SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025 SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP, SP_ADD_ITEM_HEAL_RATE, SP_LOSESP_WHEN_UNEQUIP, SP_EXP_ADDRACE, // 2026-2030 - SP_SP_GAIN_RACE, SP_SUBRACE2, + SP_SP_GAIN_RACE, SP_SUBRACE2, SP_ADDEFF_WHENHIT_SHORT // 2031-2033 }; enum { diff --git a/src/map/pc.c b/src/map/pc.c index dc5792327..de289a33b 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1829,8 +1829,16 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) sd->critaddrace[type2]+=val; break; case SP_ADDEFF_WHENHIT: - if(sd->state.lr_flag != 2) + if(sd->state.lr_flag != 2) { + sd->addeff3[type2]+=val; + sd->addeff3_type[type2]=1; + } + break; + case SP_ADDEFF_WHENHIT_SHORT: + if(sd->state.lr_flag != 2) { sd->addeff3[type2]+=val; + sd->addeff3_type[type2]=0; + } break; case SP_SKILL_ATK: if(sd->state.lr_flag != 2) { @@ -3198,10 +3206,8 @@ static int pc_walk(int tid,unsigned int tick,int id,int data) int moveblock; int x,y,dx,dy; - sd = map_id2sd(id); -#ifndef _WIN32 - nullpo_retr_f(0, sd, "id=%d", id); -#endif + if ((sd = map_id2sd(id)) == NULL) + return 0; if(sd->walktimer != tid){ if(battle_config.error_log) diff --git a/src/map/skill.c b/src/map/skill.c index d84a18d7a..1f891e944 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1020,10 +1020,11 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int } if((sd||dstsd) && skillid != MC_CARTREVOLUTION && attack_type&BF_WEAPON){ /* カ?ドによる追加?果 */ - int i; + int i, type; int sc_def_card=100; for(i=SC_STONE;i<=SC_BLIND;i++){ + type=i-SC_STONE; //?象に?態異常 switch (i) { case SC_STONE: @@ -1046,17 +1047,17 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int if (sd) { if(!sd->state.arrow_atk) { - if(rand()%10000 < (sd->addeff[i-SC_STONE])*sc_def_card/100 ){ + if(rand()%10000 < (sd->addeff[type])*sc_def_card/100 ){ if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]); - status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[type]); + status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[type],7),0); } } else { - if(rand()%10000 < (sd->addeff[i-SC_STONE]+sd->arrow_addeff[i-SC_STONE])*sc_def_card/100 ){ + if(rand()%10000 < (sd->addeff[type]+sd->arrow_addeff[type])*sc_def_card/100 ){ if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[i-SC_STONE]); - status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",sd->bl.id,i,sd->addeff[type]); + status_change_start(bl,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[type],7),0); } } } @@ -1082,25 +1083,26 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int if (sd) { if(!sd->state.arrow_atk) { - if(rand()%10000 < (sd->addeff2[i-SC_STONE])*sc_def_card/100 ){ + if(rand()%10000 < (sd->addeff2[type])*sc_def_card/100 ){ if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]); - status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[type]); + status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[type],7),0); } } else { - if(rand()%10000 < (sd->addeff2[i-SC_STONE]+sd->arrow_addeff2[i-SC_STONE])*sc_def_card/100 ){ + if(rand()%10000 < (sd->addeff2[type]+sd->arrow_addeff2[type])*sc_def_card/100 ){ if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[i-SC_STONE]); - status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,sd->addeff2[type]); + status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[type],7),0); } } } - if (dstsd && ((sd && !sd->state.arrow_atk) || (status_get_range(src)<=2)) && - rand()%10000 < dstsd->addeff3[i-SC_STONE]*sc_def_card/100){ + if (dstsd && rand()%10000 < dstsd->addeff3[type]*sc_def_card/100){ + if (dstsd->addeff3_type[type] != 1 && ((sd && !sd->state.arrow_atk) || (status_get_range(src)<=2))) + continue; if(battle_config.battle_log) - printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,dstsd->addeff3[i-SC_STONE]); - status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[i-SC_STONE],7),0); + printf("PC %d skill_addeff: cardによる異常?動 %d %d\n",src->id,i,dstsd->addeff3[type]); + status_change_start(src,i,7,0,0,0,(i==SC_CONFUSION)? 10000+7000:skill_get_time2(sc2[type],7),0); } } } diff --git a/src/map/status.c b/src/map/status.c index 493544677..f5098bd20 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -498,6 +498,7 @@ int status_calc_pc(struct map_session_data* sd,int first) sd->autospell2_id = sd->autospell2_lv = sd->autospell2_rate = 0; memset(sd->critaddrace,0,sizeof(sd->critaddrace)); memset(sd->addeff3,0,sizeof(sd->addeff3)); + memset(sd->addeff3_type,0,sizeof(sd->addeff3_type)); memset(sd->skillatk,0,sizeof(sd->skillatk)); sd->add_damage_class_count = sd->add_damage_class_count_ = sd->add_magic_damage_class_count = 0; sd->add_def_class_count = sd->add_mdef_class_count = 0; -- cgit v1.2.3-70-g09d2 From 47b830dbd449936e3dffc96424f025930bad719f Mon Sep 17 00:00:00 2001 From: DracoRPG Date: Sat, 2 Apr 2005 20:34:21 +0000 Subject: Cards and item updates, 4 different bUnstripable effects git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1382 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-SVN.txt | 5 +- db/Changelog.txt | 8 ++ db/const.txt | 4 + db/item_db.txt | 54 ++++++------ doc/item_bonus.txt | 254 ++++++++++++++++++++++++----------------------------- src/map/map.h | 3 +- src/map/pc.c | 45 ++++++---- 7 files changed, 188 insertions(+), 185 deletions(-) (limited to 'doc') diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 9ef407649..457e275c7 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,6 +1,8 @@ Date Added 04/02 + * Added bonuses bUnstripable[Weapon|Armor|Helm|Shield] + instead of just bUnstripable that worked only for armor [DracoRPG] * Updated Tiger Knucke Fist's 'fixed state' effect [celest] * Allowed people to enable/disable using the online column via 'register_users_online' in the login_athena.conf [Codemaster] @@ -137,7 +139,8 @@ Date Added * Fixed a typo in my fix for Stalk / Tunnel Drive increasing instead of decreasing speed, sorry [DracoRPG] * Rewrote a little bit Improve Dodge [DracoRPG] - The speed bonus does not effect when Cloaked - - Assassins & Rogues get +4 Flee/lv, but all other jobs can get +3/lv if they have the skill (not only Thiefs & Super Novices) + - Assassins & Rogues get +4 Flee/lv, but all other jobs can get +3/lv + if they have the skill (not only Thiefs & Super Novices) * Some minor changes to Sacrifice in battle.c [celest] * Set the Emperium to be immune to Sacrifice [celest] * Set the Emperium to be have max status effects immunity [celest] diff --git a/db/Changelog.txt b/db/Changelog.txt index 9557cb1db..b0a1eab32 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -7,6 +7,14 @@ Ayathoya items == 70% Added but no effect ( all are "etc" itens) Einboroch items == 5% Skill databases == celest working on them i believe. + +04/02 + * More new cards and fixes [DracoRPG] + - added Acolyte, Archer and Merchant sets effects + - added Turtle General Card effect + - corrected Job_Super_Novice -> Job_SuperNovice for Lude and Quve Cards + - autospell weapons (except Fireblend, Ice Falchion and Electric Guitar) + give no more the skill so it can't be used when you want 04/01 * New cards updates and additions [DracoRPG] - added Mage and Swordman sets effects diff --git a/db/const.txt b/db/const.txt index f78d10b25..673c5b9de 100644 --- a/db/const.txt +++ b/db/const.txt @@ -255,6 +255,10 @@ bExpAddRace 2030 bSPGainRace 2031 bSPSubRace2 2032 bAddEffWhenHitShort 2033 +bUnstripableWeapon 2034 +bUnstripableArmor 2035 +bUnstripableHelm 2036 +bUnstripableShield 2037 Eff_Stone 0 diff --git a/db/item_db.txt b/db/item_db.txt index 78d05ec32..5f355fcb5 100644 --- a/db/item_db.txt +++ b/db/item_db.txt @@ -498,7 +498,7 @@ 1164,Muramasa,Muramasa,4,20,0,1000,155,,1,0,16514,2,34,4,48,3,{},{ bonus bCritical,30; bonus bAspdAddRate,8; bonus2 bAddEff2,Eff_Curse,200; } 1165,Masamune,Masamune,4,20,0,1000,200,,1,0,16514,2,34,4,48,3,{},{ bonus bFlee,30; bonus bStr,-5; bonus bAspd,2; bonus bDefRate,-50; bonus bDef2Rate,-50; }, 1166,Dragon_Slayer,Dragon Slayer,4,20,0,1300,150,,1,0,16514,2,34,4,48,3,{},{ bonus bIgnoreDefRace,9; bonus2 bAddRace,9,15; } -1167,Schweizersabel,Schweizersabel,4,20,0,1600,160,,1,0,16514,2,34,4,48,3,{},{ bonus bAtkEle,4; skill 20,3; bonus bDef,1; bonus3 bAutoSpell,20,3,25; } +1167,Schweizersabel,Schweizersabel,4,20,0,1600,160,,1,0,16514,2,34,4,48,3,{},{ bonus bAtkEle,4; bonus bDef,1; bonus3 bAutoSpell,20,3,25; } 1168,Zweihander,Zweihander,4,20,0,2200,200,,1,0,16514,2,34,4,48,3,{},{ bonus bUnbreakableWeapon,0; } 1169,Executioner_,Executioner,4,20,0,2200,155,,1,0,16514,2,34,4,48,3,{},{ bonus bIgnoreDefRace,7; bonus2 bAddRace,7,20; bonus2 bSubRace,7,-10; bonus bAtkEle,7; } 1170,Katzbalger,Katzbalger,4,20,0,2000,175,,1,0,16514,2,34,4,48,3,{},{ bonus bVit,10; bonus bDef,10; } @@ -621,10 +621,10 @@ 1465,Halberd__,Halberd,4,54000,0,2500,165,,3,0,16514,2,34,3,33,5,{},{} 1466,Crescent_Scythe,Crescent Scythe,4,20,0,2500,180,,3,0,16514,2,34,4,48,5,{},{ bonus bCritical,30; bonus bHit,10; } 1467,Bill_Guisarme,Bill Guisarme,4,20,0,1000,183,,3,0,16514,2,34,4,48,5,{},{ bonus2 bAddRace,2,10; bonus2 bAddRace,7,5; } -1468,Zephyrus,Zephyrus,4,20,0,2000,170,,3,0,16514,2,34,4,48,5,{},{ bonus bAtkEle,4; skill 21,3; bonus2 bAddEff,Eff_Silence,200; bonus3 bAutoSpell,21,3,25; } +1468,Zephyrus,Zephyrus,4,20,0,2000,170,,3,0,16514,2,34,4,48,5,{},{ bonus bAtkEle,4; bonus2 bAddEff,Eff_Silence,200; bonus3 bAutoSpell,21,3,25; } 1469,Longinus's_Spear,Longinus's Spear,4,20,0,2500,180,,3,0,16514,2,34,4,48,5,{},{ bonus bAtkEle,7; bonus2 bAddRace,7,10; bonus2 bAddRace,8,10; } -1470,Brionac,Brionac,4,20,0,3000,190,,3,0,16514,2,34,4,48,5,{},{ bonus bAtkEle,6; skill 28,5; skill 13,3; bonus3 bAutoSpell,13,3,25; bonus2 bAddRace,10,5; }, -1471,Hellfire,Hellfire,4,20,0,3500,200,,3,0,16514,2,34,4,48,5,{},{ bonus bAtkEle,3; skill 17,3; bonus3 bAutoSpell,17,3,25; bonus bStr,3; } +1470,Brionac,Brionac,4,20,0,3000,190,,3,0,16514,2,34,4,48,5,{},{ bonus bAtkEle,6; skill 28,5; bonus3 bAutoSpell,13,3,25; bonus2 bAddRace,10,5; }, +1471,Hellfire,Hellfire,4,20,0,3500,200,,3,0,16514,2,34,4,48,5,{},{ bonus bAtkEle,3; bonus3 bAutoSpell,17,3,25; bonus bStr,3; } // 2 Handed Staffs 1472,Staff_of_Soul,Soul Staff,4,20,0,1400,25,,1,0,66052,2,34,3,73,10,{},{ bonus bInt,5; bonus bAgi,2; bonus bMatkRate,15; } 1473,Wizardy_Staff,Wizardy Staff,4,20,0,2400,120,,1,0,66052,2,34,4,90,10,{},{ bonus bInt,6; bonus bDex,2; bonus bMatkRate,15; } @@ -656,7 +656,7 @@ 1525,Long_Mace,Long Mace,4,20,0,800,135,,3,0,33040,2,2,4,40,8,{},{ bonus bLongAtkDef,10; } 1526,Slash,Slash,4,20,0,1000,145,,1,0,33040,2,2,4,40,8,{},{ bonus2 bAddRace,1,15; bonus2 bWeaponComaRace,1,50; } 1527,Quadrille,Quadrille,4,20,0,900,165,,1,0,33040,2,2,4,40,8,{},{ bonus2 bAddRace,1,10; bonus2 bAddRace,7,10; bonus2 bAddEle,2,10; } -1528,Grand_Cross,Grand Cross,4,20,0,1500,140,,1,0,33040,2,2,4,40,8,{},{ bonus bAtkEle,6; skill 77,3; bonus3 bAutoSpell,77,3,25; bonus2 bHPDrainRate,100,1; }, +1528,Grand_Cross,Grand Cross,4,20,0,1500,140,,1,0,33040,2,2,4,40,8,{},{ bonus bAtkEle,6; bonus3 bAutoSpell,77,3,25; bonus2 bHPDrainRate,100,1; }, 1529,Iron_Driver,Iron Driver,4,20,0,3000,155,,1,0,33024,2,2,3,78,8,{},{} 1530,Mjolnir,Mjolnir,4,20,0,6000,250,,1,0,8701363,2,2,4,95,8,{},{ bonus bAtkEle,4; bonus bDex,40; bonus bStr,15; bonus bAspdRate,30; } 1531,Spanner,Spanner,4,20,0,2500,115,,1,0,33040,2,2,3,55,8,{},{ bonus2 bAddEff,Eff_Blind,100; bonus2 bAddEff,Eff_Stan,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Freeze,100; } @@ -1156,7 +1156,7 @@ 4119,Bathory_Card,Bathory Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDefEle,7; } 4120,Petit__Card,Petit Card,6,20,0,10,,,,,,,32,,,,{},{ bonus2 bSubRace,9,30; } 4121,Phreeoni_Card,Phreeoni Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bHit,100; } -4122,Deviruchi_Card,Deviruchi Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bStr,1; bonus2 bResEff,Eff_Blind,10000; } +4122,Deviruchi_Card,Deviruchi Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bStr,1; bonus2 bResEff,Eff_Blind,10000; } 4123,Eddga_Card,Eddga Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bInfiniteEndure,0; bonus bMaxHPrate,-25; } 4124,Medusa_Card,Medusa Card,6,20,0,10,,,,,,,32,,,,{},{ bonus2 bSubRace,6,15; bonus2 bResEff,Eff_Stone,10000; } 4125,Deviace_Card,Deviace Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace,7,7; bonus2 bAddRace,2,7; bonus2 bAddRace,3,7; bonus2 bAddRace,4,7; } @@ -1186,12 +1186,10 @@ // New Cards // //OK = Tested, Works fine. //??OK = looks right, but not properly tested yet - //bonus2 bAddItemHealRate,n,x; Increases HP recovered by n type items by x% -// n:1=potions 2=herbs 3=fruits 4=meat 5=candy -// 6=juice 7=sashimi -//bonus3 bAddMonsterDropItem,n,x; When pushing down the monster with physical attack, the probability which drops item n +x% (the item which the monster drops unrelated ones) -// 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) +// n:1=potions 2=herbs 3=fruits 4=meat 5=candy 6=juice 7=sashimi +//bonus3 bAddMonsterDropItem,n,x; When killing a monster with physical attack, the probability which drops item n +x% (the item which the monster drops unrelated ones) +//0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster //=================================================================== 4149,Gargoyle_Card,Gargoyle Card,6,20,0,10,,,,,,,136,,,,{},{} //missing getitemonkill?? (item not implemented) @@ -1205,7 +1203,7 @@ 4157,Goblin_Archer_Card,Goblin Archer Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,1,7; } //OK 4158,Sky_Deleter_Card,Sky Deleter Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bNoRegen,1; bonus bHPGainValue,100;} // ??OK 4159,Nine_Tail_Card,Nine Tail Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bAgi,2; if(getrefine>8) bonus bFlee,20; } //OK -4160,Firelock_Soldier_Card,Firelock Soldier Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bStr,2; if(getrefine<=8) end; bonus bMaxHPrate,10; bonus bMaxSPrate,10; } //OK +4160,Firelock_Soldier_Card,Firelock Soldier Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bStr,2; if(getrefine<=8) end; bonus bMaxHPrate,10; bonus bMaxSPrate,10; } //OK 4161,Grand_Peco_Card,Grand Peco Card,6,20,0,10,,,,,,,769,,,,{},{ bonus4 bAutoSpellWhenHit,75,1,1,0; if(!isequipped(4031)) end; bonus bDef,3; bonus bVit,3; } //OK 4162,Grizzly_Card,Grizzly Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,2; if(isequipped(4074)) bonus2 bAddEffWhenHit,Eff_Blind,3000; } //OK 4163,Gryphon_Card,Gryphon Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bFlee,2; bonus bCritical,7; if (callfunc("Is_Sword_Class")!=0) bonus3 bAutoSpell,62,5,1; } //OK @@ -1231,24 +1229,24 @@ 4183,Vagabond_Wolf_Card,Vagabond Wolf Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bStr,1; if(isequipped(4029)) bonus bFlee,18; } //OK 4184,Lava_Golem_Card,Lava Golem Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,4,30; } //OK 4185,Rideword_Card,Rideword Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bInt,1; if(callfunc("Is_Holy_Class")) bonus bMdef,1; } //OK -4186,Raggler_Card,Raggler Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bStr,1; bonus bVit,1; } //OK +4186,Raggler_Card,Raggler Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bStr,1; bonus bVit,1; if(!isequipped(4233,4281,4321,4206)) end; bonus bLuk,10; bonus3 bSPDrainValue,100,2,0; bonus2 bSkillAtk,42,20; if(callfunc("Is_Merc_Class")==0) bonus bMagicDamageReturn,20; } //OK 4187,Raydric_Archer_Card,Raydric Archer Card,6,20,0,10,,,,,,,136,,,,{},{} //missing getitemonkill?? (item not implemented) 4188,Leib_Olmai_Card,Leib Olmai Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bSubEle,3,10; } //missing getitemonracekill?? 4189,Wraith_Dead_Card,Wraith Dead Card,6,20,0,10,,,,,,,16,,,,{},{ bonus2 bAddEffWhenHit,Eff_Curse,2000; } //missing getitemonracekill?? 4190,Wraith_Card,Wraith Card,6,20,0,10,,,,,,,136,,,,{},{} //missing getitemonkill?? (item not implemented) 4191,Loli_Ruri_Card,Loli Ruri Card,6,20,0,10,,,,,,,16,,,,{},{ bonus4 bAutoSpellWhenHit,28,3,5,0; } //OK 4192,Rotar_Zairo_Card,Rotar Zairo Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,5,7; } //OK -4193,Lude_Card,Lude Card,6,20,0,10,,,,,,,136,,,,{},{ if(Class==Job_Novice||Class==Job_Super_Novice||Class==4001) bonus3 bAutoSpellWhenHit,8,1,20; if(isequipped(4294)) bonus bMaxHP,300; } //??OK +4193,Lude_Card,Lude Card,6,20,0,10,,,,,,,136,,,,{},{ if(Class==Job_Novice||Class==Job_SuperNovice||Class==4001) bonus3 bAutoSpellWhenHit,8,1,20; if(isequipped(4294)) bonus bMaxHP,300; } //??OK 4194,Rybio_Card,Rybio Card,6,20,0,10,,,,,,,16,,,,{},{ if(readparam(bDex)<=77) bonus2 bAddEffWhenHit,Eff_Stan,1000; if(readparam(bDex)>77) bonus2 bAddEffWhenHit,Eff_Stan,3000; } //??OK 4195,Leaf_Cat_Card,Leaf Cat Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bSubEle,1,10; } //missing getitemonracekill?? 4196,Marin_Card,Marin Card,6,20,0,10,,,,,,,136,,,,{},{} //missing bRandomDrop,Item1,Chance,Item2,Chance,etc 4197,Mastering_Card,Mastering Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bLuk,1; if(isequipped(4001)) bonus bFlee,18; } //OK 4198,Maya_Purple_Card,Maya Purple Card,6,20,0,10,,,,,,,136,,,,{},{} //missing bIntravision (always see Cloaked & Hidden) -4199,Merman_Card,Merman Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bHPrecovRate,10; bonus bSPrecovRate,10; } //OK -4200,Megalith_Card,Megalith Card,6,20,0,10,,,,,,,64,,,,{},{ if(getrefine<6) bonus bMdef,7; } //OK +4199,Merman_Card,Merman Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bHPrecovRate,10; bonus bSPrecovRate,10; if(!isequipped(4297,4234,4252,4178)) end; bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(callfunc("Is_Bow_Class")==0) end; bonus2 bWeaponComaRace,2,500; } // missing increaseexponracekill +4200,Megalith_Card,Megalith Card,6,20,0,10,,,,,,,64,,,,{},{ if(getrefine<6) bonus bMdef,7; } //OK 4201,Majoruros_Card,Majoruros Card,6,20,0,10,,,,,,,16,,,,{},{ bonus2 bAddEffWhenHit,Eff_Stan,2000; } //?OK 4202,Civil_Servant_Card,Civil Servant Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddEle,8,20; } //OK -4203,Mutant_Dragonoid_Card,Mutant Dragonoid Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,15; if(getskilllv(17)==10) goto FB_10; bonus3 bAutoSpell,17,3,1; end; FB_10: bonus3 bAutoSpell,17,10,25; } //??OK +4203,Mutant_Dragonoid_Card,Mutant Dragonoid Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,15; if(getskilllv(17)==10) goto FB_10; bonus3 bAutoSpell,17,3,1; end; FB_10: bonus3 bAutoSpell,17,10,1; } //??OK 4204,Mini_Demon_Card,Mini Demon Card,6,20,0,10,,,,,,,64,,,,{},{ bonus2 bSubRace,2,-20; } //missing increaseexponracekill?? 4205,Mimic_Card,Mimic Card,6,20,0,10,,,,,,,136,,,,{},{} //missing getitemonkill?? 4206,Myst_Case_Card,Mystcase Card,6,20,0,10,,,,,,,769,,,,{},{} //missing getitemonkill?? @@ -1262,8 +1260,8 @@ 4214,Bloody_Murderer_Card,Bloody Murderer Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,4,7; } //OK 4215,Blazer_Card,Blazer Card,6,20,0,10,,,,,,,136,,,,{},{} //missing getitemonracekill?? 4216,Sasquatch_Card,Sasquatch Card,6,20,0,10,,,,,,,16,,,,{},{ bonus2 bAddEffWhenHit,Eff_Freeze,2000; } //??OK -4217,Enchanted_Peach_Tree_Card,Enchanted Peach Tree Card,6,20,0,10,,,,,,,32,,,,{},{ if(getskilllv(28)==10) goto HE_10; bonus3 bAutoSpell,28,1,1; end; HE_10: bonus3 bAutoSpell,28,10,1; } //??OK -4218,Succubus_Card,Succubus Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bMaxHP,1000; if(isequipped(4268)) goto L_INCUB; bonus bVit,-3; bonus bHPrecovRate,-20; end; L_INCUB: bonus bVit,4; bonus bHPrecovRate,30; } //??OK HpRecoveryRate != +30% when combo +4217,Enchanted_Peach_Tree_Card,Enchanted Peach Tree Card,6,20,0,10,,,,,,,32,,,,{},{ if(!getskilllv(28)==10) bonus3 bAutoSpell,28,1,1; if(getskilllv(28)==10) bonus3 bAutoSpell,28,10,1; if(!isequipped(4280,4185,4293,4312)) end; bonus bVit,10; bonus bCastrate,-10; bonus bUseSPRate,-10; if(callfunc("Is_Holy_Class")==0) end; bonus2 bSubRace,1,30; bonus2 bSubRace,6,30; } // missing increaseexponracekill?? +4218,Succubus_Card,Succubus Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bMaxHP,1000; if(isequipped(4268)) goto L_INCUB; bonus bVit,-3; bonus bHPrecovRate,-20; end; L_INCUB: bonus bVit,4; bonus bHPrecovRate,30; } //??OK HpRecoveryRate != +30% when combo 4219,Sage_Worm_Card,Sage Worm Card,6,20,0,10,,,,,,,136,,,,{},{} //missing getitemonkill?? 4220,Solider_Card,Solider Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDef,2; bonus bMdef,2; } //OK 4221,Skeleton_General_Card,Skeleton General Card,6,20,0,10,,,,,,,64,,,,{},{ bonus2 bSubRace,4,-20; } //missing increaseexponracekill?? @@ -1278,7 +1276,7 @@ 4230,Shinobi_Card,Shinobi Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bAgi,1; bonus4 bAutoSpellWhenHit,135,5,1,0; } //??OK 4231,Increase_Soil_Card,Increase Soil Card,6,20,0,10,,,,,,,,,,,{},{} 4232,Hermit_Plant_Card,Hermit Plant Card,6,20,0,10,,,,,,,,,,,{},{} -4233,Baby_Leopard_Card,Baby Leopard Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bLuk,3; if(!callfunc("Is_Merc_Class")) end; bonus bUnbreakableArmor,0; bonus bUnstrippable,0; } //??OK +4233,Baby_Leopard_Card,Baby Leopard Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bLuk,3; if(callfunc("Is_Merc_Class")==0) end; bonus bUnbreakableArmor,0; bonus bUnstripableArmor,0; } //??OK 4234,Anolian_Card,Anolian Card,6,20,0,10,,,,,,,16,,,,{},{ if(getskilllv(45)==10) goto IC_10; bonus4 bAutoSpellWhenHit,45,1,1,0; end; IC_10: bonus4 bAutoSpellWhenHit,45,10,1,0; } //??OK 4235,Cookie_Xmas_Card,Cookie Xmas Card,6,20,0,10,,,,,,,64,,,,{},{ bonus2 bSubRace,8,-20; } //missing increaseexponracekill?? 4236,Amon_Ra_Card,Amon Ra Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bAllStats,1; bonus4 bAutoSpellWhenHit,73,10,1+(readparam(bInt)>=99),0; } //??OK (X>=Y) returns 0 or 1 @@ -1321,16 +1319,14 @@ 4273,Shellfish_Card,Shellfish Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,5; bonus2 bAddDamageClass,1073,30; } //OK 4274,Zombie_Master_Card,Zombie Master Card,6,20,0,10,,,,,,,2,,,,{},{} //missing recoversponracekill?? 4275,Zombie_Prisoner_Card,Zombie Prisoner Card,6,20,0,10,,,,,,,64,,,,{},{ bonus2 bSubRace,1,-20; } //missing increaseexponracekill?? -4276,Lord_of_Death_Card,Lord of Death Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddEff,Eff_Stan,100; bonus2 bAddEff,Eff_Curse,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Bleeding,100; } //missing Coma Effect?? +4276,Lord_of_Death_Card,Lord of Death Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddEff,Eff_Stan,100; bonus2 bAddEff,Eff_Curse,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Bleeding,100; bonus2 bAddWeaponComaRace,11,30; } //??OK 4277,Zherlthsh_Card,Zherlthsh Card,6,20,0,10,,,,,,,32,,,,{},{ bonus bLuk,2; bonus2 bSkillAtk,316,10; bonus2 bSkillAtk,324,10; } //??OK 4278,Gibbet_Card,Gibbet Card,6,20,0,10,,,,,,,769,,,,{},{ if(getrefine<6) bonus bMdef,5; } //OK 4279,Earth_Deleter_Card,Earth Deleter Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bNoRegen,2; bonus bSPGainValue,15; } //??OK 4280,Geographer_Card,Geographer Card,6,20,0,10,,,,,,,16,,,,{},{ if(getskilllv(34)==10) goto BL_10; bonus4 bAutoSpellWhenHit,34,2,1,0; end; BL_10: bonus4 bAutoSpellWhenHit,34,10,1,0; } //??OK -4281,Zipper_Bear_Card,Zipper Bear Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,30; bonus3 bSPDrainValue,100,-1,0; if(!callfunc("Is_Merc_Class")) end; bonus bUnbreakableWeapon,0; bonus bUnstrippable,0; } //??OK +4281,Zipper_Bear_Card,Zipper Bear Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtk,30; bonus3 bSPDrainValue,100,-1,0; if(callfunc("Is_Merc_Class")==0) end; bonus bUnbreakableWeapon,0; bonus bUnstripableWeapon,0; } //??OK 4282,Tengu_Card,Tengu Card,6,20,0,10,,,,,,,136,,,,{},{} //missing getitemonkill?? -//for testing purpose: -4283,Test_Card,Test Card,6,20,0,10,,,,,,,2,,,,{},{ dispbottom "Test Card OK:"; dispbottom isequipped(4149)+" "+isequippedcnt(4149)+" "+cardscnt(4149)+" "+getrefine; } //For test purposes only -4283,Greatest_General_Card,Greatest General Card,6,20,0,10,,,,,,,,,,,{},{} +4283,Greatest_General_Card,Greatest General Card,6,20,0,10,,,,,,,136,,,,{},{ bonus3 bAutospell,261,1,1+callfunc("Is_Holy_Class"); } //??OK 4284,Chepet_Card,Chepet Card,6,20,0,10,,,,,,,2,,,,{},{ bonus3 bAutoSpell,28,5,5; } //??OK 4285,Choco_Card,Choco Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee2,5; bonus bFlee,10; } //OK 4286,Karakasa_Card,Karakasa Card,6,20,0,10,,,,,,,16,,,,{},{ if(readparam(bStr)<=77) bonus2 bAddEffWhenHit,Eff_Confusion,1000; if(readparam(bStr)>77) bonus2 bAddEffWhenHit,Eff_Confusion,3000; } //??OK @@ -1341,7 +1337,7 @@ 4291,Kobold_Leader_Card,Kobold Leader Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace2,2,30; } //OK 4292,Kobold_Archer_Card,Kobold Archer Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,3,7; } //OK 4293,Cookie_Card,Cookie Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bLuk,2; bonus2 bSkillAtk,156,10; } //OK -4294,Quve_Card,Quve Card,6,20,0,10,,,,,,,136,,,,{},{ if((Class==Job_Novice)||(Class==Job_Super_Novice)) bonus4 bAutoSpellWhenHit,29,1,20,0; if(isequipped(4193)) bonus bMaxSP,60; } //??OK +4294,Quve_Card,Quve Card,6,20,0,10,,,,,,,136,,,,{},{ if((Class==Job_Novice)||(Class==Job_SuperNovice)||(Class==4001)) bonus4 bAutoSpellWhenHit,29,1,20,0; if(isequipped(4193)) bonus bMaxSP,60; } //??OK 4295,Kraben_Card,Kraben Card,6,20,0,10,,,,,,,16,,,,{},{ bonus2 bAddEffWhenHit,Eff_Blind,2000; } //??OK 4296,Cramp_Card,Cramp Card,6,20,0,10,,,,,,,769,,,,{},{ if(isequipped(4028)) bonus bStr,3; } //missing getzenybychance?? 4297,Cruiser_Card,Cruiser Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,2,7; } //OK @@ -1352,14 +1348,14 @@ 4302,Tao_Gunka_Card,Tao Gunka Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bMaxHPrate,100; bonus bDef,-50; bonus bMdef,-50; } //??OK //4303,Some_card, Whisper Boss Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee,10; if(readparam(bStr)>80) bonus bAtk,20; if(readparam(bVit)>80) bonus bMaxHPrate,30; if(readparam(bLuk)>80) bonus bCritical,3; }; //Temp ID until the true one is found 4304,Tamruan_Card,Tamruan Card,6,20,0,10,,,,,,,32,,,,{},{ bonus bDef,2; bonus2 bSkillAtk,250,10; bonus2 bSkillAtk,251,10; } //??OK -4305,Turtle_General_Card,Turtle General Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtkRate,20; if(callfunc("Is_Sword_Class")!=0) bonus3 bAutoSpell,7,10,1; } //??OK +4305,Turtle_General_Card,Turtle General Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAtkRate,20; if(callfunc("Is_Sword_Class")) bonus3 bAutoSpell,7,10,1; } //??OK 4306,Toad_Card,Toad Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee2,1; if(isequipped(4014)) bonus bFlee,18; } //OK 4307,Beetle_King_Card,Beetle King Card,6,20,0,10,,,,,,,2,,,,{},{} //missing recoversponracekill?? 4308,Tri_Joint_Card,Tri Joint Card,6,20,0,10,,,,,,,2,,,,{},{} //missing recoversponracekill?? 4309,Parasite_Card,Parasite Card,6,20,0,10,,,,,,,32,,,,{},{ bonus bDef,1; bonus2 bSubEle,0,5; } //OK 4310,Panzer_Goblin_Card,Panzer Goblin Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,6,7; } //OK 4311,Permeter_Card,Permeter Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bSubEle,7,15; bonus2 bSubEle,9,15; } //OK -4312,Seal_Card,Seal Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bFlee,3; bonus bHit,10; if(!callfunc("Is_Holy_Class")) end; bonus2 bCriticalAddRace,1,9; bonus2 bCriticalAddRace,6,9; } //??OK +4312,Seal_Card,Seal Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bFlee,3; bonus bHit,10; if(callfunc("Is_Holy_Class")==0) end; bonus2 bCriticalAddRace,1,9; bonus2 bCriticalAddRace,6,9; } //??OK 4313,Punk_Card,Punk Card,6,20,0,10,,,,,,,4,,,,{},{ if(getskilllv(92)==5) goto QU_5; bonus4 bAutoSpellWhenHit,92,1,1,0; end; QU_5: bonus4 bAutoSpellWhenHit,10,5,1,0; } //??OK 4314,Penomena_Card,Penomena Card,6,20,0,10,,,,,,,32,,,,{},{ bonus2 bSubRace,0,30; } //OK 4315,Pest_Card,Pest Card,6,20,0,10,,,,,,,16,,,,{},{ if(readparam(bInt)<=77) bonus2 bAddEffWhenHit,Eff_Stone,1000; if(readparam(bInt)>77) bonus2 bAddEffWhenHit,Eff_Stone,3000; } //??OK @@ -1372,7 +1368,7 @@ 4322,High_Orc_Card,High Orc Card,6,20,0,10,,,,,,,32,,,,{},{ bonus bDef,1; } //missing damagereturnbychance?? 4323,Garm_Baby_Card,Garm Baby Card,6,20,0,10,,,,,,,2,,,,{},{ if(isequipped(4324)) goto GARM; bonus3 bAutoSpell,15,3,1; end; GARM: bonus3 bAutoSpell,15,3,2; } //??OK 4324,Garm_Card,Garm Card,6,20,0,10,,,,,,,16,,,,{},{ bonus2 bAddEffWhenHit,Eff_Freeze,5000; } //OK -4325,Harpy_Card,Harpy Card,6,20,0,10,,,,,,,4,,,,{},{ bonus2 bSubEle,0,15; bonus2 bSkillAtk,11,5; if(!isequipped(4208,4258,4309,4327)) end; bonus bMaxHP,500; bonus bDef,5; bonus bMDef,5; bonus2 bSkillAtk,14,10; bonus2 bSkillAtk,19,10; bonus2 bSkillAtk,20,10; if(!callfunc("Is_Magic_Class")) end; bonus bMatkRate,3; bonus bCastrate,-15; } //??OK +4325,Harpy_Card,Harpy Card,6,20,0,10,,,,,,,4,,,,{},{ bonus2 bSubEle,0,15; bonus2 bSkillAtk,11,5; if(!isequipped(4208,4258,4309,4327)) end; bonus bMaxHP,500; bonus bDef,5; bonus bMDef,5; bonus2 bSkillAtk,14,10; bonus2 bSkillAtk,19,10; bonus2 bSkillAtk,20,10; if(callfunc("Is_Magic_Class")==0) end; bonus bMatkRate,3; bonus bCastrate,-15; } //??OK 4326,Sea_Otter_Card,Sea Otter Card,6,20,0,10,,,,,,,136,,,,{},{ bonus2 bAddItemHealRate,7,50; bonus3 bAddMonsterDropItem,544,5,5000; bonus3 bAddMonsterDropItem,551,5,5000; } 4327,Bloody_Butterfly_Card,Bloody Butterfly Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bCastrate,30; bonus bNoCastCancel2,0; bonus2 bSkillAtk,18,5; } //??OK 4328,Hyegun_Card,Hyegun Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bFlee,15; bonus bCritical,1; if(isequipped(4090,4212)) bonus bAllStats,1; } //??OK diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index d0113595d..9560aa53f 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -1,140 +1,119 @@ //eAthena Items Scripting Manual -skill n,x; skill n of level x - -bonus bStr,n; STR + n -bonus bAgi,n; AGI + n -bonus bVit,n; VIT + n -bonus bInt,n; INT + n -bonus bDex,n; DEX + n -bonus bLuk,n; LUK + n - -bonus bAllStats,n; STR + n, AGI + n, VIT + n, INT + n, DEX + n, LUK + n - -bonus bMaxHP,n; MAXHP + n -bonus bMaxSP,n; MAXSP + n -bonus bMaxHPrate,n; MAXHP + n% -bonus bMaxSPrate,n; MAXSP + n% -bonus bAtk,n; ATK + n -bonus bAtk2,n; ATK2 + n -bonus bAtkRate attack power + n% -bonus bBaseAtk,n; Basic attack power + n -bonus bMatk,n; Magical attack power 1 + n and magical attack power 2 + n -bonus bMatk1,n; Magical attack power 1 + n -bonus bMatk2,n; Magical attack power 2 + n -bonus bMatkRate,n; Magical attack power + n% -bonus bMdef,n; Magical defensive power + n -bonus bDef,n; DEF + n -bonus bHit,n; On-target hit power + n -bonus bCritical,n; Critical + n -bonus bCriticalRate,n; Critical ratio + n% -bonus bFlee,n; Evasion power + n -bonus bFlee2,n; Perfection evasion + n -bonus bSpeed,n; Drift speed + n -bonus bAspd,n; Attack speed + n -bonus bSpeedRate,n; Drift speed + n% (just high ones application) -bonus bAspdRate,n; Attack speed + n% (just high ones application) -bonus bSpeedAddRate drift speed + n% -bonus bAspdAddRate attack speed + n% -bonus bAtkRange,n; Attack Range + n -bonus bCastrate,n; Cast rate + n% -bonus bUseSPrate,n; SP consumption + n% -bonus bHPrecovRate,n; HP automatic recovery ratio + n% (you exclude the recovery with skill) -bonus bSPrecovRate,n; SP automatic recovery ratio + n% (you exclude the recovery with skill) -bonus bDoubleRate,n; attack probability n% (with weapon disregard just high ones application) -bonus bDoubleAddRate,n; Double attack probability + n% (weapon disregard) -bonus bPerfectHitRate,n; On-target impact attack probability n% (just high ones application) -bonus bPerfectHitAddRate,n; On-target impact attack probability +n% -bonus bGetZenyNum,n; When pushing down the monster with physical attack, rand () ?? of %n+1 is obtained, (as for n just high ones application) -bonus bAddGetZenyNum,n; When pushing down the monster with physical attack, rand () ?? of %n+1 is obtained, (n is done +) -bonus bCriticalDef,n; Critical ? and others the trap it is, probability + n% -bonus bNearAtkDef,n; The damage of short-range attack n% reduction (magic and the trap, the ? is excluded) -bonus bLongAtkDef,n; damage of stand off attack n% reduction (magic and the trap, the ? is excluded) -bonus bMagicAtkDef the damage of magical attack n% reduction -bonus bMiscAtkDef MISC attack (the trap and ?) the damage n% reduction - -bonus bIgnoreDefRace,n Defense disregard of enemy of n race - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than (normal monster) boss monster -bonus bIgnoreDefEle,n; Defense disregard of enemy of n attribute - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus bIgnoreMDefRace n race the magical defensive power disregard damage - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) -bonus bIgnoreMDefEle n attribute the magical defensive power disregard damage - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus bDefRatioAtkRace,n; n race if defensive power is high the high extent big damage is given, (defense disregard) - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) -bonus bDefRatioAtkEle,n; n attribute if defensive power is high the high extent big damage is given, (defense disregard) - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus bAtkEle,n; Attack with element n - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus bDefEle,n; Guard against element n - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus bHitRate,n; on-target hit ratio +n% -bonus bFleeRate,n; evasion ratio +n% -bonus bFlee2Rate,n; complete evasion ratio +n% -bonus bDefRate,n; earned-run average +n% (equipment) -bonus bDef2Rate,n; earned-run average +n% (those due to vit) -bonus bMdefRate,n; magical earned-run average +n% (equipment) -bonus bMdef2Rate,n; magical earned-run average +n% (those due to int) -bonus bSplashRange n; damage is given to the peripheral n cell of the target with usual weapon attack, if (as for n just high ones application, 1 if the 3*3, 2 the 5*5) -bonus bSplashAddRange n; damage is given to the peripheral n cell of the target with usual weapon attack, (range + n) - -bonus bInfiniteEndure,n; Unlimited Endure (n is meaningless) -bonus bRestartFullRecover,n; When reviving, HP and SP all recoveries (non mind there is no n) -bonus bNoCastCancel,n; The casting is not cancelled (non mind there is no n) -bonus bNoCastCancel2,n; The casting is not cancelled (is not cancelled even with GVG, n is meaningless) -bonus bNoSizeFix,n; The attack revision with the size of the monster is not received, (non mind there is no n) -bonus bNoWeaponDamage,n; The damage is not received to physical attack, (non mind there is no n) -bonus bNoMagicDamage,n; The damage is not received to magic, (including also the heel, non mind there is no n) -bonus bNoGemStone,n; When using skill, the gemstone is not consumed (non mind there is no n) - - -bonus2 bAddEff,Eff_Blind,n; With the establishment of n% dark grant -bonus2 bAddEff,Eff_Sleep,n; With the establishment of n% sleep grant -bonus2 bAddEff,Eff_Poison,n; With the establishment of n% poison grant -bonus2 bAddEff,Eff_Freeze,n; With the establishment of n% freezing grant -bonus2 bAddEff,Eff_Silence,n; With the establishment of n% silence grant -bonus2 bAddEff,Eff_Stan,n; With the establishment of n% stun grant -bonus2 bAddEff,Eff_Curse,n; You curse with the establishment of n%, grant -bonus2 bAddEff,Eff_Confusion,n; With the establishment of n% confusion grant -bonus2 bAddEff,Eff_Stone,n; With the establishment of n% petrochemical grant - -bonus2 bResEff,Eff_Blind,n; Dark tolerance + n% -bonus2 bResEff,Eff_Sleep,n; Sleep tolerance + n% -bonus2 bResEff,Eff_Poison,n; Poison tolerance + n% -bonus2 bResEff,Eff_Freeze,n; Freezing tolerance + n% -bonus2 bResEff,Eff_Silence,n; Silence tolerance + n% -bonus2 bResEff,Eff_Stan,n; Stun tolerance + n% -bonus2 bResEff,Eff_Curse,n; Cursing tolerance + n% -bonus2 bResEff,Eff_Confusion,n; Confusion tolerance + n% -bonus2 bResEff,Eff_Stone,n; Petrochemical tolerance + n% - +skill i,n; Gives skill #i at level n + +bonus bStr,n; STR + n +bonus bAgi,n; AGI + n +bonus bVit,n; VIT + n +bonus bInt,n; INT + n +bonus bDex,n; DEX + n +bonus bLuk,n; LUK + n +bonus bAllStats,n; STR + n, AGI + n, VIT + n, INT + n, DEX + n, LUK + n +bonus bMaxHP,n; MaxHP + n +bonus bMaxSP,n; MaxSP + n +bonus bMaxHPrate,n; MaxHP + n% +bonus bMaxSPrate,n; MaxSP + n% +bonus bAtk,n; ATK + n +bonus bAtk2,n; ATK2 + n +bonus bAtkRate Attack power + n% +bonus bBaseAtk,n; Basic attack power + n +bonus bMatk,n; Magical attack power 1 + n and magical attack power 2 + n +bonus bMatk1,n; Magical attack power 1 + n +bonus bMatk2,n; Magical attack power 2 + n +bonus bMatkRate,n; Magical attack power + n% +bonus bDef,n; Equipment DEF + n +bonus bDefRate,n; Equipment DEF + n% +bonus bDef2Rate,n; VIT DEF + n% +bonus bMdef,n; Equipment MDEF + n +bonus bMdefRate,n; Equipment MDEF + n% +bonus bMdef2Rate,n; INT MDEF + n% +bonus bHit,n; Hit + n +bonus bHitRate,n; Hit + n% +bonus bCritical,n; Critical + n +bonus bCriticalRate,n; Critical + n% +bonus bFlee,n; Flee + n +bonus bFleeRate,n; Flee +n% +bonus bFlee2,n; Lucky Flee + n +bonus bFlee2Rate,n; Lucky Flee + n% +bonus bSpeed,n; Moving speed + n +bonus bAspd,n; Attack speed + n +bonus bSpeedRate,n; Moving speed + n% (only the highest among all is applied) +bonus bAspdRate,n; Attack speed + n% (only the highest among all is applied) +bonus bSpeedAddRate Moving speed + n% +bonus bAspdAddRate Attack speed + n% +bonus bAtkRange,n; Attack range + n +bonus bCastrate,n; Skill casting time rate + n% +bonus bUseSPrate,n; SP consumption + n% +bonus bHPrecovRate,n; Natural HP recovery ratio + n% +bonus bSPrecovRate,n; Natural SP recovery ratio + n% +bonus bDoubleRate,n; Double Attack probability n% (works with all weapons | only the highest among all is applied) +bonus bDoubleAddRate,n; Double Attack probability + n% (works with all weapons) +bonus bPerfectHitRate,n; On-target impact attack probability n% (only the highest among all is applied) +bonus bPerfectHitAddRate,n; On-target impact attack probability + n% +bonus bGetZenyNum,n; When killing the monster with physical attack, rand () ?? of %n+1 is obtained, (only the highest among all is applied) +bonus bAddGetZenyNum,n; When killing the monster with physical attack, rand () ?? of %n+1 is obtained, (n is done +) +bonus bCriticalDef,n; Critical ? and others the trap it is, probability + n% +bonus bNearAtkDef,n; Adds n% damage reduction against melee physical attacks +bonus bLongAtkDef,n; Adds n% damage reduction against ranged physical attacks +bonus bMagicAtkDef,n; Adds n% damage reduction against magical attacks +bonus bMiscAtkDef,n; Adds n% damage reduction against MISC attacks (traps, falcon, ...) +bonus bIgnoreDefRace,n Disregard DEF against enemies of race n + n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster +bonus bIgnoreDefEle,n; Disregard DEF against enemies of element n + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead +bonus bIgnoreMDefRace Disregard MDEF against enemies of race n + n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster +bonus bIgnoreMDefEle Disregard MDEF against enemies of element n + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead +bonus bDefRatioAtkRace,n; n race if defensive power is high the high extent big damage is given, (defense disregard) : + n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster +bonus bDefRatioAtkEle,n; n attribute if defensive power is high the high extent big damage is given, (defense disregard) : + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead +bonus bAtkEle,n; Gives the player's attacks element n + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead +bonus bDefEle,n; Gives the player's defense element n + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead +bonus bSplashRange n; Splash attack radius + n (e.g. n=1 makes a 3*3 cells area, n=2 a 5*5 area, etc | only the highest among all is applied) +bonus bSplashAddRange n; Splash attack radius + n (e.g. n=1 makes a 3*3 cells area, n=2 a 5*5 area, etc) +bonus bInfiniteEndure,n; Unlimited Endure effect, n is meaningless +bonus bRestartFullRecover,n; When reviving, HP and SP all recoveries, n is meaningless +bonus bNoCastCancel,n; Prevents casting from being interrupted when hit (does not work in GvG | n is meaningless) +bonus bNoCastCancel2,n; Prevents casting from being interrupted when hit (works even in GvG | n is meaningless) +bonus bNoSizeFix,n; The attack revision with the size of the monster is not received (n is meaningless) +bonus bNoWeaponDamage,n; Prevents from receiving any physical damage, n is meaningless +bonus bNoMagicDamage,n; Prevents from receiving any magical effect (Attack, Healing, Support spells are all blocked | n is meaningless) +bonus bNoGemStone,n; Skills requiring Gemstones do no more require them (Hocus Pocus will still require 1 Yellow one | n is meaningless) + +bonus2 bAddEff,e,x; Adds a x/10000 chance to cause effect e to the target when attacking (e.g. x=100 makes 1% chance, x=10000 makes 100% chance, etc) + e: Eff_Blind, Eff_Sleep, Eff_Poison, Eff_Freeze, Eff_Silence, Eff_Stan, Eff_Curse, Eff_Confusion, Eff_Stone, Eff_Bleeding +bonus2 bResEff,e,x; Adds a x/10000 tolerance to effect e (e.g. x=100 makes 1% tolerance, x=10000 makes 100% tolerance, etc) + e: Eff_Blind, Eff_Sleep, Eff_Poison, Eff_Freeze, Eff_Silence, Eff_Stan, Eff_Curse, Eff_Confusion, Eff_Stone, Eff_Bleeding bonus2 bAddSize,n,x; In n size the damage addition of x% - 0,Small size 1,Medium size 2,Large size + n: 0=Small 1=Medium 2=Large bonus2 bAddRace,n,x; In n race the damage addition of x% - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) + n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster bonus2 bSubRace,n,x; Damage x% reduction from n race - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) + n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster bonus2 bMagicAddRace,n,x; In n race the damage addition of x% (only magical attack) - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) + n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster bonus2 bMagicSubRace,n,x; Magical damage x% reduction from n race - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) + n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster bonus2 bAddEle,n,x; In n attribute the damage addition of x% - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality -bonus2 bMagicAddEle,n,x In n attribute the damage addition of x% (only magical attack) - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead +bonus2 bMagicAddEle,n,x In n attribute the damage addition of x% (only magical attack) + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead bonus2 bSubEle,n,x; Damage x% reduction from n attribute - 0,Nothing 1,Water 2,Earth 3,Fire 4,Wind 5,Poison 6,Saint 7,Darkness 8,Sense 9,Immortality + n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead bonus2 bAddDamageClass,n,x; In monster of class n the damage addition of x% (only physical attack), in case of prayer in n occupation the damage addition of x% -bonus2 bAddMagicDamageClass,n,x; In monster of class n in case of the magical damage addition and prayer of x% in n occupation the magical damage addition of x% +bonus2 bAddMagicDamageClass,n,x; In monster of class n in case of the magical damage addition and prayer of x% in n occupation the magical damage addition of x% bonus2 bAddDefClass,n,x; In monster of class n the damage reduction of x% (only physical attack), in case of prayer in n occupation the damage reduction of x% bonus2 bAddMDefClass,n,x; In monster of class n in case of the magical damage reduction and prayer of x% in n occupation the magical damage reduction of x% bonus2 bHPDrainRate,n,x; it obtained to the enemy -- ? ME ? JI -- n % probability -- x % -- HP -- absorption (+ n and x are carried out) bonus2 bSPDrainRate,n,x; it obtained to the enemy -- ? ME ? JI -- n % probability -- x % -- SP -- absorption (+ n and x are carried out) -bonus3 bAddMonsterDropItem,n,x; When pushing down the monster with physical attack, the probability which drops item n +x% (the item which the monster drops unrelated ones) - 0,Intangibility 1,Immortality 2,Animal 3,Plant 4,Insect 5,Fish and shellfish 6,Demon 7,Human 8,Angel 9,Dragon family 10:Boss monster 11:Other than boss monster (normal monster) +bonus3 bAddMonsterDropItem,n,x; When killing the monster with physical attack, the probability which drops item n +x% (the item which the monster drops unrelated ones) + 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster bonus3 bAutoSpell,n,x,y; Auto Spell casting of spell n at level x with y% chance // bAddDamageClass, bAddMagicDamageClass and bAddMonsterDropItem it is setting possible up to 10. Those which exceed 10 are ignored. @@ -145,20 +124,20 @@ bonus3 bAutoSpell,n,x,y; Auto Spell casting of spell n at level x with y% chanc //---- 2/15 new card effects ---- bonus bCritAtkRate,n; Increase critical damage by +n% -bonus bNoRegen,n; Stops regeneration for n. +bonus bNoRegen,n; Stops regeneration for n n: 1=HP, 2=SP -bonus bUnstripable,n; Armor cannot be taken off via Strip skills -bonus bSPGainValue,n; When killing a monster by physical attack - gain n amount of sp -bonus bHPGainValue,n; When killing a monster by physical attack - gain n amount of hp +bonus bUnstripableWeapon,n; Weapon cannot be taken off via Strip skills +bonus bUnstripableArmor,n; Armor cannot be taken off via Strip skills +bonus bUnstripableHelm,n; Helm cannot be taken off via Strip skills +bonus bUnstripableShield,n; Shield cannot be taken off via Strip skills +bonus bSPGainValue,n; When killing a monster by physical attack, you gain n SP +bonus bHPGainValue,n; When killing a monster by physical attack, you gain n HP bonus bIgnoreDefMob,n; Ignore monster's DEF when attacking. - n:0=All normal monsters, except Bosses - 1=All monsters -bonus bDamageWhenUnequip,n; Lose n HP when the item is unequipped - -bonus2 bCriticalAddRace,n,x; Increase critical + n vs. enemies of type x -bonus2 bHPLossRate,n,x; Lose n amount of hp every x amount of time + n: 0=All normal monster except Bosses, 1=All monsters +bonus bDamageWhenUnequip,n; You lose n HP when the item is unequipped +bonus2 bCriticalAddRace,n,r; Critical + n vs. enemies of race r + r: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect, 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon, 10=Boss monster, 11=Other than (normal monster) boss monster +bonus2 bHPLossRate,n,x; Lose n HP every x milliseconds bonus2 bAddEffWhenHit,n,x; n% chance to cause x state to the enemy when being hit by physical damage bonus2 bAddEffWhenHitShort,n,x; n% chance to cause x state to the enemy when @@ -169,16 +148,16 @@ bonus2 bAddDamageByClass,n,x; When being hit by monster of class n increase bonus2 bAddRace2,n,x; Increase damage by x% vs. enemies of race n (Check db/mob_race2_db.txt) bonus2 bSubSize,n,x; Damage x% reduction from n size - n:0=Small 1=Medium 2=Large + n: 0=Small 1=Medium 2=Large bonus3 bHPLossRate,n,x,y; Lose n amount of hp every x amount of time - y:0=Don't show damage 1=Show damage + y: 0=Don't show damage 1=Show damage bonus3 bAutoSpellWhenHit,x,y,n; n% chance to cast skill x of level y when being hit by physical close range damage bonus3 bSPDrainRate,n,x,y; When attacking there is a n% chance to either gain SP equivalent to x% of damage dealt, OR drain the amount of sp from the enemy. - y:0=gain sp 1:drain enemy sp + y: 0=gain sp 1:drain enemy sp bonus3 bSPDrainValue,n,x,y; When attacking there is a n% chance to either gain x SP, OR drain the amount of sp from the enemy. y:0=gain sp 1:drain enemy sp @@ -192,8 +171,7 @@ bonus4 bAutoSpellWhenHit,x,y,n,i; n% chance to cast skill x of level y when //---- 2/22 new card effects ---- bonus2 bAddItemHealRate,n,x; Increases HP recovered by n type items by x% - n:1=potions 2=herbs 3=fruits 4=meat 5=candy - 6=juice 7=sashimi + n: 1=potions, 2=herbs, 3=fruits, 4=meat, 5=candy, 6=juices, 7=sashimi //---- 3/15 new card effects ---- diff --git a/src/map/map.h b/src/map/map.h index ceddea0e8..01d9fef0e 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -660,7 +660,8 @@ enum { SP_SKILL_ATK, SP_UNSTRIPABLE, SP_ADD_DAMAGE_BY_CLASS, // 2018-2020 SP_SP_GAIN_VALUE, SP_IGNORE_DEF_MOB, SP_HP_LOSS_RATE, SP_ADDRACE2, SP_HP_GAIN_VALUE, // 2021-2025 SP_SUBSIZE, SP_DAMAGE_WHEN_UNEQUIP, SP_ADD_ITEM_HEAL_RATE, SP_LOSESP_WHEN_UNEQUIP, SP_EXP_ADDRACE, // 2026-2030 - SP_SP_GAIN_RACE, SP_SUBRACE2, SP_ADDEFF_WHENHIT_SHORT // 2031-2033 + SP_SP_GAIN_RACE, SP_SUBRACE2, SP_ADDEFF_WHENHIT_SHORT, // 2031-2033 + SP_UNSTRIPABLE_WEAPON,SP_UNSTRIPABLE_ARMOR,SP_UNSTRIPABLE_HELM,SP_UNSTRIPABLE_SHIELD // 2034-2037 }; enum { diff --git a/src/map/pc.c b/src/map/pc.c index b49012e01..16931043b 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1457,22 +1457,6 @@ int pc_bonus(struct map_session_data *sd,int type,int val) if(sd->state.lr_flag != 2) sd->special_state.infinite_endure = 1; break; - case SP_UNBREAKABLE_WEAPON: - if(sd->state.lr_flag != 2) - sd->unbreakable_equip |= EQP_WEAPON; - break; - case SP_UNBREAKABLE_ARMOR: - if(sd->state.lr_flag != 2) - sd->unbreakable_equip |= EQP_ARMOR; - break; - case SP_UNBREAKABLE_HELM: - if(sd->state.lr_flag != 2) - sd->unbreakable_equip |= EQP_HELM; - break; - case SP_UNBREAKABLE_SHIELD: - if(sd->state.lr_flag != 2) - sd->unbreakable_equip |= EQP_SHIELD; - break; case SP_SPLASH_RANGE: if(sd->state.lr_flag != 2 && sd->splash_range < val) sd->splash_range = val; @@ -1537,6 +1521,22 @@ int pc_bonus(struct map_session_data *sd,int type,int val) sd->unbreakable += val; } break; + case SP_UNBREAKABLE_WEAPON: + if(sd->state.lr_flag != 2) + sd->unbreakable_equip |= EQP_WEAPON; + break; + case SP_UNBREAKABLE_ARMOR: + if(sd->state.lr_flag != 2) + sd->unbreakable_equip |= EQP_ARMOR; + break; + case SP_UNBREAKABLE_HELM: + if(sd->state.lr_flag != 2) + sd->unbreakable_equip |= EQP_HELM; + break; + case SP_UNBREAKABLE_SHIELD: + if(sd->state.lr_flag != 2) + sd->unbreakable_equip |= EQP_SHIELD; + break; case SP_CLASSCHANGE: // [Valaris] if(sd->state.lr_flag !=2){ sd->classchange=val; @@ -1570,10 +1570,23 @@ int pc_bonus(struct map_session_data *sd,int type,int val) if(sd->state.lr_flag != 2) sd->no_regen = val; break; + case SP_UNSTRIPABLE_WEAPON: + if(sd->state.lr_flag != 2) + sd->unstripable_equip |= EQP_WEAPON; + break; case SP_UNSTRIPABLE: + case SP_UNSTRIPABLE_ARMOR: if(sd->state.lr_flag != 2) sd->unstripable_equip |= EQP_ARMOR; break; + case SP_UNSTRIPABLE_HELM: + if(sd->state.lr_flag != 2) + sd->unstripable_equip |= EQP_HELM; + break; + case SP_UNSTRIPABLE_SHIELD: + if(sd->state.lr_flag != 2) + sd->unstripable_equip |= EQP_SHIELD; + break; case SP_SP_GAIN_VALUE: if(!sd->state.lr_flag) sd->sp_gain_value += val; -- cgit v1.2.3-70-g09d2