From e91026dd9fe12ec75e3cd64d969f258a508d7a6b Mon Sep 17 00:00:00 2001 From: malufett Date: Thu, 13 Jun 2013 20:57:53 +0800 Subject: Follow up 0395610469ffcd3b71c93ef90861f73e0ab8d16f Added changes in const.txt --- db/const.txt | 539 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 274 insertions(+), 265 deletions(-) (limited to 'db/const.txt') diff --git a/db/const.txt b/db/const.txt index f65529cfb..cef0593e1 100644 --- a/db/const.txt +++ b/db/const.txt @@ -589,7 +589,6 @@ bVariableCastrate 2054 bSkillUseSP 2055 bMagicAtkEle 2056 bFixedCast 2057 - bVariableCast 2058 EQI_HEAD_TOP 1 @@ -756,22 +755,23 @@ SC_CURSE 5 SC_SILENCE 6 SC_CONFUSION 7 SC_BLIND 8 -SC_BLEEDING 9 +SC_BLOODING 9 SC_DPOISON 10 +SC_BURNING 11 SC_PROVOKE 20 SC_ENDURE 21 SC_TWOHANDQUICKEN 22 -SC_CONCENTRATE 23 +SC_CONCENTRATION 23 SC_HIDING 24 SC_CLOAKING 25 -SC_ENCPOISON 26 +SC_ENCHANTPOISON 26 SC_POISONREACT 27 SC_QUAGMIRE 28 SC_ANGELUS 29 SC_BLESSING 30 -SC_SIGNUMCRUCIS 31 -SC_INCREASEAGI 32 -SC_DECREASEAGI 33 +SC_CRUCIS 31 +SC_INC_AGI 32 +SC_DEC_AGI 33 SC_SLOWPOISON 34 SC_IMPOSITIO 35 SC_SUFFRAGIUM 36 @@ -780,40 +780,40 @@ SC_BENEDICTIO 38 SC_KYRIE 39 SC_MAGNIFICAT 40 SC_GLORIA 41 -SC_AETERNA 42 +SC_LEXAETERNA 42 SC_ADRENALINE 43 -SC_WEAPONPERFECTION 44 +SC_WEAPONPERFECT 44 SC_OVERTHRUST 45 SC_MAXIMIZEPOWER 46 SC_TRICKDEAD 47 -SC_LOUD 48 +SC_SHOUT 48 SC_ENERGYCOAT 49 SC_BROKENARMOR 50 SC_BROKENWEAPON 51 -SC_HALLUCINATION 52 -SC_WEIGHT50 53 -SC_WEIGHT90 54 -SC_ASPDPOTION0 55 -SC_ASPDPOTION1 56 -SC_ASPDPOTION2 57 -SC_ASPDPOTION3 58 -SC_SPEEDUP0 59 -SC_SPEEDUP1 60 -SC_ATKPOTION 61 -SC_MATKPOTION 62 +SC_ILLUSION 52 +SC_WEIGHTOVER50 53 +SC_WEIGHTOVER90 54 +SC_ATTHASTE_POTION1 55 +SC_ATTHASTE_POTION2 56 +SC_ATTHASTE_POTION3 57 +SC_ATTHASTE_INFINITY 58 +SC_MOVHASTE_HORSE 59 +SC_MOVHASTE_INFINITY 60 +SC_PLUSATTACKPOWER 61 +SC_PLUSMAGICPOWER 62 SC_WEDDING 63 SC_SLOWDOWN 64 -SC_ANKLE 65 +SC_ANKLESNARE 65 SC_KEEPING 66 SC_BARRIER 67 -SC_STRIPWEAPON 68 -SC_STRIPSHIELD 69 -SC_STRIPARMOR 70 -SC_STRIPHELM 71 -SC_CP_WEAPON 72 -SC_CP_SHIELD 73 -SC_CP_ARMOR 74 -SC_CP_HELM 75 +SC_NOEQUIPWEAPON 68 +SC_NOEQUIPSHIELD 69 +SC_NOEQUIPARMOR 70 +SC_NOEQUIPHELM 71 +SC_PROTECTWEAPON 72 +SC_PROTECTSHIELD 73 +SC_PROTECTARMOR 74 +SC_PROTECTHELM 75 SC_AUTOGUARD 76 SC_REFLECTSHIELD 77 SC_SPLASHER 78 @@ -831,24 +831,24 @@ SC_SAFETYWALL 89 SC_RUWACH 90 SC_EXTREMITYFIST 91 SC_EXPLOSIONSPIRITS 92 -SC_COMBO 93 +SC_COMBOATTACK 93 SC_BLADESTOP_WAIT 94 SC_BLADESTOP 95 -SC_FIREWEAPON 96 -SC_WATERWEAPON 97 -SC_WINDWEAPON 98 -SC_EARTHWEAPON 99 +SC_PROPERTYFIRE 96 +SC_PROPERTYWATER 97 +SC_PROPERTYWIND 98 +SC_PROPERTYGROUND 99 SC_VOLCANO 100 SC_DELUGE 101 SC_VIOLENTGALE 102 SC_WATK_ELEMENT 103 SC_ARMOR 104 -SC_ARMOR_ELEMENT 105 +SC_ARMORPROPERTY 105 SC_NOCHAT 106 SC_BABY 107 SC_AURABLADE 108 SC_PARRYING 109 -SC_CONCENTRATION 110 +SC_LKCONCENTRATION 110 SC_TENSIONRELAX 111 SC_BERSERK 112 SC_FURY 113 @@ -863,10 +863,10 @@ SC_WINDWALK 121 SC_MELTDOWN 122 SC_CARTBOOST 123 SC_CHASEWALK 124 -SC_REJECTSWORD 125 -SC_MARIONETTE 126 -SC_MARIONETTE2 127 -SC_CHANGEUNDEAD 128 +SC_SWORDREJECT 125 +SC_MARIONETTE_MASTER 126 +SC_MARIONETTE 127 +SC_PROPERTYUNDEAD 128 SC_JOINTBEAT 129 SC_MINDBREAKER 130 SC_MEMORIZE 131 @@ -876,170 +876,170 @@ SC_DEVOTION 134 SC_SACRIFICE 135 SC_STEELBODY 136 SC_ORCISH 137 -SC_READYSTORM 138 -SC_READYDOWN 139 -SC_READYTURN 140 -SC_READYCOUNTER 141 -SC_DODGE 142 +SC_STORMKICK_READY 138 +SC_DOWNKICK_READY 139 +SC_TURNKICK_READY 140 +SC_COUNTERKICK_READY 141 +SC_DODGE_READY 142 SC_RUN 143 -SC_SHADOWWEAPON 144 +SC_PROPERTYDARK 144 SC_ADRENALINE2 145 -SC_GHOSTWEAPON 146 +SC_PROPERTYTELEKINESIS 146 SC_KAIZEL 147 SC_KAAHI 148 SC_KAUPE 149 -SC_ONEHAND 150 +SC_ONEHANDQUICKEN 150 SC_PRESERVE 151 -SC_BATTLEORDERS 152 -SC_REGENERATION 153 -SC_DOUBLECAST 154 +SC_GDSKILL_BATTLEORDER 152 +SC_GDSKILL_REGENERATION 153 +SC_DOUBLECASTING 154 SC_GRAVITATION 155 -SC_MAXOVERTHRUST 156 +SC_OVERTHRUSTMAX 156 SC_LONGING 157 SC_HERMODE 158 -SC_SHRINK 159 -SC_SIGHTBLASTER 160 -SC_WINKCHARM 161 -SC_CLOSECONFINE 162 -SC_CLOSECONFINE2 163 -SC_DANCING 164 -SC_ELEMENTALCHANGE 165 -SC_RICHMANKIM 166 -SC_ETERNALCHAOS 167 -SC_DRUMBATTLE 168 -SC_NIBELUNGEN 169 -SC_ROKISWEIL 170 -SC_INTOABYSS 171 -SC_SIEGFRIED 172 -SC_WHISTLE 173 -SC_ASSNCROS 174 -SC_POEMBRAGI 175 -SC_APPLEIDUN 176 -SC_MODECHANGE 177 -SC_HUMMING 178 -SC_DONTFORGETME 179 -SC_FORTUNE 180 -SC_SERVICE4U 181 -SC_STOP 182 -SC_SPURT 183 -SC_SPIRIT 184 -SC_COMA 185 -SC_INTRAVISION 186 -SC_INCALLSTATUS 187 -SC_INCSTR 188 -SC_INCAGI 189 -SC_INCVIT 190 -SC_INCINT 191 -SC_INCDEX 192 -SC_INCLUK 193 -SC_INCHIT 194 -SC_INCHITRATE 195 -SC_INCFLEE 196 -SC_INCFLEERATE 197 -SC_INCMHPRATE 198 -SC_INCMSPRATE 199 -SC_INCATKRATE 200 -SC_INCMATKRATE 201 -SC_INCDEFRATE 202 -SC_STRFOOD 203 -SC_AGIFOOD 204 -SC_VITFOOD 205 -SC_INTFOOD 206 -SC_DEXFOOD 207 -SC_LUKFOOD 208 -SC_HITFOOD 209 -SC_FLEEFOOD 210 -SC_BATKFOOD 211 -SC_WATKFOOD 212 -SC_MATKFOOD 213 -SC_SCRESIST 214 -SC_XMAS 215 -SC_WARM 216 -SC_SUN_COMFORT 217 -SC_MOON_COMFORT 218 -SC_STAR_COMFORT 219 -SC_FUSION 220 -SC_SKILLRATE_UP 221 -SC_SKE 222 -SC_KAITE 223 -SC_SWOO 224 -SC_SKA 225 -SC_TKREST 226 -SC_MIRACLE 227 -SC_MADNESSCANCEL 228 -SC_ADJUSTMENT 229 -SC_INCREASING 230 -SC_GATLINGFEVER 231 -SC_TATAMIGAESHI 232 -SC_UTSUSEMI 233 -SC_BUNSINJYUTSU 234 -SC_KAENSIN 235 -SC_SUITON 236 -SC_NEN 237 -SC_KNOWLEDGE 238 -SC_SMA 239 -SC_FLING 240 -SC_AVOID 241 -SC_CHANGE 242 -SC_BLOODLUST 243 -SC_FLEET 244 -SC_SPEED 245 -SC_DEFENCE 246 -SC_INCASPDRATE 247 -SC_INCFLEE2 248 -SC_JAILED 249 -SC_ENCHANTARMS 250 -SC_MAGICALATTACK 251 -SC_SUMMER 256 -SC_EXPBOOST 257 -SC_ITEMBOOST 258 -SC_BOSSMAPINFO 259 -SC_LIFEINSURANCE 260 -SC_INCCRI 261 -//SC_INCDEF 262 -//SC_INCBASEATK 263 -//SC_FASTCAST 264 -SC_MDEF_RATE 265 -//SC_HPREGEN 266 -SC_INCHEALRATE 267 -SC_PNEUMA 268 -SC_AUTOTRADE 269 -SC_KSPROTECTED 270 -SC_ARMOR_RESIST 271 -SC_SPCOST_RATE 272 -SC_COMMONSC_RESIST 273 -SC_SEVENWIND 274 -SC_DEF_RATE 275 -//SC_SPREGEN 276 -SC_WALKSPEED 277 -SC_REBIRTH 284 -//SC_SKILLCASTRATE 285 -//SC_DEFRATIOATK 286 -//SC_HPDRAIN 287 -//SC_SKILLATKBONUS 288 -SC_ITEMSCRIPT 289 -SC_S_LIFEPOTION 290 -SC_L_LIFEPOTION 291 -SC_JEXPBOOST 292 -//SC_IGNOREDEF 293 -SC_HELLPOWER 294 -SC_INVINCIBLE 295 -SC_INVINCIBLEOFF 296 -SC_MANU_ATK 297 -SC_MANU_DEF 298 -SC_SPL_ATK 299 -SC_SPL_DEF 300 -SC_MANU_MATK 301 -SC_SPL_MATK 302 -SC_FOOD_STR_CASH 303 -SC_FOOD_AGI_CASH 304 -SC_FOOD_VIT_CASH 305 -SC_FOOD_DEX_CASH 306 -SC_FOOD_INT_CASH 307 -SC_FOOD_LUK_CASH 308 -SC_FEAR 309 -SC_BURNING 310 -SC_FREEZING 311 +SC_TAROTCARD 159 +SC_CR_SHRINK 160 +SC_WZ_SIGHTBLASTER 161 +SC_DC_WINKCHARM 162 +SC_RG_CCONFINE_M 163 +SC_RG_CCONFINE_S 164 +SC_DANCING 165 +SC_ARMOR_PROPERTY 166 +SC_RICHMANKIM 167 +SC_ETERNALCHAOS 168 +SC_DRUMBATTLE 169 +SC_NIBELUNGEN 170 +SC_ROKISWEIL 171 +SC_INTOABYSS 172 +SC_SIEGFRIED 173 +SC_WHISTLE 174 +SC_ASSNCROS 175 +SC_POEMBRAGI 176 +SC_APPLEIDUN 177 +SC_MODECHANGE 178 +SC_HUMMING 179 +SC_DONTFORGETME 180 +SC_FORTUNE 181 +SC_SERVICEFORYOU 182 +SC_STOP 183 +SC_STRUP 184 +SC_SOULLINK 185 +SC_COMA 186 +SC_CLAIRVOYANCE 187 +SC_INCALLSTATUS 188 +SC_CHASEWALK2 189 +SC_INCAGI 190 +SC_INCVIT 191 +SC_INCINT 192 +SC_INCDEX 193 +SC_INCLUK 194 +SC_INCHIT 195 +SC_INCHITRATE 196 +SC_INCFLEE 197 +SC_INCFLEERATE 198 +SC_INCMHPRATE 199 +SC_INCMSPRATE 200 +SC_INCATKRATE 201 +SC_INCMATKRATE 202 +SC_INCDEFRATE 203 +SC_FOOD_STR 204 +SC_FOOD_AGI 205 +SC_FOOD_VIT 206 +SC_FOOD_INT 207 +SC_FOOD_DEX 208 +SC_FOOD_LUK 209 +SC_FOOD_BASICHIT 210 +SC_FOOD_BASICAVOIDANCE 211 +SC_BATKFOOD 212 +SC_WATKFOOD 213 +SC_MATKFOOD 214 +SC_SCRESIST 215 +SC_XMAS 216 +SC_WARM 217 +SC_SUN_COMFORT 218 +SC_MOON_COMFORT 219 +SC_STAR_COMFORT 220 +SC_FUSION 221 +SC_SKILLRATE_UP 222 +SC_SKE 223 +SC_KAITE 224 +SC_SWOO 225 +SC_SKA 226 +SC_EARTHSCROLL 227 +SC_MIRACLE 228 +SC_GS_MADNESSCANCEL 229 +SC_GS_ADJUSTMENT 230 +SC_GS_ACCURACY 231 +SC_GS_GATLINGFEVER 232 +SC_NJ_TATAMIGAESHI 233 +SC_NJ_UTSUSEMI 234 +SC_NJ_BUNSINJYUTSU 235 +SC_NJ_KAENSIN 236 +SC_NJ_SUITON 237 +SC_NJ_NEN 238 +SC_KNOWLEDGE 239 +SC_SMA_READY 240 +SC_FLING 241 +SC_HLIF_AVOID 242 +SC_HLIF_CHANGE 243 +SC_HAMI_BLOODLUST 244 +SC_HLIF_FLEET 245 +SC_HLIF_SPEED 246 +SC_HAMI_DEFENCE 247 +SC_INCASPDRATE 248 +SC_PLUSAVOIDVALUE 249 +SC_JAILED 250 +SC_ENCHANTARMS 251 +SC_MAGICALATTACK 252 +SC_STONESKIN 253 +SC_CRITICALWOUND 254 +SC_MAGICMIRROR 255 +SC_SLOWCAST 256 +SC_SUMMER 257 +SC_CASH_PLUSEXP 258 +SC_CASH_RECEIVEITEM 259 +SC_CASH_BOSS_ALARM 260 +SC_CASH_DEATHPENALTY 261 +SC_CRITICALPERCENT 262 +SC_PROTECT_MDEF 266 +SC_HEALPLUS 268 +SC_PNEUMA 269 +SC_AUTOTRADE 270 +SC_KSPROTECTED 271 +SC_ARMOR_RESIST 272 +SC_ATKER_BLOOD 273 +SC_TARGET_BLOOD 274 +SC_TK_SEVENWIND 275 +SC_PROTECT_DEF 276 +SC_WALKSPEED 278 +SC_MER_FLEE 279 +SC_MER_ATK 280 +SC_MER_HP 281 +SC_MER_SP 282 +SC_MER_HIT 283 +SC_MER_QUICKEN 284 +SC_REBIRTH 285 +SC_ITEMSCRIPT 290 +SC_S_LIFEPOTION 291 +SC_L_LIFEPOTION 292 +SC_CASH_PLUSONLYJOBEXP 293 +SC_HELLPOWER 295 +SC_INVINCIBLE 296 +SC_INVINCIBLEOFF 297 +SC_MANU_ATK 298 +SC_MANU_DEF 299 +SC_SPL_ATK 300 +SC_SPL_DEF 301 +SC_MANU_MATK 302 +SC_SPL_MATK 303 +SC_FOOD_STR_CASH 304 +SC_FOOD_AGI_CASH 305 +SC_FOOD_VIT_CASH 306 +SC_FOOD_DEX_CASH 307 +SC_FOOD_INT_CASH 308 +SC_FOOD_LUK_CASH 309 +SC_FEAR 310 +SC_FROSTMISTY 311 SC_ENCHANTBLADE 312 SC_DEATHBOUND 313 SC_MILLENNIUMSHIELD 314 @@ -1065,17 +1065,17 @@ SC_WHITEIMPRISON 333 SC_MARSHOFABYSS 334 SC_RECOGNIZEDSPELL 335 SC_STASIS 336 -SC_SPHERE_1 337 -SC_SPHERE_2 338 -SC_SPHERE_3 339 -SC_SPHERE_4 340 -SC_SPHERE_5 341 +SC_SUMMON1 337 +SC_SUMMON2 338 +SC_SUMMON3 339 +SC_SUMMON4 340 +SC_SUMMON5 341 SC_READING_SB 342 -SC_FREEZINGSPELL 343 +SC_FREEZINGSP 343 SC_FEARBREEZE 344 SC_ELECTRICSHOCKER 345 SC_WUGDASH 346 -SC_BITE 347 +SC_WUGBITE 347 SC_CAMOUFLAGE 348 SC_ACCELERATION 349 SC_HOVERING 350 @@ -1104,7 +1104,7 @@ SC_DEATHHURT 372 SC_PYREXIA 373 SC_OBLIVIONCURSE 374 SC_LEECHESEND 375 -SC_REFLECTDAMAGE 376 +SC_LG_REFLECTDAMAGE 376 SC_FORCEOFVANGUARD 377 SC_SHIELDSPELL_DEF 378 SC_SHIELDSPELL_MDEF 379 @@ -1121,24 +1121,24 @@ SC_STRIKING 389 SC_WARMER 390 SC_VACUUM_EXTREME 391 SC_PROPERTYWALK 392 -SC_SWINGDANCE 393 -SC_SYMPHONYOFLOVER 394 -SC_MOONLITSERENADE 395 -SC_RUSHWINDMILL 396 +SC_SWING 393 +SC_SYMPHONY_LOVE 394 +SC_MOONLIT_SERENADE 395 +SC_RUSH_WINDMILL 396 SC_ECHOSONG 397 SC_HARMONIZE 398 -SC_VOICEOFSIREN 399 -SC_DEEPSLEEP 400 +SC_SIREN 399 +SC_DEEP_SLEEP 400 SC_SIRCLEOFNATURE 401 SC_GLOOMYDAY 402 SC_GLOOMYDAY_SK 403 -SC_SONGOFMANA 404 -SC_DANCEWITHWUG 405 -SC_SATURDAYNIGHTFEVER 406 -SC_LERADSDEW 407 +SC_SONG_OF_MANA 404 +SC_DANCE_WITH_WUG 405 +SC_SATURDAY_NIGHT_FEVER 406 +SC_LERADS_DEW 407 SC_MELODYOFSINK 408 -SC_BEYONDOFWARCRY 409 -SC_UNLIMITEDHUMMINGVOICE 410 +SC_BEYOND_OF_WARCRY 409 +SC_UNLIMITED_HUMMING_VOICE 410 SC_SITDOWN_FORCE 411 SC_NETHERWORLD 412 SC_CRESCENTELBOW 413 @@ -1146,20 +1146,20 @@ SC_CURSEDCIRCLE_ATKER 414 SC_CURSEDCIRCLE_TARGET 415 SC_LIGHTNINGWALK 416 SC_RAISINGDRAGON 417 -SC_GT_ENERGYGAIN 418 -SC_GT_CHANGE 419 -SC_GT_REVITALIZE 420 +SC_GENTLETOUCH_ENERGYGAIN 418 +SC_GENTLETOUCH_CHANGE 419 +SC_GENTLETOUCH_REVITALIZE 420 SC_GN_CARTBOOST 421 -SC_THORNSTRAP 422 -SC_BLOODSUCKER 423 -SC_SMOKEPOWDER 424 -SC_TEARGAS 425 +SC_THORNS_TRAP 422 +SC_BLOOD_SUCKER 423 +SC_FIRE_EXPANSION_SMOKE_POWDER 424 +SC_FIRE_EXPANSION_TEAR_GAS 425 SC_MANDRAGORA 426 SC_STOMACHACHE 427 SC_MYSTERIOUS_POWDER 428 SC_MELON_BOMB 429 SC_BANANA_BOMB 430 -SC_BANANA_BOMB_SITDOWN 431 +SC_BANANA_BOMB_SITDOWN_POSTDELAY 431 SC_SAVAGE_STEAK 432 SC_COCKTAIL_WARG_BLOOD 433 SC_MINOR_BBQ 434 @@ -1186,7 +1186,7 @@ SC__IGNORANCE 454 SC__LAZINESS 455 SC__UNLUCKY 456 SC__WEAKNESS 457 -SC__STRIPACCESSORY 458 +SC__STRIPACCESSARY 458 SC__MANHOLE 459 SC__BLOODYLUST 460 SC_CIRCLE_OF_FIRE 461 @@ -1228,7 +1228,7 @@ SC_WILD_STORM 496 SC_WILD_STORM_OPTION 497 SC_PETROLOGY 498 SC_PETROLOGY_OPTION 499 -SC_CURSED_SOIL 450 +SC_CURSED_SOIL 500 SC_CURSED_SOIL_OPTION 501 SC_UPHEAVAL 502 SC_UPHEAVAL_OPTION 503 @@ -1241,45 +1241,54 @@ SC_GLORYWOUNDS 509 SC_SOULCOLD 510 SC_HAWKEYES 511 SC_ODINS_POWER 512 -SC_RAID 513 -SC_FIRE_INSIGNIA 514 -SC_WATER_INSIGNIA 515 -SC_WIND_INSIGNIA 516 -SC_EARTH_INSIGNIA 517 -SC_PUSH_CART 518 -SC_SPELLBOOK1 519 -SC_SPELLBOOK2 520 -SC_SPELLBOOK3 521 -SC_SPELLBOOK4 522 -SC_SPELLBOOK5 523 -SC_SPELLBOOK6 524 -SC_MAXSPELLBOOK 525 -SC_INCMHP 526 -SC_INCMSP 527 -SC_PARTYFLEE 528 -SC_MEIKYOUSISUI 529 -SC_JYUMONJIKIRI 530 -SC_KYOUGAKU 531 -SC_IZAYOI 532 -SC_ZENKAI 533 -SC_KAGEHUMI 534 -SC_KYOMU 535 -SC_KAGEMUSYA 536 -SC_ZANGETSU 537 -SC_GENSOU 538 -SC_AKAITSUKI 539 -SC_STYLE_CHANGE 540 -SC_GOLDENE_FERSE 541 -SC_ANGRIFFS_MODUS 542 -SC_ERASER_CUTTER 543 -SC_OVERED_BOOST 544 -SC_LIGHT_OF_REGENE 545 -SC_ASH 546 -SC_GRANITIC_ARMOR 547 -SC_MAGMA_FLOW 548 -SC_PYROCLASTIC 549 -SC_PARALYSIS 550 -SC_PAIN_KILLER 551 +SC_FIRE_INSIGNIA 513 +SC_WATER_INSIGNIA 514 +SC_WIND_INSIGNIA 515 +SC_EARTH_INSIGNIA 516 +SC_PUSH_CART 517 +SC_SPELLBOOK1 518 +SC_SPELLBOOK2 519 +SC_SPELLBOOK3 520 +SC_SPELLBOOK4 521 +SC_SPELLBOOK5 522 +SC_SPELLBOOK6 523 +SC_SPELLBOOK7 524 +SC_INCMHP 525 +SC_INCMSP 526 +SC_PARTYFLEE 527 +SC_MEIKYOUSISUI 528 +SC_KO_JYUMONJIKIRI 529 +SC_KYOUGAKU 530 +SC_IZAYOI 531 +SC_ZENKAI 532 +SC_KG_KAGEHUMI 533 +SC_KYOMU 534 +SC_KAGEMUSYA 535 +SC_ZANGETSU 536 +SC_GENSOU 537 +SC_AKAITSUKI 538 +SC_STYLE_CHANGE 539 +SC_GOLDENE_FERSE 540 +SC_ANGRIFFS_MODUS 541 +SC_ERASER_CUTTER 542 +SC_OVERED_BOOST 543 +SC_LIGHT_OF_REGENE 544 +SC_VOLCANIC_ASH 545 +SC_GRANITIC_ARMOR 546 +SC_MAGMA_FLOW 547 +SC_PYROCLASTIC 548 +SC_NEEDLE_OF_PARALYZE 549 +SC_PAIN_KILLER 550 +SC_EXTREMITYFIST2 551 +SC_RAID 552 +SC_DARKCROW 553 +SC_FULL_THROTTLE 554 +SC_REBOUND 555 +SC_UNLIMIT 556 +SC_KINGS_GRACE 557 +SC_TELEKINESIS_INTENSE 558 +SC_OFFERTORIUM 559 +SC_FRIGG_SONG 560 e_gasp 0 e_what 1 -- cgit v1.2.3-60-g2f50 From 3136a514a17ff9874b458673ca3f89bad8e75ce8 Mon Sep 17 00:00:00 2001 From: Akkarinage Date: Fri, 14 Jun 2013 21:27:02 +0100 Subject: Whitespace, TABs & Spellings Replaced indents using spaces with tabs, reducing file sizes and conforming to standards. --- conf/battle/battle.conf | 2 +- conf/battle/drops.conf | 4 +- conf/battle/homunc.conf | 2 +- conf/battle/misc.conf | 2 +- conf/battle/monster.conf | 12 +- conf/battle/party.conf | 2 +- conf/battle/skill.conf | 14 +- conf/help.txt | 4 +- conf/login-server.conf | 2 +- conf/logs.conf | 4 +- conf/map-server.conf | 2 +- conf/messages.conf | 2 +- conf/plugins.conf | 2 +- db/castle_db.txt | 36 +- db/const.txt | 12 +- doc/item_bonus.txt | 4 +- doc/script_commands.txt | 1438 ++++++++++++++--------------- sql-files/tools/convert_engine_innodb.sql | 5 +- sql-files/tools/convert_engine_myisam.sql | 5 +- tools/check-doc | 8 +- 20 files changed, 783 insertions(+), 779 deletions(-) (limited to 'db/const.txt') diff --git a/conf/battle/battle.conf b/conf/battle/battle.conf index 94f80a2a6..70062a16e 100644 --- a/conf/battle/battle.conf +++ b/conf/battle/battle.conf @@ -94,7 +94,7 @@ vit_penalty_num: 5 // Use alternate method of DEF calculation for physical attacks. // With 0, disabled (use normal def% reduction with further def2 reduction) -// At 1 or more defense is substraction of (DEF* value). +// At 1 or more defense is subtraction of (DEF* value). // eg: 10 + 50 def becomes 0 + (10*type + 50) weapon_defense_type: 0 diff --git a/conf/battle/drops.conf b/conf/battle/drops.conf index 3704b9a0e..9006cfeb1 100644 --- a/conf/battle/drops.conf +++ b/conf/battle/drops.conf @@ -7,10 +7,10 @@ // Note 2: Value is in percents (100 means 100%) //-------------------------------------------------------------- -// If an item is dropped, does it go stright into the users inventory? (Note 1) +// If an item is dropped, does it go straight into the users inventory? (Note 1) item_auto_get: no -// How long does it take for an item to disappear from the floor after it is dropped? (in miliseconds) +// How long does it take for an item to disappear from the floor after it is dropped? (in milliseconds) flooritem_lifetime: 60000 // Grace time during which only the person who did the most damage to a monster can get the item? (in milliseconds) diff --git a/conf/battle/homunc.conf b/conf/battle/homunc.conf index fb34792ce..5e1b1c9d2 100644 --- a/conf/battle/homunc.conf +++ b/conf/battle/homunc.conf @@ -35,7 +35,7 @@ homunculus_show_growth: yes // Does autoloot work, when a monster is killed by homunculus only? homunculus_autoloot: yes -// Should homunculii Vaporize when Master dies? +// Should homunculi Vaporize when Master dies? homunculus_auto_vapor: yes // Max level for regular Homunculus diff --git a/conf/battle/misc.conf b/conf/battle/misc.conf index 32b9c511e..9814a2140 100644 --- a/conf/battle/misc.conf +++ b/conf/battle/misc.conf @@ -85,7 +85,7 @@ duel_only_on_same_map: no // Cell Stack Limit support (see src/map/map.h) cell_stack_limit: 1 -// Allow autrade only in map with autotrade flag? +// Allow autotrade only in map with autotrade flag? // Set this to "no" will allow autotrade where no "autotrade" mapflag is set // Set this to "yes" to only allow autotrade on maps with "autotrade" mapflag at_mapflag: no diff --git a/conf/battle/monster.conf b/conf/battle/monster.conf index 51136fbe0..50d661087 100644 --- a/conf/battle/monster.conf +++ b/conf/battle/monster.conf @@ -30,13 +30,13 @@ monster_max_aspd: 199 // (distance player/mob < 3), otherwise mobs may change target and chase // ranged attackers. This flag also overrides the 'provoke' target. // 0x008: If set, when a mob loses track of their target, they stop walking -// inmediately. Otherwise, they continue to their last target tile. When +// immediately. Otherwise, they continue to their last target tile. When // set mobs also scatter as soon as they lose their target. Use this mode // to make it much harder to mob-train by hiding and collecting them on a // single spot (ie: GrimTooth training) // 0x010: If set, mob skills defined for friends will also trigger on themselves. // 0x020: When set, the monster ai is executed for all monsters in maps that -// have players on them, instead of only for mobs who are in the vecinity +// have players on them, instead of only for mobs who are in the vicinity // of players. // 0x040: When set, when the mob's target changes map, the mob will walk towards // any npc-warps in it's sight of view (use with mob_warp below) @@ -60,7 +60,7 @@ monster_ai: 0 mob_warp: 0 // If these are set above 0, they define the time (in ms) during which monsters -// will have their 'AI' active after all players have left their vecinity. +// will have their 'AI' active after all players have left their vicinity. mob_active_time: 0 boss_active_time: 0 @@ -105,7 +105,7 @@ mob_skill_delay: 100 mob_count_rate: 100 // Respawn rate of monsters on a map. 50 would make mobs respawn twice as fast (half delay time) (Note 2) -//Note: This does not affects mobs with inmediate respawn (most normal mobs) +//Note: This does not affects mobs with immediate respawn (most normal mobs) mob_spawn_delay: 100 plant_spawn_delay: 100 boss_spawn_delay: 100 @@ -158,7 +158,7 @@ mob_changetarget_byskill: no monster_class_change_full_recover: yes // Display some mob info next to their name? (add as needed) -// (does not works on guardian or emperium) +// (does not works on guardian or Emperium) // 1: Display mob HP (Hp/MaxHp format) // 2: Display mob HP (Percent of full life format) // 4: Display mob's level @@ -189,7 +189,7 @@ mob_remove_delay: 300000 // NOTE: This affects who gains the Castle when the Emperium is broken. mob_npc_event_type: 1 -// Time in milliseconds to actitave protection against Kill Steal +// Time in milliseconds to activate protection against Kill Steal // Set to 0 to disable it. // If this is activated and a player is using @noks, damage from others players (KS) not in the party // will be reduced to 0. diff --git a/conf/battle/party.conf b/conf/battle/party.conf index 7339b2e3c..14d5f47c8 100644 --- a/conf/battle/party.conf +++ b/conf/battle/party.conf @@ -44,7 +44,7 @@ party_item_share_type: 0 // A character's idle status is reset upon item use/skill use/attack (auto attack counts too)/movement. idle_no_share: no -// Give additional experience bonus per party-member involved on even-share parties (excluding youself)? +// Give additional experience bonus per party-member involved on even-share parties (excluding yourself)? // ex. If set to 10, an even-share party of 5 people will receive +40% exp (4 members * 10% exp): // 140% party experience in total, so each member receives 140%/5 = 28% exp (instead of 20%). party_even_share_bonus: 0 diff --git a/conf/battle/skill.conf b/conf/battle/skill.conf index df419b262..bc107f3d7 100644 --- a/conf/battle/skill.conf +++ b/conf/battle/skill.conf @@ -20,7 +20,7 @@ delay_rate: 100 delay_dependon_dex: no delay_dependon_agi: no -// Minimum allowed delay for ANY skills after casting (in miliseconds) (Note 1) +// Minimum allowed delay for ANY skills after casting (in milliseconds) (Note 1) // Note: Setting this to anything above 0 can stop speedhacks. min_skill_delay_limit: 100 @@ -91,7 +91,7 @@ defunit_not_enemy: no // Do skills do at least 'hits' damage when they don't miss/are blocked? //(for example, will firebolts always do "number of bolts" damage versus plants?) -//Values (add as appropiate): 1 for weapon-based attacks, 2 for magic attacks, 4 for misc attacks. +//Values (add as appropriate): 1 for weapon-based attacks, 2 for magic attacks, 4 for misc attacks. skill_min_damage: 6 // The delay rate of monk's combo (Note 2) @@ -128,7 +128,7 @@ traps_setting: 0 summon_flora_setting: 3 // Whether placed down skills will check walls (Note 1) -// (Makes it so that Storm Gust/Lord of Vermillion/etc when casted next to a wall, won't hit on the other side) +// (Makes it so that Storm Gust/Lord of Vermillion/etc when cast next to a wall, won't hit on the other side) skill_wall_check: yes // When cloaking, Whether the wall is checked or not. (Note 1) @@ -168,7 +168,7 @@ sense_type: 1 // 1 = Athena style (multiple consecutive attacks) finger_offensive_type: 0 -// Grandcross Settings (Dont mess with these) +// Grandcross Settings (Don't mess with these) // If set to no, hit interval is increased based on the amount of mobs standing on the same cell // (means that when there's stacked mobs in the same cell, they won't receive all hits) gx_allhit: no @@ -212,7 +212,7 @@ berserk_cancels_buffs: no max_heal: 9999 max_heal_lv: 11 -// Emergency Recall Guild Skill setting (add as appropiate). +// Emergency Recall Guild Skill setting (add as appropriate). // Note that for the skill to be usable at all, // you need at least one of 1/2 and 4/8 // 1: Skill is usable outside of woe. @@ -223,7 +223,7 @@ max_heal_lv: 11 // (it will work on GVG castles even if they are set to nowarpto, though) emergency_call: 11 -// Guild Aura Skills setting (add as appropiate). +// Guild Aura Skills setting (add as appropriate). // (This affects GD_LEADERSHIP, GD_GLORYWOUNDS, GD_SOULCOLD and GD_HAWKEYES) // Note that for the skill to be usable at all, // you need at least one of 1/2 and 4/8 @@ -258,7 +258,7 @@ sg_angel_skill_ratio: 10 skill_add_heal_rate: 7 // Whether the damage of EarthQuake with a single target on screen is able to be reflected. -// Note: On offcial server, EQ is reflectable when there is only one target on the screen, +// Note: On official server, EQ is reflectable when there is only one target on the screen, // which might be an exploit to hunt the MVPs. eq_single_target_reflectable: yes diff --git a/conf/help.txt b/conf/help.txt index 16e7c2981..18630bf59 100644 --- a/conf/help.txt +++ b/conf/help.txt @@ -32,7 +32,7 @@ mobsearch: "Params: \n" "Shows the location of a certain mob on who: "Params: []\n" "Shows a list of online players and their party and guild." who2: "Params: []\n" "Shows a list of online players and their job." who3: "Params: []\n" "Shows a list of online players and their location." -whomap: "@whomap/@whomap2/@whomap3 [map] - like @who/@who2/@who3 but only for specifical map." +whomap: "@whomap/@whomap2/@whomap3 [map] - like @who/@who2/@who3 but only for specified map." whogm: "Params: [match_text] - Like @who+@who2+who3, but only for GM." guildspy: "Params: - You will receive all messages of the guild channel (Chat logging must be enabled)" partyspy: "@partyspy - You will receive all messages of the party channel (Chat logging must be enabled)" @@ -221,7 +221,7 @@ request: "Params: \n" "Sends a message to all connected GMs (via the gm sound: "Params: \n" "Plays a sound from the data folder or GRF file located on the client." clone: "Params: \n" "Spawns a supportive clone of the given player." slaveclone: "Params: \n" "Spawns a supportive clone of the given player that follows the creator around." -evilclone: "Params: \n" "Spawns an agressive clone of the given player." +evilclone: "Params: \n" "Spawns an aggressive clone of the given player." changesex: "Changes your gender." duel: "Starts a duel." invite: "Invites a player to a duel." diff --git a/conf/login-server.conf b/conf/login-server.conf index 8f2fa1bf1..fd1ef45f5 100644 --- a/conf/login-server.conf +++ b/conf/login-server.conf @@ -25,7 +25,7 @@ login_port: 6900 //If redirected output contains escape sequences (color codes) stdout_with_ansisequence: no -//Makes server output more silent by ommitting certain types of messages: +//Makes server output more silent by omitting certain types of messages: //1: Hide Information messages //2: Hide Status messages //4: Hide Notice Messages diff --git a/conf/logs.conf b/conf/logs.conf index 2aeb1b52e..f036cbccf 100644 --- a/conf/logs.conf +++ b/conf/logs.conf @@ -25,7 +25,7 @@ // 0x02000 - (E) Log mail system transactions. // 0x04000 - (I) Log auction system transactions. // 0x08000 - (B) Log buying store transactions -// 0x10000 - (X) Log all other transcations (rentals expiring/inserting cards/items removed by item_check/ +// 0x10000 - (X) Log all other transactions (rentals expiring/inserting cards/items removed by item_check/ // rings deleted by divorce/pet egg (un)hatching/pet armor (un)equipping/Weapon Refine skill/Remove Trap skill) // Example: Log trades+vending+script items+created items: 1+2+32+1024 = 1059 // Please note that moving items from inventory to cart and back is not logged by design. @@ -77,7 +77,7 @@ log_branch: no // Track Zeny Changes // Filter settings -// 0 - don't log; 1 - log any zeny changes; 2.....1000000 - minimal absolut logging zeny value +// 0 - don't log; 1 - log any zeny changes; 2.....1000000 - minimal absolute logging zeny value log_zeny: 0 // Log MVP Monster Drops (Note 1) diff --git a/conf/map-server.conf b/conf/map-server.conf index 446bb0d0e..fb4614ca3 100644 --- a/conf/map-server.conf +++ b/conf/map-server.conf @@ -55,7 +55,7 @@ stdout_with_ansisequence: no //Messages logged by this overrides console_silent setting console_msg_log: 0 -//Makes server output more silent by ommitting certain types of messages: +//Makes server output more silent by omitting certain types of messages: //1: Hide Information messages //2: Hide Status messages //4: Hide Notice Messages diff --git a/conf/messages.conf b/conf/messages.conf index e2886a57d..d9472952d 100644 --- a/conf/messages.conf +++ b/conf/messages.conf @@ -828,7 +828,7 @@ 1031: Please enter part of an item name (usage: @idsearch ). // @recallall / @guildrecall / @partyrecall -1032: You are not authorized to warp somenone to your current map. +1032: You are not authorized to warp someone to your current map. 1033: Because you are not authorized to warp from some maps, %d player(s) have not been recalled. // @guildrecall diff --git a/conf/plugins.conf b/conf/plugins.conf index 264592fa9..58ecb7144 100644 --- a/conf/plugins.conf +++ b/conf/plugins.conf @@ -14,7 +14,7 @@ //== Description ===================================== //The plugin system allows you to create customized scripts //outside of the source. These scripts won't conflict with any -//future source updates - think about it as a /conf/import/ version of the source. +//future source updates - think of it as a /conf/import/ for the source. //==================================================== /* --------------- Format --------------- diff --git a/db/castle_db.txt b/db/castle_db.txt index 4e0f2e880..45a1443d5 100644 --- a/db/castle_db.txt +++ b/db/castle_db.txt @@ -3,33 +3,33 @@ // Structure of Database: // CastleID,MapName,CastleName,OnGuildBreakEventName,Flag // -// 01. CastleID Unique ID of the castle. Must remain unique across all map-servers. -// 02. MapName Map name to be considered as the castle map. -// 03. CastleName Name of the castle (used by scripts and guardian name tags). -// 04. OnGuildBreakEventName NPC unique name to invoke ::OnGuildBreak on, when a occupied -// castle is abandoned during guild break. -// 05. Flag Switch flag (reserved as of athena-dev mod0796~0801, not used by server). +// 01. CastleID Unique ID of the castle. Must remain unique across all map-servers. +// 02. MapName Map name to be considered as the castle map. +// 03. CastleName Name of the castle (used by scripts and guardian name tags). +// 04. OnGuildBreakEventName NPC unique name to invoke ::OnGuildBreak on, when a occupied +// castle is abandoned during guild break. +// 05. Flag Switch flag (reserved as of athena-dev mod0796~0801, not used by server). 0,aldeg_cas01,Neuschwanstein,Agit#aldeg_cas01,1 // kRO : Noisyubantian 1,aldeg_cas02,Hohenschwangau,Agit#aldeg_cas02,1 // kRO : Hohensyubangawoo 2,aldeg_cas03,Nuernberg,Agit#aldeg_cas03,1 // kRO : Nyirenverk 3,aldeg_cas04,Wuerzburg,Agit#aldeg_cas04,1 // kRO : Byirtsburi -4,aldeg_cas05,Rothenburg,Agit#aldeg_cas05,1 // kRO : Rotenburk +4,aldeg_cas05,Rothenburg,Agit#aldeg_cas05,1 // kRO : Rotenburk 5,gefg_cas01,Repherion,Agit#gefg_cas01,1 // kRO : Reprion -6,gefg_cas02,Eeyolbriggar,Agit#gefg_cas02,1 // kRO : Yolbriger -7,gefg_cas03,Yesnelph,Agit#gefg_cas03,1 // kRO : Isinlife -8,gefg_cas04,Bergel,Agit#gefg_cas04,1 // kRO : Berigel -9,gefg_cas05,Mersetzdeitz,Agit#gefg_cas05,1 // kRO : Melsedetsu +6,gefg_cas02,Eeyolbriggar,Agit#gefg_cas02,1 // kRO : Yolbriger +7,gefg_cas03,Yesnelph,Agit#gefg_cas03,1 // kRO : Isinlife +8,gefg_cas04,Bergel,Agit#gefg_cas04,1 // kRO : Berigel +9,gefg_cas05,Mersetzdeitz,Agit#gefg_cas05,1 // kRO : Melsedetsu 10,payg_cas01,Bright Arbor,Agit#payg_cas01,1 // kRO : Mingting 11,payg_cas02,Scarlet Palace,Agit#payg_cas02,1 // kRO : Tiantan -12,payg_cas03,Holy Shadow,Agit#payg_cas03,1 // kRO : Fuying +12,payg_cas03,Holy Shadow,Agit#payg_cas03,1 // kRO : Fuying 13,payg_cas04,Sacred Altar,Agit#payg_cas04,1 // kRO : Honglou 14,payg_cas05,Bamboo Grove Hill,Agit#payg_cas05,1 // kRO : Zhulinxian 15,prtg_cas01,Kriemhild,Agit#prtg_cas01,1 // kRO : Creamhilt 16,prtg_cas02,Swanhild,Agit#prtg_cas02,1 // kRO : Sbanhealt 17,prtg_cas03,Fadhgridh,Agit#prtg_cas03,1 // kRO : Lazrigees -18,prtg_cas04,Skoegul,Agit#prtg_cas04,1 // kRO : Squagul -19,prtg_cas05,Gondul,Agit#prtg_cas05,1 // kRO : Guindull +18,prtg_cas04,Skoegul,Agit#prtg_cas04,1 // kRO : Squagul +19,prtg_cas05,Gondul,Agit#prtg_cas05,1 // kRO : Guindull 20,nguild_alde,Earth,Agit_N01,2 21,nguild_gef,Air,Agit_N02,2 22,nguild_pay,Water,Agit_N03,2 @@ -38,9 +38,9 @@ 25,schg_cas02,Andlangr,Manager#schg_cas02,1 // kRO : Andlangr 26,schg_cas03,Viblainn,Manager#schg_cas03,1 // kRO : Viblainn 27,schg_cas04,Hljod,Manager#schg_cas04,1 // kRO : Hljod -28,schg_cas05,Skidbladnir,Manager#schg_cas05,1 // kRO : Skidbladnir +28,schg_cas05,Skidbladnir,Manager#schg_cas05,1 // kRO : Skidbladnir 29,arug_cas01,Mardol,Manager#arug_cas01,1 // kRO : Mardol -30,arug_cas02,Cyr,Manager#arug_cas02,1 // kRO : Cyr -31,arug_cas03,Horn,Manager#arug_cas03,1 // kRO : Horn -32,arug_cas04,Gefn,Manager#arug_cas04,1 // kRO : Gefn +30,arug_cas02,Cyr,Manager#arug_cas02,1 // kRO : Cyr +31,arug_cas03,Horn,Manager#arug_cas03,1 // kRO : Horn +32,arug_cas04,Gefn,Manager#arug_cas04,1 // kRO : Gefn 33,arug_cas05,Bandis,Manager#arug_cas05,1 // kRO : Bandis diff --git a/db/const.txt b/db/const.txt index cef0593e1..692958a92 100644 --- a/db/const.txt +++ b/db/const.txt @@ -6,13 +6,13 @@ // Alternatively: // Identifier,Value[,Type] // -// 01. Identifier Unique name for the constant, must not have same name as script commands, functions or variables. -// 02. Value Value assigned to the constant. This value cannot be changed during the runtime of the server. -// 03. Type Specifies whether the identifier is a constant (0) or a parameter (1) (optional, defaults to 0). +// 01. Identifier Unique name for the constant, must not have same name as script commands, functions or variables. +// 02. Value Value assigned to the constant. This value cannot be changed during the runtime of the server. +// 03. Type Specifies whether the identifier is a constant (0) or a parameter (1) (optional, defaults to 0). // -// NOTE: Parameters are special in that they retrieve certain runtime values depending on the specified ID -// in field Value. Depending on the implementation values assigned by scripts to parameters will affect -// runtime values, such as Zeny, as well (see pc_readparam/pc_setparam). +// NOTE: Parameters are special in that they retrieve certain runtime values depending on the specified ID +// in field Value. Depending on the implementation values assigned by scripts to parameters will affect +// runtime values, such as Zeny, as well (see pc_readparam/pc_setparam). Job_Novice 0 Job_Swordman 1 diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index fce54b24e..ada0cf8ec 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -386,8 +386,8 @@ bonus2 bWeaponAtk,x,n; Adds n ATK when weapon of type x is equipped. bonus2 bWeaponAtkRate,x,n; Adds n% damage to normal attacks when weapon of type x is equipped. x: see doc/item_db.txt -> view -> weapons for possible values bonus bDelayrate,n; Increases skill delay by n%. -bonus3 bHPDrainRateRace,r,n,x; Adds a n/10% chance to receive x% of dealed damage as HP from a monster of race r with normal attack. -bonus3 bSPDrainRateRace,r,n,x; Adds a n/10% chance to receive x% of dealed damage as SP from a monster of race r with normal attack. +bonus3 bHPDrainRateRace,r,n,x; Adds a n/10% chance to receive x% of damage dealt as HP from a monster of race r with normal attack. +bonus3 bSPDrainRateRace,r,n,x; Adds a n/10% chance to receive x% of damage dealt as SP from a monster of race r with normal attack. bonus3 bAddEffOnSkill,s,x,n; Adds a n/100% chance to cause status change x on enemy when using skill s (supports skill names) bonus4 bAddEffOnSkill,s,x,n,t; Adds a n/100% chance to cause status change x when using skill s (supports skill names) t: ATF_SELF = causes status change to oneself diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 0441d385a..f6de42316 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -67,8 +67,7 @@ expression, like a bunch of functions or operators returning a value, in (round brackets) instead of most numbers. Round brackets will not always be required, but they're often a good idea. -Wherever you refer to a map name, it's always 'mapname' or 'mapname.gat' -(Please, don't use .gat suffix anymore. It's useless.) +Wherever you refer to a map, use 'mapname' instead of 'mapname.gat'. Script loading structure @@ -780,7 +779,7 @@ Logical bitwise operators work only on numbers, and they are the following: hand, it sets to 1 if they have different values in the said binary position. This is another way of setting and unsetting bits in bit-masks. - + Example: - First let's set the quests that are currently in progress: set inProgress,1|8|16; // quest 1,8 and 16 are in progress @@ -1793,93 +1792,93 @@ above. Anything that is returned by a function can be used in a condition check without bothering to store it in a specific variable: - if (strcharinfo(0)=="Daniel Jackson") mes "It is true, you are Daniel!"; + if (strcharinfo(0)=="Daniel Jackson") mes "It is true, you are Daniel!"; More examples of using the 'if' command in the real world: Example 1: - set @var1,1; - input @var2; - if(@var1==@var2) goto L_Same; - mes "Sorry that is wrong"; - close; - L_Same: - close; + set @var1,1; + input @var2; + if(@var1==@var2) goto L_Same; + mes "Sorry that is wrong"; + close; + L_Same: + close; Example 2: - - set @var1,1; - input @var2; - if(@var1!=@var2) mes "Sorry that is wrong"; - close; + + set @var1,1; + input @var2; + if(@var1!=@var2) mes "Sorry that is wrong"; + close; (Notice examples 1 and 2 have the same effect.) Example 3: - set @var1,@var1+1; - mes "[Forgetfull Man]"; - if (@var==1) mes "This is the first time you have talked to me"; - if (@var==2) mes "This is the second time you have talked to me"; - if (@var==3) mes "This is the third time you have talked to me"; - if (@var==4) mes "This is the forth time you have talked to me, but I think I am getting amnesia, I have forgotten about you"; - if (@var==4) set @var,0; - close; + set @var1,@var1+1; + mes "[Forgetfull Man]"; + if (@var==1) mes "This is the first time you have talked to me"; + if (@var==2) mes "This is the second time you have talked to me"; + if (@var==3) mes "This is the third time you have talked to me"; + if (@var==4) mes "This is the forth time you have talked to me, but I think I am getting amnesia, I have forgotten about you"; + if (@var==4) set @var,0; + close; Example 4: - mes "[Quest Person]"; - if(countitem(512)>=1) goto L_GiveApple; - // The number 512 was found from item_db, it is the item number - // for the Apple. - mes "Can you please bring me an apple?"; - close; - L_GiveApple: - mes "Oh an apple, I didn't want it, I just wanted to see one"; - close; + mes "[Quest Person]"; + if(countitem(512)>=1) goto L_GiveApple; + // The number 512 was found from item_db, it is the item number + // for the Apple. + mes "Can you please bring me an apple?"; + close; + L_GiveApple: + mes "Oh an apple, I didn't want it, I just wanted to see one"; + close; Example 5: - mes "[Person Checker]"; - if($name$!=null) goto L_Check; - mes "Please tell me someones name"; - next; - input $name$; - set $name2$,strcharinfo(0); - mes "[Person Checker]"; - mes "Thank you"; - L_Check: - if($name$==strcharinfo(0) ) goto L_SameName; - mes "[Person Checker]"; - mes "You are not the person that " +$name2$+ " mentioned"; - L_End: - set $name$,null; - set $name2$,null; - close; - L_SameName: - mes "[Person Checker]"; - mes "You are the person that " +$name2$+ " just mentioned"; - mes "nice to meet you"; - goto L_End; + mes "[Person Checker]"; + if($name$!=null) goto L_Check; + mes "Please tell me someones name"; + next; + input $name$; + set $name2$,strcharinfo(0); + mes "[Person Checker]"; + mes "Thank you"; + L_Check: + if($name$==strcharinfo(0) ) goto L_SameName; + mes "[Person Checker]"; + mes "You are not the person that " +$name2$+ " mentioned"; + L_End: + set $name$,null; + set $name2$,null; + close; + L_SameName: + mes "[Person Checker]"; + mes "You are the person that " +$name2$+ " just mentioned"; + mes "nice to meet you"; + goto L_End; See 'strcharinfo' for explanation of what this function does. Example 6: Using complex conditions. - mes "[Multi Checker]"; - if( (@queststarted==1) && (countitem(512)>=5) ) goto L_MultiCheck; - // Only if the quest has been started AND You have 5 apples will it goto "L_MultiCheck" - mes "Please get me 5 apples"; - set @queststarted,1; - close; - L_MultiCheck: - mes "[Multi Checker]"; - mes "Well done you have started the quest of got me 5 apples"; - mes "Thank you"; - set @queststarted,0; - delitem 512,5; - close; + mes "[Multi Checker]"; + if( (@queststarted==1) && (countitem(512)>=5) ) goto L_MultiCheck; + // Only if the quest has been started AND You have 5 apples will it goto "L_MultiCheck" + mes "Please get me 5 apples"; + set @queststarted,1; + close; + L_MultiCheck: + mes "[Multi Checker]"; + mes "Well done you have started the quest of got me 5 apples"; + mes "Thank you"; + set @queststarted,0; + delitem 512,5; + close; With the Advanced scripting engine, we got nested if's. That is: @@ -2042,7 +2041,7 @@ Example: dothis; // will sleep the script for 1ms when detect an infinity loop to // let Hercules do what it need to do (socket, timer, process, - // etc.) + // etc.) } freeloop(0); // disable @@ -2059,14 +2058,14 @@ Example: This command will allow you to quickly fill up an array in one go. Check the Kafra scripts in the distribution to see this used a lot. - setarray @array[0], 100, 200, 300, 400, 500, 600; + setarray @array[0], 100, 200, 300, 400, 500, 600; First value is the index of the first element of the array to alter. For example: - setarray @array[0],200,200,200; - setarray @array[1],300,150; - + setarray @array[0],200,200,200; + setarray @array[1],300,150; + will produce: @array[0]=200 @@ -2080,13 +2079,13 @@ will produce: This command will change many array values at the same time to the same value. - setarray @array[0], 100, 200, 300, 400, 500, 600; - // This will make all 6 values 0 - cleararray @array[0],0,6; - // This will make array element 0 change to 245 - cleararray @array[0],245,1; - // This will make elements 1 and 2 change to 345 - cleararray @array[1],345,2; + setarray @array[0], 100, 200, 300, 400, 500, 600; + // This will make all 6 values 0 + cleararray @array[0],0,6; + // This will make array element 0 change to 245 + cleararray @array[0],245,1; + // This will make elements 1 and 2 change to 345 + cleararray @array[1],345,2; See 'setarray'. @@ -2097,12 +2096,12 @@ See 'setarray'. This command lets you quickly shuffle a lot of data between arrays, which is in some cases invaluable. - setarray @array[0], 100, 200, 300, 400, 500, 600; - // So we have made @array[] - copyarray @array2[0],@array[2],2; - - // Now, @array2[0] will be equal to @array[2] (300) and - // @array2[1] will be equal to @array[3]. + setarray @array[0], 100, 200, 300, 400, 500, 600; + // So we have made @array[] + copyarray @array2[0],@array[2],2; + + // Now, @array2[0] will be equal to @array[2] (300) and + // @array2[1] will be equal to @array[3]. So using the examples above: @array[0] = 100 @@ -2128,14 +2127,13 @@ and it will return a 0. This command will delete a specified number of array elements totally from an array, shifting all the elements beyond this towards the beginning. - // This will delete array element 0, and move all the other array - // elements up one place. - deletearray @array[0],1 - -// This would delete array elements numbered 1, 2 and 3, leave element 0 -// in its place, and move the other elements ups, so there are no gaps. + // This will delete array element 0, and move all the other array + // elements up one place. + deletearray @array[0],1 - deletearray @array[1],3 + // This would delete array elements numbered 1, 2 and 3, leave element 0 + // in its place, and move the other elements ups, so there are no gaps. + deletearray @array[1],3 --------------------------------------- @@ -2180,14 +2178,14 @@ array are not counted towards this number. For example: - setarray @array[0], 100, 200, 300, 400, 500, 600; - set @arraysize,getarraysize(@array); + setarray @array[0], 100, 200, 300, 400, 500, 600; + set @arraysize,getarraysize(@array); This will make @arraysize == 6. But if you try this: - setarray @array[0], 100, 200, 300, 400, 500, 600, 0; - set @arraysize,getarraysize(@array); - + setarray @array[0], 100, 200, 300, 400, 500, 600, 0; + set @arraysize,getarraysize(@array); + @arraysize will still equal 6, even though you've set 7 values. --------------------------------------- @@ -2197,15 +2195,15 @@ This will make @arraysize == 6. But if you try this: This command retrieves the value of the element of given array at given index. This is equivalent to using: - [] + [] The reason for this is, that this short form is internally converted into a call to getelementofarray, when the script is loaded. Also useful when passing arrays to functions or accessing another npc's arrays: - getelementofarray(getarg(0),) - getelementofarray(getvariableofnpc(.var, "testNPC"),) + getelementofarray(getarg(0),) + getelementofarray(getvariableofnpc(.var, "testNPC"),) --------------------------------------- @@ -2226,20 +2224,20 @@ All of these also behave as variables, but don't expect to be able to just Example 1: - // Returns how many status points you haven't spent yet. - mes "Unused status points: "+readparam(9); + // Returns how many status points you haven't spent yet. + mes "Unused status points: "+readparam(9); Using this particular information as a function call is not required. Typing this will return the same result: - mes "Unused status points: "+StatusPoint; + mes "Unused status points: "+StatusPoint; Example 2: You can also use this command to get stat values. - if (readparam(bVit) > 77) - mes "Only people with over 77 Vit are reading this!"; + if (readparam(bVit) > 77) + mes "Only people with over 77 Vit are reading this!"; --------------------------------------- @@ -2278,7 +2276,7 @@ Retrieves IDs of the currently invoked NPC. If a unique npc name is given, IDs of that NPC are retrieved instead. Type specifies what ID to retrieve and can be one of the following: - 0 - Unit ID (GID) + 0 - Unit ID (GID) If an invalid type is given or the NPC does not exist, 0 is returned. @@ -2291,7 +2289,7 @@ If an invalid type is given or the NPC does not exist, 0 is returned. These functions return the character ID of the attached player's child, mother, mother, or father, respectively. It returns 0 if no ID is found. - if (getmotherid()) mes "Your mother's ID is: "+getmotherid(); + if (getmotherid()) mes "Your mother's ID is: "+getmotherid(); --------------------------------------- @@ -2308,8 +2306,8 @@ This function returns the character ID of the invoking character's marriage partner, if any. If the invoking character is not married, it will return 0, which is a quick way to see if they are married: - if (!getpartnerid()) mes "I'm not going to be your girlfriend!"; - if (getpartnerid()) mes "You're married already!"; + if (!getpartnerid()) mes "I'm not going to be your girlfriend!"; + if (getpartnerid()) mes "You're married already!"; --------------------------------------- @@ -2320,9 +2318,9 @@ number. If there is no such party ID, "null" will be returned. Lets say the ID of a party was saved as a global variable: - // This would return the name of the party from the ID stored in a - // variable - mes "You're in the '"+getpartyname($@var)+"' party, I know!"; + // This would return the name of the party from the ID stored in a + // variable + mes "You're in the '"+getpartyname($@var)+"' party, I know!"; --------------------------------------- @@ -2371,9 +2369,9 @@ Example 1: list party member names // It's a good idea to copy the global temporary $@partymember***** // variables to your own scope variables because if you have pauses in - // this script (sleep, sleep2, next, close2, input, menu, select, or - // prompt), another player could click this NPC, trigger - // 'getpartymember', and overwrite the $@partymember***** variables. + // this script (sleep, sleep2, next, close2, input, menu, select, or + // prompt), another player could click this NPC, trigger + // 'getpartymember', and overwrite the $@partymember***** variables. set .@count, $@partymembercount; copyarray .@name$[0], $@partymembername$[0], $@partymembercount; @@ -2402,10 +2400,10 @@ Example 2: check party count (with a 'next' pause), before warping to event if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) set .@count_online, .@count_online +1 ; // We search accountID & charID because a single party can have - // multiple characters from the same account. Without searching - // through the charID, if a player has 2 characters from the same - // account inside the party but only 1 char online, it would count - // their online char twice. + // multiple characters from the same account. Without searching + // through the charID, if a player has 2 characters from the same + // account inside the party but only 1 char online, it would count + // their online char twice. if ( .@count_online != .register_num ) { mes "All your party members must be online to continue"; @@ -2420,9 +2418,9 @@ Example 2: check party count (with a 'next' pause), before warping to event select "Yes"; // When a script hits a next, menu, sleep or input that pauses the - // script, players can invite or /leave and make changes in their - // party. To prevent this, we call getpartymember again and compare - // with the original values. + // script, players can invite or /leave and make changes in their + // party. To prevent this, we call getpartymember again and compare + // with the original values. getpartymember getcharid(1), 1; if ( $@partymembercount != .register_num ) { @@ -2529,33 +2527,33 @@ for either slot. Can be used to check if you have something equipped, or if you haven't got something equipped: - if(getequipid(EQI_HEAD_TOP)==2234) goto L_WearingTiara; - mes "Come back when you have a Tiara on"; - close; - L_WearingTiara: - mes "What a lovely Tiara you have on"; - close; + if(getequipid(EQI_HEAD_TOP)==2234) goto L_WearingTiara; + mes "Come back when you have a Tiara on"; + close; + L_WearingTiara: + mes "What a lovely Tiara you have on"; + close; You can also use it to make sure people don't pass a point before removing an item totally from them. Let's say you don't want people to wear Legion Plate armor, but also don't want them to equip if after the check, you would do this: - if ((getequipid(EQI_ARMOR) == 2341) || (getequipid(EQI_ARMOR) == 2342) goto L_EquipedLegionPlate; - // the || is used as an or argument, there is 2341 and 2342 cause - // there are two different legion plate armors, one with a slot one - // without. - if ((countitem(2341) > 0) || (countitem(2432) > 0) goto L_InventoryLegionPlate; - mes "I will lets you pass"; - close2; - warp "place",50,50; - end; - L_EquipedLegionPlate: - mes "You are wearing some Legion Plate Armor, please drop that in your stash before continuing"; - close; - L_InventoryLegionPlate: - mes "You have some Legion Plate Armor in your inventory, please drop that in your stash before continuing"; - close; + if ((getequipid(EQI_ARMOR) == 2341) || (getequipid(EQI_ARMOR) == 2342) goto L_EquipedLegionPlate; + // the || is used as an or argument, there is 2341 and 2342 cause + // there are two different legion plate armors, one with a slot one + // without. + if ((countitem(2341) > 0) || (countitem(2432) > 0) goto L_InventoryLegionPlate; + mes "I will lets you pass"; + close2; + warp "place",50,50; + end; + L_EquipedLegionPlate: + mes "You are wearing some Legion Plate Armor, please drop that in your stash before continuing"; + close; + L_InventoryLegionPlate: + mes "You have some Legion Plate Armor in your inventory, please drop that in your stash before continuing"; + close; --------------------------------------- @@ -2568,10 +2566,10 @@ Does the same thing as getitemname(getequipid()). Useful for an NPC to state what your are wearing, or maybe saving as a string variable. See 'getequipid' for a full list of valid equipment slots. - if( getequipname(EQI_HEAD_TOP) != "" ) - mes "So you are wearing a "+getequipname(EQI_HEAD_TOP)+" on your head"; + if( getequipname(EQI_HEAD_TOP) != "" ) + mes "So you are wearing a "+getequipname(EQI_HEAD_TOP)+" on your head"; else - mes "You are not wearing any head gear"; + mes "You are not wearing any head gear"; --------------------------------------- @@ -2591,12 +2589,12 @@ may have several broken items, 1 given as an argument will return the first one found, 2 will return the second one, etc. Will return 0 if no such item is found. - // Let's see if they have anything broken: - if (getbrokenid(1)==0) goto Skip; - // They do, so let's print the name of the first broken item: - mes "Oh, I see you have a broken "+getitemname(getbrokenid(1))+" here!"; - Skip: - mes "You don't have anything broken, quit bothering me."; + // Let's see if they have anything broken: + if (getbrokenid(1)==0) goto Skip; + // They do, so let's print the name of the first broken item: + mes "Oh, I see you have a broken "+getitemname(getbrokenid(1))+" here!"; + Skip: + mes "You don't have anything broken, quit bothering me."; --------------------------------------- @@ -2606,14 +2604,14 @@ This functions will return 1 if there is an equipment placed on the specified equipment slot and 0 otherwise. For a list of equipment slots see 'getequipid'. Function originally used by the refining NPCs: - if (getequipisequiped(EQI_HEAD_TOP)) goto L_equipped; - mes "[Refiner]"; - mes "Do you want me to refine your dumb head?"; - close; - L_equipped: - mes "[Refiner]"; - mes "That's a fine hat you are wearing there..."; - close; + if (getequipisequiped(EQI_HEAD_TOP)) goto L_equipped; + mes "[Refiner]"; + mes "Do you want me to refine your dumb head?"; + close; + L_equipped: + mes "[Refiner]"; + mes "That's a fine hat you are wearing there..."; + close; --------------------------------------- @@ -2623,14 +2621,14 @@ Will return 1 if the item equipped on the invoking character in the specified equipment slot is refinable, and 0 if it isn't. For a list of equipment slots see 'getequipid'. - if (getequipisenableref(EQI_HEAD_TOP)) goto L_Refine; - mes "[Refiner]"; - mes "I can't refine this hat!..."; - close; - L_Refine: - mes "[Refiner]"; - mes "Ok I can refine this"; - close; + if (getequipisenableref(EQI_HEAD_TOP)) goto L_Refine; + mes "[Refiner]"; + mes "I can't refine this hat!..."; + close; + L_Refine: + mes "[Refiner]"; + mes "Ok I can refine this"; + close; --------------------------------------- @@ -2642,11 +2640,11 @@ equipment slot. For a list of equipment slots see 'getequipid'. Can be used to check if you have reached a maximum refine value, default for this is +10: - if(getequiprefinerycnt(EQI_HEAD_TOP) < 10) goto L_Refine_HeadGear; - mes "Sorry, it's not possible to refine hats better than +10"; - close; - L_Refine_HeadGear: - mes "I will now upgrade your "+getequipname(EQI_HEAD_TOP); + if(getequiprefinerycnt(EQI_HEAD_TOP) < 10) goto L_Refine_HeadGear; + mes "Sorry, it's not possible to refine hats better than +10"; + close; + L_Refine_HeadGear: + mes "I will now upgrade your "+getequipname(EQI_HEAD_TOP); --------------------------------------- @@ -2666,28 +2664,28 @@ according to the database, 0 will be returned. Examples: // Right hand can only contain a weapon. - switch (getequipweaponlv(EQI_HAND_R)) { - case 1: mes "You are holding a lvl 1 weapon."; break; - case 2: mes "You are holding a lvl 2 weapon."; break; - case 3: mes "You are holding a lvl 3 weapon."; break; - case 4: mes "You are holding a lvl 4 weapon."; break; - case 5: mes "You are holding a lvl 5 weapon, hm, must be a custom design..."; break; - default: mes "Seems you don't have a weapon on."; break; - } + switch (getequipweaponlv(EQI_HAND_R)) { + case 1: mes "You are holding a lvl 1 weapon."; break; + case 2: mes "You are holding a lvl 2 weapon."; break; + case 3: mes "You are holding a lvl 3 weapon."; break; + case 4: mes "You are holding a lvl 4 weapon."; break; + case 5: mes "You are holding a lvl 5 weapon, hm, must be a custom design..."; break; + default: mes "Seems you don't have a weapon on."; break; + } // Left hand can hold either a weapon or shield. - if (getequipid(EQI_HAND_R) == 0) { - mes "Seems you have nothing equipped here."; - close; - } - switch (getequipweaponlv(EQI_HAND_L)) { - case 0: mes "You are holding a shield, so it doesn't have a level."; break; - case 1: mes "You are holding a lvl 1 weapon."; break; - case 2: mes "You are holding a lvl 2 weapon."; break; - case 3: mes "You are holding a lvl 3 weapon."; break; - case 4: mes "You are holding a lvl 4 weapon."; break; - case 5: mes "You are holding a lvl 5 weapon, hm, must be a custom design..."; break; - } + if (getequipid(EQI_HAND_R) == 0) { + mes "Seems you have nothing equipped here."; + close; + } + switch (getequipweaponlv(EQI_HAND_L)) { + case 0: mes "You are holding a shield, so it doesn't have a level."; break; + case 1: mes "You are holding a lvl 1 weapon."; break; + case 2: mes "You are holding a lvl 2 weapon."; break; + case 3: mes "You are holding a lvl 3 weapon."; break; + case 4: mes "You are holding a lvl 4 weapon."; break; + case 5: mes "You are holding a lvl 5 weapon, hm, must be a custom design..."; break; + } --------------------------------------- @@ -2705,7 +2703,7 @@ with it (which is what the official NPC refinery scripts use it for). // This will find a random number from 0 - 99 and if that is equal to or // more than the value recovered by this command it will go to L_Fail - if (getequippercentrefinery(EQI_HAND_L)<=rand(100)) goto L_Fail; + if (getequippercentrefinery(EQI_HAND_L)<=rand(100)) goto L_Fail; --------------------------------------- @@ -2774,7 +2772,7 @@ This function will return the number of cards inserted into the weapon currently equipped on the invoking character. While this function was meant for item scripts, it will work outside them: - if (cardscnt()==4) mes "So you've stuck four cards into that weapon, think you're cool now?"; + if (cardscnt()==4) mes "So you've stuck four cards into that weapon, think you're cool now?"; --------------------------------------- @@ -2783,7 +2781,7 @@ While this function was meant for item scripts, it will work outside them: This function will return the refine count of the equipment from which the function is called. This function is intended for use in item scripts. - if (getrefine()==10) mes "Wow. That's a murder weapon."; + if (getrefine()==10) mes "Wow. That's a murder weapon."; --------------------------------------- @@ -2864,14 +2862,14 @@ parameters given were not variables or the search was not successful. Type is the type of object to search for: - 0 - Character object - 1 - NPC object - 2 - Pet object - 3 - Monster object - 4 - Homunculus object - 5 - Mercenary object - 6 - Elemental object - + 0 - Character object + 1 - NPC object + 2 - Pet object + 3 - Monster object + 4 - Homunculus object + 5 - Mercenary object + 6 - Elemental object + While 3 is meant to look for a monster object, no searching will be done if you specify type 3, and the function will always return -1. @@ -2885,22 +2883,22 @@ string, it will NOT locate a pet by name. What a mess. Example, a working and tested one now: - prontera,164,301,3%TAB%script%TAB%Meh%TAB%730,{ - mes "My name is Meh. I'm here so that Nyah can find me."; - close; - } - - prontera,164,299,3%TAB%script%TAB%Nyah%TAB%730,{ - mes "My name is Nyah."; - mes "I will now search for Meh all across the world!"; - if (getmapxy(@mapname$,@mapx,@mapy,1,"Meh")!=0) goto Notfound; - mes "And I found him on map "+@mapname$+" at X:"+@mapx+" Y:"+@mapy+" !"; - close; - Notfound: - mes "I can't seem to find Meh anywhere!"; - close; - } - + prontera,164,301,3%TAB%script%TAB%Meh%TAB%730,{ + mes "My name is Meh. I'm here so that Nyah can find me."; + close; + } + + prontera,164,299,3%TAB%script%TAB%Nyah%TAB%730,{ + mes "My name is Nyah."; + mes "I will now search for Meh all across the world!"; + if (getmapxy(@mapname$,@mapx,@mapy,1,"Meh")!=0) goto Notfound; + mes "And I found him on map "+@mapname$+" at X:"+@mapx+" Y:"+@mapy+" !"; + close; + Notfound: + mes "I can't seem to find Meh anywhere!"; + close; + } + Notice that NPC objects disabled with 'disablenpc' will still be located. --------------------------------------- @@ -2915,8 +2913,8 @@ account has no GM level. This allows you to make NPC's only accessible for certain GM levels, or behave specially when talked to by GMs. - if (getgmlevel()) mes "What is your command, your godhood?"; - if (getgmlevel()) goto Wherever; + if (getgmlevel()) mes "What is your command, your godhood?"; + if (getgmlevel()) goto Wherever; --------------------------------------- @@ -2959,7 +2957,7 @@ This function returns specified information about the current system time. It will only return numbers. - if (gettime(4)==6) mes "It's a Saturday. I don't work on Saturdays."; + if (gettime(4)==6) mes "It's a Saturday. I don't work on Saturdays."; --------------------------------------- @@ -2976,8 +2974,8 @@ Max length is the maximum length of a time string to generate. The example given in Hercules sample scripts works like this: - mes gettimestr("%Y-%m/%d %H:%M:%S",21); - + mes gettimestr("%Y-%m/%d %H:%M:%S",21); + This will print a full date and time like 'YYYY-MM/DD HH:MM:SS'. --------------------------------------- @@ -2989,10 +2987,10 @@ What it returns is specified by Type. Type can be one of the following values, which control what is returned: - 0 - Count of all characters on the map of the invoking character. - 1 - Count of all characters in the entire server. - 8 - Count of all characters on the map of the NPC the script is - running in. + 0 - Count of all characters on the map of the invoking character. + 1 - Count of all characters in the entire server. + 8 - Count of all characters on the map of the NPC the script is + running in. --------------------------------------- @@ -3036,12 +3034,12 @@ You need to put a 'close' after that yourself. This function returns a guild's name given an ID number. If there is no such guild, "null" will be returned; - // Would print whatever guild 10007 name is. - mes "The guild "+GetGuildName(10007)+" are all nice people."; + // Would print whatever guild 10007 name is. + mes "The guild "+GetGuildName(10007)+" are all nice people."; - // This will do the same as above: - set @var,10007; - mes "We have some friends in "+GetGuildName(@var)+", you know."; + // This will do the same as above: + set @var,10007; + mes "We have some friends in "+GetGuildName(@var)+", you know."; This is used all over the WoE controlling scripts. You could also use it for a guild-based event. @@ -3054,24 +3052,24 @@ This function return the name of the master of the guild which has the specified ID number. If there is no such guild, "null" will be returned. // Would return the guild master of guild 10007, whatever that might be. - mes getguildmaster(10007)+" runs "+getguildname(10007); + mes getguildmaster(10007)+" runs "+getguildname(10007); Can be used to check if the character is the guild master of the specified guild. Maybe you want to make a room only guild masters can enter: - set @GID,getcharid(2); - if(@GID==0) goto L_NoGuild; - if(strcharinfo(0)==getguildmaster(@GID)) goto L_GuildMaster; - mes "Sorry you don't own the guild you are in"; - close; - L_NoGuild: - mes "Sorry you are not in a guild"; - close; - L_GuildMaster: - mes "Welcome guild master of "+GetGuildName(@GID); - close; + set @GID,getcharid(2); + if(@GID==0) goto L_NoGuild; + if(strcharinfo(0)==getguildmaster(@GID)) goto L_GuildMaster; + mes "Sorry you don't own the guild you are in"; + close; + L_NoGuild: + mes "Sorry you are not in a guild"; + close; + L_GuildMaster: + mes "Welcome guild master of "+GetGuildName(@GID); + close; --------------------------------------- @@ -3182,25 +3180,25 @@ enough. Example 1: - if (getskilllv(152)) goto L_HasSkillThrowStone; - mes "You don't have Throw Stone"; - close; - L_HasSkillThrowStone: - mes "You have got the skill Throw Stone"; - close; + if (getskilllv(152)) goto L_HasSkillThrowStone; + mes "You don't have Throw Stone"; + close; + L_HasSkillThrowStone: + mes "You have got the skill Throw Stone"; + close; Example 2: - if (getskilllv(28) >= 5) goto L_HasSkillHeallvl5orMore; - if (getskilllv(28) == 10) goto L_HasSkillHealMaxed; - mes "You heal skill is below lvl 5"; - close; - L_HasSkillHeallvl6orMore: - mes "Your heal lvl is 5 or more"; - close; - L_HasSkillHealMaxed: - mes "Your heal lvl has been maxed"; - close; + if (getskilllv(28) >= 5) goto L_HasSkillHeallvl5orMore; + if (getskilllv(28) == 10) goto L_HasSkillHealMaxed; + mes "You heal skill is below lvl 5"; + close; + L_HasSkillHeallvl6orMore: + mes "Your heal lvl is 5 or more"; + close; + L_HasSkillHealMaxed: + mes "Your heal lvl has been maxed"; + close; --------------------------------------- @@ -3325,9 +3323,9 @@ Example: if (getmobdrops(.@mob_id)) { // 'getmobdrops' returns 1 on success // immediately copy global temporary variables into scope - // variables, since we don't know when 'getmobdrops' will get - // called again for another mob, overwriting your global temporary - // variables. + // variables, since we don't know when 'getmobdrops' will get + // called again for another mob, overwriting your global temporary + // variables. set .@count, $@MobDrop_count; copyarray .@item[0],$@MobDrop_item[0],.@count; copyarray .@rate[0],$@MobDrop_rate[0],.@count; @@ -3373,8 +3371,8 @@ invoking character, in percent, modified by the their current defense against said status. The 'base rate' is the base chance of the status effect being inflicted, in percent. - if (rand(100) > getscrate(Eff_Blind, 50)) goto BlindHimNow; - + if (rand(100) > getscrate(Eff_Blind, 50)) goto BlindHimNow; + You can see the full list of available effect types you can possibly inflict in 'db/const.txt' under 'Eff_'. @@ -3551,7 +3549,7 @@ Note: the character needs to have the skill HT_FALCON to gain a falcon. The accompanying function will return 1 if the invoking character has a falcon and 0 if they don't. - if (checkfalcon()) mes "But you already have a falcon!"; + if (checkfalcon()) mes "But you already have a falcon!"; --------------------------------------- @@ -3568,7 +3566,7 @@ Note: the character needs to have the skill KN_RIDING to gain a mount. The accompanying function will return 1 if the invoking character is riding a bird and 0 if they aren't. - if (checkriding()) mes "PLEASE leave your bird outside! No riding birds on the floor here!"; + if (checkriding()) mes "PLEASE leave your bird outside! No riding birds on the floor here!"; --------------------------------------- @@ -3586,7 +3584,7 @@ If the character can mount a dragon, the options are: 5 - Red Dragon Note: the character must be a Rune Knight and have the skill - RK_DRAGONTRAINING to gain a mount. + RK_DRAGONTRAINING to gain a mount. The accompanying function will return 1 if the invoking character is riding a dragon and 0 if they aren't. @@ -3611,7 +3609,7 @@ The 'setmounting' function toggles cash mount for the invoking character. It will return 1 if successful, 0 otherwise. Note: Character must not be mounting a non-cash mount (eg. dragon, peco, - wug, etc.) + wug, etc.) The accompanying function will return 1 if the invoking character has a cash mount and 0 if they don't. @@ -3640,7 +3638,7 @@ Return values for 'checkvending' are Examples: //This will check if Aaron is vending, and if so, put a message in - //front of the attached player saying Aaron is vending. + //front of the attached player saying Aaron is vending. if (checkvending("Aaron")) mes "Aaron is currently vending!"; @@ -3674,9 +3672,9 @@ night mode or day mode. 'isnight' returns 1 if it's night and 0 if it isn't, 'isday' the other way around. They can be used interchangeably, pick the one you like more: - // These two are equivalent: - if (isday()) mes "I only prowl in the night."; - if (isnight()!=1) mes "I only prowl in the night."; + // These two are equivalent: + if (isday()) mes "I only prowl in the night."; + if (isnight()!=1) mes "I only prowl in the night."; --------------------------------------- @@ -3708,11 +3706,11 @@ Theoretically there is no limit to the number of items that may be tested for at the same time. If even one of the items given is not equipped, 0 will be returned. - // (Poring,Santa Poring,Poporing,Marin) - if (isequipped(4001,4005,4033,4196)) mes "Wow! You're wearing a full complement of possible poring cards!"; - // (Poring) - if (isequipped(4001)) mes "A poring card is useful, don't you think?"; - + // (Poring,Santa Poring,Poporing,Marin) + if (isequipped(4001,4005,4033,4196)) mes "Wow! You're wearing a full complement of possible poring cards!"; + // (Poring) + if (isequipped(4001)) mes "A poring card is useful, don't you think?"; + The function was meant for item scripts to support the cards released by Gravity in February 2005, but it will work just fine in normal NPC scripts. @@ -3724,7 +3722,7 @@ This function is similar to 'isequipped', but instead of 1 or 0, it will return the number of cards in the list given that were found on the invoking character. - if (isequippedcnt(4001,4005,4033,4196) == 4) mes "Finally got all four poring cards?"; + if (isequippedcnt(4001,4005,4033,4196) == 4) mes "Finally got all four poring cards?"; --------------------------------------- @@ -3801,13 +3799,13 @@ chat window. This command will take the invoking character to the specified map, and if wanted, specified coordinates too, but these can be random. - warp "place",50,55; + warp "place",50,55; This would take them to X 50 Y 55 on the map called "place". If your X and Y coordinates land on an unwalkable map square, it will send the warped character to a random place. Same will happen if they are both zero: - warp "place",0,0; + warp "place",0,0; Notice that while warping people to coordinates 0,0 will normally get them into a random place, it's not certain to always be so. Darned if I know @@ -3829,19 +3827,19 @@ defined by the x1/y1-x2/y2 square, will be warped. Nobody outside the area will be affected, including the activating character, if they are outside the area. - areawarp "place",10,10,120,120,"place2",150,150; + areawarp "place",10,10,120,120,"place2",150,150; Everyone that is in the area between X 10 Y 10 and X 120 Y 120, in a square shape, on the map called "place", will be affected, and warped to "place2" X 150 Y 150. - areawarp "place",10,10,120,120,"place2",0,0; + areawarp "place",10,10,120,120,"place2",0,0; By using ,0,0; as the destination coordinates it will take all the characters in the affected area to a random set of co-ordinates on the "place2" map. - areawarp "place",10,10,120,120,"place2",150,150,200,200; + areawarp "place",10,10,120,120,"place2",150,150,200,200; By using the optional x4 and y4 parameters, the destination coordinates will be a random place within the defined x3/y3-x4/y4 square. @@ -3860,15 +3858,15 @@ you can get with getcharid(1). You can also request another party id given a member's name with getcharid(1,). You can use the following "map names" for special warping behavior: -Random: All party members are randomly warped in their current map - (as if they all used a fly wing). -SavePointAll: All party members are warped to their respective save point. -SavePoint: All party members are warped to the save point of the - currently attached player (will fail if there's no player - attached). -Leader: All party members are warped to the leader's position. The - leader must be online and in the current map-server for this - to work. +Random: All party members are randomly warped in their current map + (as if they all used a fly wing). +SavePointAll: All party members are warped to their respective save point. +SavePoint: All party members are warped to the save point of the + currently attached player (will fail if there's no player + attached). +Leader: All party members are warped to the leader's position. The + leader must be online and in the current map-server for this + to work. If you specify a from_mapname, warpparty will only affect those on that map. @@ -3881,38 +3879,38 @@ close2; set @id,getcharid(1); warpparty "prontera",150,100,@id; close; - + --------------------------------------- - + *warpchar "",,,; - + Warps another player to specified map and coordinate given the char id, which you can get with getcharid(0,). Obviously this is useless if you want to warp the same player that is executing this script, unless it's some kind of "chosen" script. - + Example: - + warpchar "prontera",150,100,150001; - + --------------------------------------- - + *warpguild "",,,; - + Warps a guild to specified map and coordinate given the guild id, which you can get with getcharid(2). You can also request another guild id given the member's name with getcharid(2,). - + You can use the following "map names" for special warping behavior: -Random: All guild members are randomly warped in their current map - (as if they all used a fly wing) -SavePointAll: All guild members are warped to their respective save point. -SavePoint: All guild members are warped to the save point of the - currently attached player (will fail if there's no player - attached). +Random: All guild members are randomly warped in their current map + (as if they all used a fly wing) +SavePointAll: All guild members are warped to their respective save point. +SavePoint: All guild members are warped to the save point of the + currently attached player (will fail if there's no player + attached). Example: - + warpguild "prontera",x,y,Guild_ID; --------------------------------------- @@ -3936,7 +3934,7 @@ are equivalent. Map name, X coordinate and Y coordinate should be perfectly obvious. This ignores any and all map flags, and can make a character respawn where no teleportation is otherwise possible. - savepoint "place",350,75; + savepoint "place",350,75; --------------------------------------- @@ -3945,9 +3943,9 @@ character respawn where no teleportation is otherwise possible. This command will heal a set amount of HP and/or SP on the invoking character. - heal 30000,0; // This will heal 30,000 HP - heal 0,30000; // This will heal 30,000 SP - heal 300,300; // This will heal 300 HP and 300 SP + heal 30000,0; // This will heal 30,000 HP + heal 0,30000; // This will heal 30,000 SP + heal 300,300; // This will heal 300 HP and 300 SP This command just alters the hit points and spell points of the invoking character and produces no other output whatsoever. @@ -3965,8 +3963,8 @@ omitted. There is also a nice example on using this with the 'rand' function, to give you a random amount of healing. - // This will heal anything thing from 100 to 150 HP and no SP - itemheal rand(100,150),0; + // This will heal anything thing from 100 to 150 HP and no SP + itemheal rand(100,150),0; --------------------------------------- @@ -3975,9 +3973,9 @@ give you a random amount of healing. This command will heal the invoking character. It heals the character, but not by a set value - it adds percent of their maximum HP/SP. - percentheal 100,0; // This will heal 100% HP - percentheal 0,100; // This will heal 100% SP - percentheal 50,50; // This will heal 50% HP and 50% SP + percentheal 100,0; // This will heal 100% HP + percentheal 0,100; // This will heal 100% SP + percentheal 50,50; // This will heal 50% HP and 50% SP So the amount that this will heal will depend on the total amount of HP or SP you have maximum. Like 'heal', this will not call up any animations or @@ -3996,17 +3994,17 @@ currently connected to the server. This command will change the job class of the invoking character. - jobchange 1; // This would change your player into a Swordman - jobchange 4002; // This would change your player into a Swordman High + jobchange 1; // This would change your player into a Swordman + jobchange 4002; // This would change your player into a Swordman High This command does work with numbers, but you can also use job names. The full list of job names and the numbers they correspond to can be found in 'db/const.txt'. - // This would change your player into a Swordman - jobchange Job_Swordman; - // This would change your player into a Swordman High - jobchange Job_Swordman_High; + // This would change your player into a Swordman + jobchange Job_Swordman; + // This would change your player into a Swordman High + jobchange Job_Swordman_High; 'upper flag' can alternatively be used to specify the type of job one changes to. For example, jobchange Job_Swordman,1; will change the @@ -4137,18 +4135,18 @@ This command will give the invoking character a specified number of base and job experience points. Can be used as a quest reward. Negative values won't work. - getexp 10000,5000; + getexp 10000,5000; You can also use the "set" command with the constants defined in 'db/const.txt': - // These 2 combined has the same effect as the above command - set BaseExp,BaseExp+10000; - set JobExp,JobExp+5000; + // These 2 combined has the same effect as the above command + set BaseExp,BaseExp+10000; + set JobExp,JobExp+5000; You can also reduce the amount of experience points: - set BaseExp,BaseExp-10000; + set BaseExp,BaseExp-10000; Note that 'getexp' is now subject to the 'quest_exp_rate' config option, which adjusts the gained value. If you want to bypass this, use the 'set' @@ -4166,19 +4164,19 @@ sure you specify a palette number that exists/is usable by the client you use. 'changelook' works the same, but is only client side (it doesn't save the look value). - // This will change your hair(6), so that it uses palette 8, what ever - // your palette 8 is, your hair will use that color. + // This will change your hair(6), so that it uses palette 8, what ever + // your palette 8 is, your hair will use that color. - setlook 6,8; + setlook 6,8; - // This will change your clothes(7), so they are using palette 1, - // whatever your palette 1 is, your clothes will then use that set of - // colors. - - setlook 7,1; + // This will change your clothes(7), so they are using palette 1, + // whatever your palette 1 is, your clothes will then use that set of + // colors. + + setlook 7,1; Here are the possible look types: - + 0 - Base sprite 1 - Hairstyle 2 - Weapon @@ -4224,9 +4222,9 @@ The knock-back is not restricted by items or map flags, only obstacles are taken into account. If there is not enough space to perform the push (e.g. due to a wall), the character is pushed only up to the obstacle. - // pushes the character 5 cells in 3 o'clock direction from it's - // current position. - pushpc DIR_EAST, 5; + // pushes the character 5 cells in 3 o'clock direction from it's + // current position. + pushpc DIR_EAST, 5; --------------------------------------- @@ -4236,8 +4234,8 @@ This command will return the SVN revision number or Git SHA-1 hash the server is currently running on (depends on whether you used a SVN or Git client for getting Hercules). - if ( get_version() >= 15000 ) - mes "Welcome Hercules!"; + if ( get_version() >= 15000 ) + mes "Welcome Hercules!"; --------------------------------------- \\ @@ -4256,8 +4254,8 @@ character inventory instead. In the first and most commonly used version of this command, items are referred to by their database ID number found in 'db/(pre-)re/item_db.txt'. - getitem 502,10 // The person will receive 10 apples - getitem 617,1 // The person will receive 1 Old Violet Box + getitem 502,10 // The person will receive 10 apples + getitem 617,1 // The person will receive 1 Old Violet Box Giving an item ID of -1 will give a specified number of random items from the list of those that fall out of Old Blue Box. Unlike in all other @@ -4303,12 +4301,12 @@ but is a lot more flexible. Those parameters that are different from 'getitem' are: -identify - Whether you want the item to be identified (1) or not (0). -refine - For how many pluses will it be refined. It will not let you - refine an item higher than the max refine. -attribute - Whether the item is broken (1) or not (0). -card1,2,3,4 - If you want a card compound to it, place the card ID number - into the specific card slot. +identify - Whether you want the item to be identified (1) or not (0). +refine - For how many pluses will it be refined. It will not let you + refine an item higher than the max refine. +attribute - Whether the item is broken (1) or not (0). +card1,2,3,4 - If you want a card compound to it, place the card ID number + into the specific card slot. Card1-card4 values are also used to store name information for named items, as well as the elemental property of weapons and armor. You can @@ -4323,64 +4321,64 @@ If you still want to try creating a named item with this command because 'getnameditem' won't do it for you cause it's too limited, you can do it like this. Careful, minor magic ahead. - // First, let's get an ID of a character who's name will be on the - // item. Only an existing character's name may be there. - // Let's assume our character is 'Adam' and find his ID. - - set @charid,getcharid(0,"Adam"); + // First, let's get an ID of a character who's name will be on the + // item. Only an existing character's name may be there. + // Let's assume our character is 'Adam' and find his ID. - // Now we split the character ID number into two portions with a - // binary shift operation. If you don't understand what this does, - // just copy it. - - set @card3, @charid & 65535; - set @card4, @charid >> 16; + set @charid,getcharid(0,"Adam"); - // If you're inscribing non-equipment, @card1 must be 254. - // Arrows are also not equipment. :) - set @card1,254; - - // For named equipment, card2 means the Star Crumbs and elemental - // crystals used to make this equipment. For everything else, it's 0. - - set @card2,0; - - // Now, let's give the character who invoked the script some - // Adam's Apples: - - getitem2 512,1,1,0,0,@card1,@card2,@card3,@card4; + // Now we split the character ID number into two portions with a + // binary shift operation. If you don't understand what this does, + // just copy it. + + set @card3, @charid & 65535; + set @card4, @charid >> 16; + + // If you're inscribing non-equipment, @card1 must be 254. + // Arrows are also not equipment. :) + set @card1,254; + + // For named equipment, card2 means the Star Crumbs and elemental + // crystals used to make this equipment. For everything else, it's 0. + + set @card2,0; + + // Now, let's give the character who invoked the script some + // Adam's Apples: + + getitem2 512,1,1,0,0,@card1,@card2,@card3,@card4; This wasn't tested with all possible items, so I can't give any promises, experiment first before relying on it. To create equipment, continue this example it like this: - // We've already have card3 and card4 loaded with correct - // values so we'll just set up card1 and card2 with data - // for an Ice Stiletto. + // We've already have card3 and card4 loaded with correct + // values so we'll just set up card1 and card2 with data + // for an Ice Stiletto. - // If you're inscribing equipment, @card1 must be 255. - set @card1,255; - - // That's the number of star crumbs in a weapon. - set @sc,2; - - // That's the number of elemental property of the weapon. - set @ele,1; + // If you're inscribing equipment, @card1 must be 255. + set @card1,255; - // And that's the wacky formula that makes them into - // a single number. - set @card2,@ele+((@sc*5)<<8); + // That's the number of star crumbs in a weapon. + set @sc,2; - // That will make us an Adam's +2 VVS Ice Stiletto: - - getitem2 1216,1,1,2,0,@card1,@card2,@card3,@card4; + // That's the number of elemental property of the weapon. + set @ele,1; + + // And that's the wacky formula that makes them into + // a single number. + set @card2,@ele+((@sc*5)<<8); + + // That will make us an Adam's +2 VVS Ice Stiletto: + + getitem2 1216,1,1,2,0,@card1,@card2,@card3,@card4; Experiment with the number of star crumbs - I'm not certain just how much will work most and what it depends on. The valid element numbers are: 1 - Ice, 2 - Earth 3 - Fire 4 - Wind. - + You can, apparently, even create duplicates of the same pet egg with this command, creating a pet which is the same, but simultaneously exists in two eggs, and may hatch from either, although, I'm not sure what kind of a @@ -4434,11 +4432,11 @@ Note: 'delitem' in an NPC script can still remove rental items. This command will create an item lying around on a specified map in the specified location. - itemid - Found in 'db/(pre-)re/item_db.txt' - amount - Amount you want produced - map name - The map name - X - The X coordinate - Y - The Y coordinate. + itemid - Found in 'db/(pre-)re/item_db.txt' + amount - Amount you want produced + map name - The map name + X - The X coordinate + Y - The Y coordinate. This item will still disappear just like any other dropped item. Like 'getitem', it also accepts an 'english name' field from the database and @@ -4479,8 +4477,8 @@ This command will remove a specified amount of items from the invoking or target character. Like all the item commands, it uses the item ID found inside 'db/(pre-)re/item_db.txt'. - delitem 502,10; // The person will lose 10 apples - delitem 617,1; // The person will lose 1 Old Violet Box + delitem 502,10; // The person will lose 10 apples + delitem 617,1; // The person will lose 1 Old Violet Box It is always a good idea to check if the player actually has the items before you delete them. If you try to delete more items that the player @@ -4507,9 +4505,9 @@ Check 'getitem2' to understand its expanded parameters. This function will return the number of items for the specified item ID that the invoking character has in the inventory. - mes "[Item Checker]"; - mes "Hmmm, it seems you have "+countitem(502)+" apples"; - close; + mes "[Item Checker]"; + mes "Hmmm, it seems you have "+countitem(502)+" apples"; + close; Like 'getitem', this function will also accept an 'english name' from the database as an argument. @@ -4517,10 +4515,10 @@ database as an argument. If you want to state the number at the end of a sentence, you can do it by adding up strings: - mes "[Item Checker]"; - mes "Hmmm, the total number of apples you are holding is "+countitem("APPLE"); - close; - + mes "[Item Checker]"; + mes "Hmmm, the total number of apples you are holding is "+countitem("APPLE"); + close; + --------------------------------------- *countitem2(,,,,,,,) @@ -4826,8 +4824,8 @@ happens when a result item is double-clicked and can be one of the following: 0 = Shows the store's position on the mini-map and highlights the shop - sign with yellow color, when the store is on same map as the - invoking player. + sign with yellow color, when the store is on same map as the + invoking player. 1 = Directly opens the shop, regardless of distance. Example: @@ -4851,10 +4849,10 @@ The storage window opens regardless of whether there are open NPC dialogs or not, but it is preferred to close the dialog before displaying the storage window, to avoid any disruption when both windows overlap. - mes "I will now open your stash for you"; - close2; - openstorage; - end; + mes "I will now open your stash for you"; + close2; + openstorage; + end; --------------------------------------- @@ -4863,10 +4861,10 @@ storage window, to avoid any disruption when both windows overlap. This will open a character's Mail window on the client connected to the invoking character. - mes "Close this window to open your mail inbox."; - close2; - openmail; - end; + mes "Close this window to open your mail inbox."; + close2; + openmail; + end; --------------------------------------- @@ -4875,10 +4873,10 @@ invoking character. This will open the Auction window on the client connected to the invoking character. - mes "Close this window to open the Auction window."; - close2; - openauction; - end; + mes "Close this window to open the Auction window."; + close2; + openauction; + end; --------------------------------------- \\ @@ -4934,7 +4932,7 @@ possible maximum. The full list of guild skills is available in // (GD_APPROVAL ID 10000). Notice that if you try to add two levels of // Approval, or add Approval when the guild already has it, it will only // have one level of Approval afterwards. - guildskill 10000,1; + guildskill 10000,1; You might want to make a quest for getting a certain guild skill, make it hard enough that all the guild needs to help or something. Doing this for @@ -5001,16 +4999,16 @@ Used in reset NPC's (duh!). These command bestow a status effect on the invoking character. This command is used a lot in the item scripts. - // This would poison them for 10 min - sc_start SC_Poison,600000,0; + // This would poison them for 10 min + sc_start SC_Poison,600000,0; Effect type is a number of effect, 'db/const.txt' lists the common (mostly negative) status effect types as constants, starting with 'SC_'. You can also use this to give someone an effect of a player-cast spell: - // This will bless someone as if with Bless 10: - sc_start 10,240000,10; - + // This will bless someone as if with Bless 10: + sc_start 10,240000,10; + Extra argument's meaning differs depending on the effect type, for most effects caused by a player skill the extra argument means the level of the skill that would have been used to create that effect, for others it might @@ -5073,16 +5071,16 @@ command will not actually use the skill: it is intended for scripts which simulate skill usage by the NPC, such as buffs, by setting appropriate status and displaying the skill's effect. - mes "Be blessed!"; - // Heal of 2000 HP - heal 2000,0; - skilleffect 28,2000; - // Blessing Level 10 - sc_start 10,240000,10; - skilleffect 34,0; - // Increase AGI Level 5 - sc_start 12,140000,5; - skilleffect 29,0; + mes "Be blessed!"; + // Heal of 2000 HP + heal 2000,0; + skilleffect 28,2000; + // Blessing Level 10 + sc_start 10,240000,10; + skilleffect 34,0; + // Increase AGI Level 5 + sc_start 12,140000,5; + skilleffect 29,0; This will heal the character with 2000 HP, buff it with Blessing Lv 10 and Increase AGI Lv 5, and display appropriate effects. @@ -5155,7 +5153,7 @@ This command will bump a specified stat of the invoking character up by the specified amount permanently. Amount can be negative. See 'statusup'. // This will decrease a character's Vit forever. - statusup bVit,-1; + statusup bVit,-1; --------------------------------------- @@ -5412,7 +5410,7 @@ the RID of the killing character. 3 = flora (Alchemist skill) 4 = zanzou (Kagerou/Oboro skill) - monster "place",60,100,"Poring",1002,1,"NPCNAME::OnLabel"; + monster "place",60,100,"Poring",1002,1,"NPCNAME::OnLabel"; The coordinates of 0,0 will spawn the monster on a random place on the map. Both 'monster' and 'areamonster' return the GID of the monster @@ -5420,19 +5418,19 @@ spawned if there was ONLY ONE monster to be spawned. This is useful for controlling each of the spawned mobs with the unit* commands shown below. For example: - // We'll make a poring which will automatically attack invoking player: - set .@mobGID, monster "Prontera",150,150,"Poring",1002,1; - unitattack .@mobGID, getcharid(3); // Attacker GID, attacked GID + // We'll make a poring which will automatically attack invoking player: + set .@mobGID, monster "Prontera",150,150,"Poring",1002,1; + unitattack .@mobGID, getcharid(3); // Attacker GID, attacked GID The way you can get the GID of more than only one monster is looping through all the summons to get their individual GIDs and do whatever you want with them. For example: - // We want to summon .mobnumber porings which will give us a kiss - for (set .@i, 0; .@i < .mobnumber; set .@i, .@i + 1){ - set .@mobGID, monster "map",.x,.y,"Kisser Poring",1002,1; - unitemote .@mobGID, e_kis; - } + // We want to summon .mobnumber porings which will give us a kiss + for (set .@i, 0; .@i < .mobnumber; set .@i, .@i + 1){ + set .@mobGID, monster "map",.x,.y,"Kisser Poring",1002,1; + unitemote .@mobGID, e_kis; + } Refer to the unit* commands below. @@ -5442,29 +5440,29 @@ by x1/y1-x2/y2. Simple monster killing script: - - mes "[Summon Man]"; - mes "Want to start the kill?"; - next; - menu "Yes",L_Yes,"No",-; - mes "[Summon Man]"; - mes "Come back later"; - close; - L_Yes: - monster "prontera",0,0,"Quest Poring",1002,10,"NPCNAME::OnPoringKilled"; - // By using 0,0 it will spawn them in a random place. - mes "[Summon Man]"; - mes "Now go and kill all the Poring I summoned"; - // He summoned ten. - close; - OnPoringKilled: - set $PoringKilled,$PoringKilled+1; - if ($PoringKilled==10) goto L_AllDead; - end; - L_AllDead: - announce "Summon Man: Well done all the poring are dead",3; - set $PoringKilled,0; - end; + + mes "[Summon Man]"; + mes "Want to start the kill?"; + next; + menu "Yes",L_Yes,"No",-; + mes "[Summon Man]"; + mes "Come back later"; + close; + L_Yes: + monster "prontera",0,0,"Quest Poring",1002,10,"NPCNAME::OnPoringKilled"; + // By using 0,0 it will spawn them in a random place. + mes "[Summon Man]"; + mes "Now go and kill all the Poring I summoned"; + // He summoned ten. + close; + OnPoringKilled: + set $PoringKilled,$PoringKilled+1; + if ($PoringKilled==10) goto L_AllDead; + end; + L_AllDead: + announce "Summon Man: Well done all the poring are dead",3; + set $PoringKilled,0; + end; For more examples see just about any official 2-1 or 2-2 job quest script. @@ -5747,17 +5745,17 @@ The script of the NPC object invoked in this manner will run as if it's been invoked by the RID that was active in the script that issued a 'doevent'. As such, the command will not work if an RID is not attached. - place,100,100,1%TAB%script%TAB%NPC%TAB%53,{ - mes "This is what you will see when you click me"; - close; - OnLabel: - mes "This is what you will see if the doevent is activated"; - close; - } + place,100,100,1%TAB%script%TAB%NPC%TAB%53,{ + mes "This is what you will see when you click me"; + close; + OnLabel: + mes "This is what you will see if the doevent is activated"; + close; + } - .... + .... - doevent "NPC::OnLabel"; + doevent "NPC::OnLabel"; --------------------------------------- @@ -5779,25 +5777,25 @@ This command can be used to make other NPCs act, as if they were responding to the invoking NPC's actions, such as using an emotion or talking. - place,100,100,1%TAB%script%TAB%NPC%TAB%53,{ - mes "Hey NPC2 copy what I do"; - close2; - set .@emote, rand(1,30); - donpcevent "NPC2::OnEmote"; - OnEmote: - emotion .@emote; - end; - } - - place,102,100,1%TAB%script%TAB%NPC2%TAB%53,{ - mes "Hey NPC copy what I do"; - close2; - set .@emote, rand(1,30); - donpcevent "NPC::OnEmote"; - OnEmote: - emotion .@emote; - end; - } + place,100,100,1%TAB%script%TAB%NPC%TAB%53,{ + mes "Hey NPC2 copy what I do"; + close2; + set .@emote, rand(1,30); + donpcevent "NPC2::OnEmote"; + OnEmote: + emotion .@emote; + end; + } + + place,102,100,1%TAB%script%TAB%NPC2%TAB%53,{ + mes "Hey NPC copy what I do"; + close2; + set .@emote, rand(1,30); + donpcevent "NPC::OnEmote"; + OnEmote: + emotion .@emote; + end; + } Whichever of the both NPCs is talked to, both will show a random emotion at the same time. @@ -5821,9 +5819,9 @@ object running it was a player talking - that is, above their head and in the chat window. The display name of the NPC will get appended in front of the message to complete the effect. - // This will make everyone in the area see the NPC greet the character - // who just invoked it. - npctalk "Hello "+strcharinfo(0)+", how are you?"; + // This will make everyone in the area see the NPC greet the character + // who just invoked it. + npctalk "Hello "+strcharinfo(0)+", how are you?"; --------------------------------------- @@ -5875,16 +5873,16 @@ On5secs: --------------------------------------- -*initnpctimer{ "" {, } } | - { "" | }; -*stopnpctimer{ "" {, } } | - { "" | }; -*startnpctimer{ "" {, } } | - { "" | }; -*setnpctimer {,""}; -*getnpctimer({,""}) -*attachnpctimer {""}; -*detachnpctimer {""}; +*initnpctimer { "" {, } } | + { "" | }; +*stopnpctimer { "" {, } } | + { "" | }; +*startnpctimer { "" {, } } | + { "" | }; +*setnpctimer {,""}; +*getnpctimer ({,""}) +*attachnpctimer {""}; +*detachnpctimer {""}; This set of commands and functions will create and manage an NPC-based timer. The NPC name may be omitted, in which case the calling NPC is used @@ -5930,80 +5928,80 @@ The 'setnpctimer' command will explicitly set the timer to a given tick. 0 - Will return the current tick count of the timer. 1 - Will return 1 if there are remaining "OnTimer:" labels in the - specified NPC waiting for execution. + specified NPC waiting for execution. 2 - Will return the number of times the timer has triggered and will - trigger an "OnTimer:" label in the specified NPC. + trigger an "OnTimer:" label in the specified NPC. Example 1: - { - // We need to use attachnpctimer because the mes command below - // needs RID attach - attachnpctimer; - initnpctimer; - npctalk "I cant talk right now, give me 10 seconds"; - end; - OnTimer5000: - npctalk "Ok 5 seconds more"; - end; - OnTimer6000: - npctalk "4"; - end; - OnTimer7000: - npctalk "3"; - end; - OnTimer8000: - npctalk "2"; - end; - OnTimer9000: - npctalk "1"; - end; - OnTimer10000: - stopnpctimer; - mes "[Man]"; - mes "Ok we can talk now"; - detachnpctimer; - // and remember attachnpctimer and detachnpctimer can only be used - // while the NPC timer is not running! - } + { + // We need to use attachnpctimer because the mes command below + // needs RID attach + attachnpctimer; + initnpctimer; + npctalk "I cant talk right now, give me 10 seconds"; + end; + OnTimer5000: + npctalk "Ok 5 seconds more"; + end; + OnTimer6000: + npctalk "4"; + end; + OnTimer7000: + npctalk "3"; + end; + OnTimer8000: + npctalk "2"; + end; + OnTimer9000: + npctalk "1"; + end; + OnTimer10000: + stopnpctimer; + mes "[Man]"; + mes "Ok we can talk now"; + detachnpctimer; + // and remember attachnpctimer and detachnpctimer can only be used + // while the NPC timer is not running! + } Example 2: - OnTimer15000: - npctalk "Another 15 seconds have passed."; + OnTimer15000: + npctalk "Another 15 seconds have passed."; - // You have to use 'initnpctimer' instead of 'setnpctimer 0'. - // This is equal to 'setnpctimer 0' + 'startnpctimer'. - // Alternatively, you can also insert another 'OnTimer15001' label - // so that the timer won't stop. - initnpctimer; - end; - - // This OnInit label will run when the script is loaded, so that the - // timer is initialized immediately as the server starts. It is - // dropped back to 0 every time the NPC says something, so it will - // cycle continuously. - OnInit: - initnpctimer; - end; + // You have to use 'initnpctimer' instead of 'setnpctimer 0'. + // This is equal to 'setnpctimer 0' + 'startnpctimer'. + // Alternatively, you can also insert another 'OnTimer15001' label + // so that the timer won't stop. + initnpctimer; + end; + + // This OnInit label will run when the script is loaded, so that the + // timer is initialized immediately as the server starts. It is + // dropped back to 0 every time the NPC says something, so it will + // cycle continuously. + OnInit: + initnpctimer; + end; Example 3: - mes "[Man]"; - mes "I have been waiting "+(getnpctimer(0)/1000)+" seconds for you."; - // We divide the timer returned by 1000 to convert milliseconds to - // seconds. - close; + mes "[Man]"; + mes "I have been waiting "+(getnpctimer(0)/1000)+" seconds for you."; + // We divide the timer returned by 1000 to convert milliseconds to + // seconds. + close; Example 4: - mes "[Man]"; - mes "Ok, I will let you have 30 more seconds..."; - close2; - setnpctimer (getnpctimer(0)-30000); - // Notice the 'close2'. If there were a 'next' there the timer would - // be changed only after the player pressed the 'next' button. - end; + mes "[Man]"; + mes "Ok, I will let you have 30 more seconds..."; + close2; + setnpctimer (getnpctimer(0)-30000); + // Notice the 'close2'. If there were a 'next' there the timer would + // be changed only after the player pressed the 'next' button. + end; --------------------------------------- @@ -6021,11 +6019,11 @@ will not keep the rid, while sleep2 does. Examples: // This will pause the script for 10 seconds and ditch the RID - // (so no player is attached anymore) - sleep 10000; - // Pauses the script for 5 seconds, and continue with the RID attached. + // (so no player is attached anymore) + sleep 10000; + // Pauses the script for 5 seconds, and continue with the RID attached. sleep2 5000; - //Cancels any running sleep timers on the NPC 'NPC'. + //Cancels any running sleep timers on the NPC 'NPC'. awake "NPC"; --------------------------------------- @@ -6049,7 +6047,7 @@ client and appears always green. This command will broadcast a message to all or most players, similar to @kami/@kamib GM commands. - announce "This will be shown to everyone at all in yellow.",0; + announce "This will be shown to everyone at all in yellow.",0; The region the broadcast is heard in (target), source of the broadcast and the color the message will come up as is determined by the flags. @@ -6058,25 +6056,25 @@ The flag values are coded as constants in db/const.txt to make them easier to use. Target flags: -- bc_all: Broadcast message is sent server-wide (default). -- bc_map: Message is sent to everyone in the same map as the source of - the broadcast (see below). -- bc_area: Message is sent to players in the vicinity of the source. -- bc_self: Message is sent only to current player. -You cannot use more than one target flag. +- bc_all: Broadcast message is sent server-wide (default). +- bc_map: Message is sent to everyone in the same map as the source of + the broadcast (see below). +- bc_area: Message is sent to players in the vicinity of the source. +- bc_self: Message is sent only to current player. +You cannot use more than one target flag. Source flags: -- bc_pc: Broadcast source is the attached player (default). -- bc_npc: Broadcast source is the NPC, not the player attached to the - script (useful when a player is not attached or the message - should be sent to those nearby the NPC). +- bc_pc: Broadcast source is the attached player (default). +- bc_npc: Broadcast source is the NPC, not the player attached to the + script (useful when a player is not attached or the message + should be sent to those nearby the NPC). You cannot use more than one source flag. Special flags: -- bc_yellow: Broadcast will be displayed in yellow color (default). -- bc_blue: Broadcast will be displayed in blue color. -- bc_woe: Indicates that this broadcast is 'WoE Information' that can - be disabled client-side. +- bc_yellow:Broadcast will be displayed in yellow color (default). +- bc_blue: Broadcast will be displayed in blue color. +- bc_woe: Indicates that this broadcast is 'WoE Information' that can + be disabled client-side. Due to the way client handles broadcasts, it is impossible to set both bc_blue and bc_woe. @@ -6089,7 +6087,7 @@ The color parameter is a single number which can be in hexadecimal notation. For example: - announce "This will be shown to everyone at all in green.",bc_all,0x00FF00; + announce "This will be shown to everyone at all in green.",bc_all,0x00FF00; Will display a global announce in green. The color format is in RGB (0xRRGGBB). @@ -6102,12 +6100,12 @@ Default font size is 12. Using this for private messages to players is probably not that good an idea, but it can be used instead in NPCs to "preview" an announce. - // This will be a private message to the player using the NPC that - // made the announcement - announce "This is my message just for you",bc_blue|bc_self; + // This will be a private message to the player using the NPC that + // made the announcement + announce "This is my message just for you",bc_blue|bc_self; - // This will be shown on everyones screen that is in sight of the NPC. - announce "This is my message just for you people here",bc_npc|bc_area; + // This will be shown on everyones screen that is in sight of the NPC. + announce "This is my message just for you people here",bc_npc|bc_area; --------------------------------------- @@ -6127,7 +6125,7 @@ residing in the specified x1/y1-x2/y2 rectangle on the map given. The flags and optional parameters are the same as in 'announce', but target and source flags are ignored. - areaannounce "prt_church",0,0,350,350,"God's in his heaven, all right with the world",0; + areaannounce "prt_church",0,0,350,350,"God's in his heaven, all right with the world",0; --------------------------------------- @@ -6241,7 +6239,7 @@ amount. // The NPC will just show a box above its head that says "Hello World", // clicking it will do nothing, since the limit is zero. - waitingroom "Hello World",0; + waitingroom "Hello World",0; // The NPC will have a box above its head, with "Disco - Waiting Room" // written on it, and will have 8 waiting slots. Clicking this will enter @@ -6249,7 +6247,7 @@ amount. // accumulate. Once this happens, it will cause the NPC "Bouncer" run the // label "OnStart". - waitingroom "Disco - Waiting Room",8,"Bouncer::OnStart",7; + waitingroom "Disco - Waiting Room",8,"Bouncer::OnStart",7; // The NPC will have a box above its head, with "Party - Waiting Room" // written on it, and will have 8 waiting slots. Clicking this will allow @@ -6257,7 +6255,7 @@ amount. // the player will be able to wait until 7 players accumulate. Once this // happens, it will cause the NPC "Bouncer" run the label "OnStart". - waitingroom "Party - Waiting Room",8,"Bouncer::OnStart",7,5000,50,99; + waitingroom "Party - Waiting Room",8,"Bouncer::OnStart",7,5000,50,99; Creating a waiting room does not stop the execution of the script and it will continue to the next line. @@ -6534,7 +6532,7 @@ which returns a guild id: // This will change the emblem on the flag to that of the guild that owns // "guildcastle" - flagemblem GetCastleData("guildcastle",1); + flagemblem GetCastleData("guildcastle",1); --------------------------------------- @@ -6614,7 +6612,7 @@ Example: // This will move Bugga from to the coordinates 100,20 (if those // coordinates are legit). moveNPC "Bugga",100,20; - + --------------------------------------- ===================== @@ -6627,8 +6625,8 @@ Example: This command will send the message to the server console (map-server window). It will not be displayed anywhere else. - // Displays "NAME has clicked me!" in the map-server window. - debugmes strcharinfo(0)+" has clicked me!"; + // Displays "NAME has clicked me!" in the map-server window. + debugmes strcharinfo(0)+" has clicked me!"; --------------------------------------- @@ -6681,23 +6679,23 @@ Point number is the number of the point - you can have several. If more than one point is drawn at the same coordinates, they will cycle, which can be used to create flashing marks. - // This command will show a mark at coordinates X 30 Y 40, is mark - // number 1, and will be red. - - viewpoint 1,30,40,1,0xFF0000; + // This command will show a mark at coordinates X 30 Y 40, is mark + // number 1, and will be red. + + viewpoint 1,30,40,1,0xFF0000; This will create three points: - viewpoint 1,30,40,1,0xFF0000; - viewpoint 1,35,45,2,0xFF0000; - viewpoint 1,40,50,3,0xFF0000; + viewpoint 1,30,40,1,0xFF0000; + viewpoint 1,35,45,2,0xFF0000; + viewpoint 1,40,50,3,0xFF0000; And this is how you remove them: - viewpoint 2,30,40,1,0xFF0000; - viewpoint 2,35,45,2,0xFF0000; - viewpoint 2,40,50,3,0xFF0000; - + viewpoint 2,30,40,1,0xFF0000; + viewpoint 2,35,45,2,0xFF0000; + viewpoint 2,40,50,3,0xFF0000; + The client determines what it does with the points entirely, the server keeps no memory of where the points are set whatsoever. @@ -6709,11 +6707,11 @@ This command will display a picture, usually an NPC illustration, also called cutin, for the currently attached client. The position parameter determines the placement of the illustration and takes following values: - 0 - bottom left corner - 1 - bottom middle - 2 - bottom right corner - 3 - middle of screen in a movable window with an empty title bar - 4 - middle of screen without the window header, but still movable + 0 - bottom left corner + 1 - bottom middle + 2 - bottom right corner + 3 - middle of screen in a movable window with an empty title bar + 4 - middle of screen without the window header, but still movable The picture is read from data\texture\???????\illust, from both the GRF archive and data folder, and is required to be a bitmap. The file @@ -6729,15 +6727,15 @@ one will cause the old one to disappear. To delete the currently displayed illustration without displaying a new one, an empty file name and position 255 must be used. - // Displays the Comodo Kafra illustration in lower right corner. - cutin "kafra_07",2; + // Displays the Comodo Kafra illustration in lower right corner. + cutin "kafra_07",2; - // Typical way to end a script, which displayed an illustration during a - // dialog with a player. - mes "See you."; - close2; - cutin "",255; - end; + // Typical way to end a script, which displayed an illustration during a + // dialog with a player. + mes "See you."; + close2; + cutin "",255; + end; --------------------------------------- @@ -6842,10 +6840,10 @@ This command will run the given command line exactly as if it was typed in from the keyboard by the player connected to the invoking character, and that character belonged to an account which had GM level 99. - // This will ask the invoker for a character name and then use the - // '@nuke' GM command on them, killing them mercilessly. - input @player$; - atcommand "@nuke "+@player$; + // This will ask the invoker for a character name and then use the + // '@nuke' GM command on them, killing them mercilessly. + input @player$; + atcommand "@nuke "+@player$; This command has a lot of good uses, I am sure you can have some fun with this one. @@ -6860,9 +6858,9 @@ GM level 99. The commands can also run without an attached rid. - // This would do the same as above, but now - // it doesn't need a player attached by default. - charcommand "#option 0 0 0 Roy"; + // This would do the same as above, but now + // it doesn't need a player attached by default. + charcommand "#option 0 0 0 Roy"; --------------------------------------- @@ -6940,9 +6938,9 @@ value, and "NPC level" is the temporary level of the NPC (used in some skills). Neither value can be greater than the max level defined in config, and will not work properly if the NPC has a mob sprite. - // Casts Level 10 Heal on the attached player, calculated with - // all stats 99 and base level 60. - npcskill "AL_HEAL",10,99,60; + // Casts Level 10 Heal on the attached player, calculated with + // all stats 99 and base level 60. + npcskill "AL_HEAL",10,99,60; --------------------------------------- @@ -7183,47 +7181,47 @@ The first letter is position 0. Returns char at specified index. If index is out of range, returns an empty string. - + Example: - + charat("This is a string", 10); //returns "s" - + --------------------------------------- - + *setchar(,,) Returns the original string with the char at the specified index set to the specified char. If index is out of range, the original string will be returned. Only the 1st char in the parameter will be used. - + Example: setchar("Cat", "B", 0); //returns "Bat" - + --------------------------------------- *insertchar(,,) - + Returns the original string with the specified char inserted at the specified index. If index is out of range, the char will be inserted on the end of the string that it is closest. Only the 1st char in the parameter will be used. - + Example: - + insertchar("laughter", "s", 0); //returns "slaughter" - + --------------------------------------- *delchar(,) Returns the original string with the char at the specified index removed. If index is out of range, original string will be returned. - + Example: - + delchar("Diet", 3); //returns "Die" - + --------------------------------------- *strtoupper() @@ -7231,9 +7229,9 @@ Example: Returns the specified string in it's uppercase/lowercase form. All non-alpha characters will be preserved. - + Example: - + strtoupper("The duck is blue!!"); //returns "THE DUCK IS BLUE!!" --------------------------------------- @@ -7246,21 +7244,21 @@ uppercase for 'charisupper' or lowercase for 'charislower'. Otherwise, 0. Characters not of the alphabelt will return 0. Example: - + charisupper("Hercules", 0); //returns 1 - + --------------------------------------- *substr(,,) - + Returns the sub-string of the specified string inclusively between the set indexes. If indexes are out of range, or the start index is after the end index, an empty string will be returned. Example: - + substr("foobar", 3, 5); //returns "bar" - + --------------------------------------- *explode(,,) @@ -7272,7 +7270,7 @@ as a delimiter, the string will be placed in the array in its original form, without any changes. Example: - + explode(.@my_array$, "Explode:Test:1965:red:PIE", ":"); //.@my_array$ contents will be... //.@my_array$[0]: "Explode" @@ -7288,7 +7286,7 @@ Example: Combines all substrings within the specified string array into a single string. If the glue parameter is specified, it will be inserted inbetween each substring. - + Example: setarray .@my_array$[0], "This", "is", "a", "test"; implode(.@my_array$, " "); //returns "This is a test" @@ -7305,11 +7303,11 @@ Number of params is only limited by Hercules' script engine. Example: .@format$ = 'The %s contains %d monkeys'; dispbottom(sprintf(.@format$, "zoo", 5)); - //prints "The zoo contains 5 monkeys" + //prints "The zoo contains 5 monkeys" + + dispbottom(sprintf(.@format$, "barrel", 82)); + //prints "The barrel contains 82 monkeys" - dispbottom(sprintf(.@format$, "barrel", 82)); - //prints "The barrel contains 82 monkeys" - --------------------------------------- *sscanf(,[,param[,param[,...]]]) @@ -7321,7 +7319,7 @@ limited by Hercules' script engine. Example: sscanf("This is a test: 42 foobar", "This is a test: %d %s", .@num, .@str$); dispbottom(.@num + " " + .@str$); //prints "42 foobar" - + --------------------------------------- *strpos(,{,}) @@ -7335,7 +7333,7 @@ Example: strpos("foobar", "bar", 0); //returns 3 strpos("foobarfoo", "foo", 0); //returns 0 strpos("foobarfoo", "foo", 1); //returns 6 - + --------------------------------------- *replacestr(, , {, {, }}) @@ -7349,7 +7347,7 @@ Example: replacestr("testing tester", "test", "dash"); //returns "dashing dasher" replacestr("Donkey", "don", "mon", 0); //returns "monkey" replacestr("test test test test test", "yay", 0, 3); //returns "yay yay yay test test" - + --------------------------------------- *countstr(, {, }) @@ -7369,16 +7367,16 @@ This command sets the current RO client interface font to one of the fonts stored in data\*.eot by using an ID of the font. When the ID of the currently used font is used, default interface font is used again. - 0 - Default - 1 - RixLoveangel - 2 - RixSquirrel - 3 - NHCgogo - 4 - RixDiary - 5 - RixMiniHeart - 6 - RixFreshman - 7 - RixKid - 8 - RixMagic - 9 - RixJJangu + 0 - Default + 1 - RixLoveangel + 2 - RixSquirrel + 3 - NHCgogo + 4 - RixDiary + 5 - RixMiniHeart + 6 - RixFreshman + 7 - RixKid + 8 - RixMagic + 9 - RixJJangu --------------------------------------- @@ -7388,12 +7386,12 @@ Displays given numeric 'value' in large digital clock font on top of the screen. The optional parameter 'type' specifies visual aspects of the "clock" and can be one of the following values: - 0 - Displays the value for 5 seconds (default). - 1 - Incremental counter (1 tick/second). - 2 - Decremental counter (1 tick/second). Does not stop at zero, but - overflows. - 3 - Decremental counter (1 tick/second). Two digits only, stops at - zero. + 0 - Displays the value for 5 seconds (default). + 1 - Incremental counter (1 tick/second). + 2 - Decremental counter (1 tick/second). Does not stop at zero, but + overflows. + 3 - Decremental counter (1 tick/second). Two digits only, stops at + zero. For type 1 and 2 the start value is set by using negative number of the one intended to set (ex. -10 starts the counter at 10 seconds). Except for @@ -7401,11 +7399,11 @@ type 3 the value is interpreted as seconds and formatted as time in days, hours, minutes and seconds. Note, that the official script command does not have the optional parameter. - // displays 23:59:59 for 5 seconds - showdigit 86399; + // displays 23:59:59 for 5 seconds + showdigit 86399; - // counter that starts at 60 and runs for 60 seconds - showdigit 60,3; + // counter that starts at 60 and runs for 60 seconds + showdigit 60,3; --------------------------------------- @@ -7504,8 +7502,8 @@ inventory. The kind of pet is specified by pet ID numbers listed in 'db/pet_db.txt'. The egg is created exactly as if the character just successfully caught a pet in the normal way. - // This will make you a poring: - makepet 1002; + // This will make you a poring: + makepet 1002; Notice that you absolutely have to create pet eggs with this command. If you try to give a pet egg with 'getitem', pet data will not be created by @@ -7821,21 +7819,21 @@ If no additional argument supplied, return the state of the quest: 0 = Quest has been given, but the state is "inactive" 1 = Quest has been given, and the state is "active" 2 = Quest completed - + If parameter "PLAYTIME" is supplied: -1 = Quest not started (not in quest log) 0 = the time limit has not yet been reached 1 = the time limit has not been reached but the quest is marked as - complete + complete 2 = the time limit has been reached - + If parameter "HUNTING" is supplied: - -1 = Quest not started (not in quest log) - 0 = you haven't killed all of the target monsters and the time limit - has not been reached. - 1 = you haven't killed all of the target monsters but the time limit - has been reached. - 2 = you've killed all of the target monsters + -1 = Quest not started (not in quest log) + 0 = you haven't killed all of the target monsters and the time limit + has not been reached. + 1 = you haven't killed all of the target monsters but the time limit + has been reached. + 2 = you've killed all of the target monsters --------------------------------------- @@ -7847,11 +7845,11 @@ certain player/s. state can be: 0 = disable ( Used to disable and remove the mark and the emotion from - the NPC. ) + the NPC. ) 1 = exclamation emotion ( Used to show an important quest event to - certain player. ) + certain player. ) 2 = interrogation emotion ( Used to show an non-important quest event - to certain player. ) + to certain player. ) Other value may cause client crashes. color can be: @@ -7893,8 +7891,8 @@ If the option parameter is left out, the waiting room of the current NPC is used. Example: - // Battle Group will be referred to as $@KvM01BG_id1, and when they - // die, respawn at bat_c01,52,129. + // Battle Group will be referred to as $@KvM01BG_id1, and when they + // die, respawn at bat_c01,52,129. set $@KvM01BG_id1, waitingroom2bg("bat_c01",52,129,"KvM01_BG::OnGuillaumeQuit","KvM01_BG::OnGuillaumeDie"); end; @@ -7996,7 +7994,7 @@ Example: Retrieves data related to given battle group. Type can be one of the following: - 0 - Amount of players currently belonging to the group. + 0 - Amount of players currently belonging to the group. ---------------------------------------- @@ -8047,9 +8045,9 @@ currently attached character. Sets or gets the mercenary calls value for given guild for currently attached character. Guild can be one or the following constants: - ARCH_MERC_GUILD - SPEAR_MERC_GUILD - SWORD_MERC_GUILD + ARCH_MERC_GUILD + SPEAR_MERC_GUILD + SWORD_MERC_GUILD ---------------------------------------- @@ -8059,9 +8057,9 @@ attached character. Guild can be one or the following constants: Sets or gets the mercenary faith value for given guild for currently attached character. Guild can be one or the following constants: - ARCH_MERC_GUILD - SPEAR_MERC_GUILD - SWORD_MERC_GUILD + ARCH_MERC_GUILD + SPEAR_MERC_GUILD + SWORD_MERC_GUILD --------------------------------------- @@ -8072,14 +8070,14 @@ If char id is given, the information of that character is retrieved instead. Type specifies what information to retrieve and can be one of the following: - 0 - Database ID - 1 - Class - 2 - Name - 3 - Faith value for this mercenary's guild, if any - 4 - Calls value for this mercenary's guild, if any - 5 - Kill count - 6 - Remaining life time in msec - 7 - Level + 0 - Database ID + 1 - Class + 2 - Name + 3 - Faith value for this mercenary's guild, if any + 4 - Calls value for this mercenary's guild, if any + 5 - Kill count + 6 - Remaining life time in msec + 7 - Level If the character does not have a mercenary, the command returns "" for name and 0 for all other types. diff --git a/sql-files/tools/convert_engine_innodb.sql b/sql-files/tools/convert_engine_innodb.sql index fcb240bb1..5d74b9309 100644 --- a/sql-files/tools/convert_engine_innodb.sql +++ b/sql-files/tools/convert_engine_innodb.sql @@ -1,11 +1,12 @@ -- --- rAthena Database Converter ( MyISAM -> InnoDB ) +-- Hercules Database Converter ( MyISAM -> InnoDB ) -- ALTER TABLE `auction` ENGINE = InnoDB; ALTER TABLE `cart_inventory` ENGINE = InnoDB; ALTER TABLE `char` ENGINE = InnoDB; ALTER TABLE `charlog` ENGINE = InnoDB; +ALTER TABLE `elemental` ENGINE = InnoDB; ALTER TABLE `friends` ENGINE = InnoDB; ALTER TABLE `global_reg_value` ENGINE = InnoDB; ALTER TABLE `guild` ENGINE = InnoDB; @@ -19,6 +20,7 @@ ALTER TABLE `guild_storage` ENGINE = InnoDB; ALTER TABLE `homunculus` ENGINE = InnoDB; ALTER TABLE `hotkey` ENGINE = InnoDB; ALTER TABLE `interlog` ENGINE = InnoDB; +ALTER TABLE `intereg` ENGINE = InnoDB; ALTER TABLE `inventory` ENGINE = InnoDB; ALTER TABLE `ipbanlist` ENGINE = InnoDB; #ALTER TABLE `item_db` ENGINE = InnoDB; @@ -38,5 +40,6 @@ ALTER TABLE `ragsrvinfo` ENGINE = InnoDB; ALTER TABLE `sc_data` ENGINE = InnoDB; ALTER TABLE `skill` ENGINE = InnoDB; ALTER TABLE `skill_homunculus` ENGINE = InnoDB; +ALTER TABLE `sql_updates` ENGINE = InnoDB; ALTER TABLE `sstatus` ENGINE = InnoDB; ALTER TABLE `storage` ENGINE = InnoDB; diff --git a/sql-files/tools/convert_engine_myisam.sql b/sql-files/tools/convert_engine_myisam.sql index 5af878f65..a05163f85 100644 --- a/sql-files/tools/convert_engine_myisam.sql +++ b/sql-files/tools/convert_engine_myisam.sql @@ -1,11 +1,12 @@ -- --- rAthena Database Converter ( InnoDB -> MyISAM ) +-- Hercules Database Converter ( InnoDB -> MyISAM ) -- ALTER TABLE `auction` ENGINE = MyISAM; ALTER TABLE `cart_inventory` ENGINE = MyISAM; ALTER TABLE `char` ENGINE = MyISAM; ALTER TABLE `charlog` ENGINE = MyISAM; +ALTER TABLE `elemental` ENGINE = MyISAM; ALTER TABLE `friends` ENGINE = MyISAM; ALTER TABLE `global_reg_value` ENGINE = MyISAM; ALTER TABLE `guild` ENGINE = MyISAM; @@ -19,6 +20,7 @@ ALTER TABLE `guild_storage` ENGINE = MyISAM; ALTER TABLE `homunculus` ENGINE = MyISAM; ALTER TABLE `hotkey` ENGINE = MyISAM; ALTER TABLE `interlog` ENGINE = MyISAM; +ALTER TABLE `intereg` ENGINE = MyISAM; ALTER TABLE `inventory` ENGINE = MyISAM; ALTER TABLE `ipbanlist` ENGINE = MyISAM; #ALTER TABLE `item_db` ENGINE = MyISAM; @@ -38,5 +40,6 @@ ALTER TABLE `ragsrvinfo` ENGINE = MyISAM; ALTER TABLE `sc_data` ENGINE = MyISAM; ALTER TABLE `skill` ENGINE = MyISAM; ALTER TABLE `skill_homunculus` ENGINE = MyISAM; +ALTER TABLE `sql_updates` ENGINE = MyISAM; ALTER TABLE `sstatus` ENGINE = MyISAM; ALTER TABLE `storage` ENGINE = MyISAM; diff --git a/tools/check-doc b/tools/check-doc index 4a5dccc88..4b283fcea 100755 --- a/tools/check-doc +++ b/tools/check-doc @@ -3,26 +3,26 @@ # modified by lighta case $1 in - 'script') + 'script') #find which script commands are missing from doc/script_commands.txt echo "Missing script documentation for function :" awk '/BUILDIN_DEF\(.*\),/ {b=match($0,"BUILDIN_DEF(.*),");c=match($0,",");print substr($0,b+12,c-b-12);}' ../src/map/script.c | xargs -I{} sh -c '! grep -Lq {} ../doc/script_commands.txt && echo {}' awk '/BUILDIN_DEF2\(.*\),/ {b=match($0,"BUILDIN_DEF2(.*),");c=match($0,",");d=match($0 ,"\",\"");print substr($0,c+2,d-c-2);}' ../src/map/script.c | xargs -I{} sh -c '! grep -Lq {} ../doc/script_commands.txt && echo {}' ;; - 'atc') + 'atc') #find which atcommands are missing from doc/atcommands.txt echo "Missing atcommand documentation for function :" awk '/ACMD_DEF\(.*\),/ {b=match($0,"ACMD_DEF(.*),");c=match($0,",");print substr($0,b+9,c-b-10);}' ../src/map/atcommand.c | xargs -I{} sh -c '! grep -Lq {} ../doc/atcommands.txt && echo {}' awk '/ACMD_DEF2\(.*\),/ {b=match($0,"ACMD_DEF2(.*),");c=match($0,",");print substr($0,b+10,c-b-10);}' ../src/map/atcommand.c | xargs -I{} sh -c '! grep -Lq {} ../doc/atcommands.txt && echo {}' ;; - 'both') + 'both') $0 script $0 atc ;; *) - echo "Usage: check-doc { script | atc | both }" + echo "Usage: check-doc { script | atc | both }" ;; esac -- cgit v1.2.3-60-g2f50 From 6fd440ea35cf2a084ffa434ee3c8f651b3259c60 Mon Sep 17 00:00:00 2001 From: malufett Date: Sat, 15 Jun 2013 23:45:46 +0800 Subject: Initial release for Monster Transformation Scrolls.(Thanks to Beret) (http://hercules.ws/board/topic/1087-scroll-transform/) Fixed Bug#7372 -where bows should not benefit matk bonus from upgrade. Thanks to Ryuuzaki Signed-off-by: malufett --- db/const.txt | 1 + db/re/item_db.txt | 20 ++++++++++++++------ src/map/status.c | 13 +++++++++++-- src/map/status.h | 2 ++ 4 files changed, 28 insertions(+), 8 deletions(-) (limited to 'db/const.txt') diff --git a/db/const.txt b/db/const.txt index cef0593e1..f006a4d38 100644 --- a/db/const.txt +++ b/db/const.txt @@ -1289,6 +1289,7 @@ SC_KINGS_GRACE 557 SC_TELEKINESIS_INTENSE 558 SC_OFFERTORIUM 559 SC_FRIGG_SONG 560 +SC_MONSTER_TRANSFORM 563 e_gasp 0 e_what 1 diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 94a988e12..7696af4cb 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -5899,6 +5899,14 @@ 12646,Fried_Octopus_Legs,Fried Octopus Legs,2,20,,30,,,,,,,,,,,,,{},{},{} 12647,Sea_Ink,Sea Ink,2,20,,30,,,,,,,,,,,,,{},{},{} // +12658,Transformation_Scroll(Deviruchi),Transformation Scroll(Deviruchi),2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start4 SC_MONSTER_TRANSFORM,1200000,1109,0,0,0; },{},{} +12659,Transformation_Scroll(Raydric),Transformation Scroll(Raydric),2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start4 SC_MONSTER_TRANSFORM,1200000,1276,0,0,0; },{},{} +12660,Transformation_Scroll(Mavka),Transformation Scroll(Mavka),2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start4 SC_MONSTER_TRANSFORM,1200000,1884,0,0,0; },{},{} +12661,Transformation_Scroll(Marduk),Transformation Scroll(Marduk),2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start4 SC_MONSTER_TRANSFORM,1200000,1140,0,0,0; },{},{} +12662,Transformation_Scroll(Banshee),Transformation Scroll(Banshee),2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start4 SC_MONSTER_TRANSFORM,1200000,1867,0,0,0; },{},{} +12663,Transformation_Scroll(Poring),Transformation Scroll(Poring),2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start4 SC_MONSTER_TRANSFORM,1200000,1002,0,0,0; },{},{} +12664,Transformation_Scroll(Golem),Transformation Scroll(Golem),2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start4 SC_MONSTER_TRANSFORM,1200000,1040,0,0,0; },{},{} +// 12699,Tikbalang_Belt,Tikbalang Belt,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 2313; },{},{} 12700,Upside_Down_Shirt,Upside Down Shirt,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ warp "malaya",242,211; },{},{} 12701,Old_Blue_Box_F,Old Blue Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} @@ -7586,13 +7594,13 @@ 17030,St_Pat_Hat_box,St Pat Hat box,18,20,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 18565,1; },{},{} 17035,Energetic_Pisces_Scroll,Energetic Pisces Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 17036,Energetic_Pisces_Box,Energetic Pisces Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -17037,Trans_Box_Devi,Trans Box Devi,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -17038,Trans_Box_Ray_Arch,Trans Box Ray Arch,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -17039,Trans_Box_Mavka,Trans Box Mavka,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -17040,Trans_Box_Marduk,Trans Box Marduk,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} -17041,Trans_Box_Banshee,Trans Box Banshee,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} +17037,Trans_Box_Devi,Trans Box Devi,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12658,10; },{},{} +17038,Trans_Box_Ray_Arch,Trans Box Ray Arch,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12659,10; },{},{} +17039,Trans_Box_Mavka,Trans Box Mavka,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12660,10; },{},{} +17040,Trans_Box_Marduk,Trans Box Marduk,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12661,10; },{},{} +17041,Trans_Box_Banshee,Trans Box Banshee,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12662,10; },{},{} 17042,Trans_Box_Poring,Trans Box Poring,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12663,10; },{},{} -17043,Trans_Box_Golem,Trans Box Golem,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} +17043,Trans_Box_Golem,Trans Box Golem,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12664,10; },{},{} 17050,Aries_Scroll,Aries Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 17051,Aries_Scroll_Box,Aries Scroll Box,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{} 17052,Holy_Mom_Blaze_Box,Holy Mom Blaze Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 6472,1; },{},{} diff --git a/src/map/status.c b/src/map/status.c index 8363b8021..597128b82 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -915,6 +915,7 @@ void initChangeTables(void) { StatusIconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART; StatusIconChangeTable[SC_REBOUND] = SI_REBOUND; StatusIconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING; + StatusIconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM; //Other SC which are not necessarily associated to skills. StatusChangeFlagTable[SC_ATTHASTE_POTION1] = SCB_ASPD; @@ -2500,7 +2501,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) #ifdef RENEWAL wa->matk += sd->inventory_data[index]->matk; wa->wlv = wlv; - if( r ) // renewal magic attack refine bonus + if( r && sd->weapontype1 != W_BOW ) // renewal magic attack refine bonus wa->matk += refine_info[wlv].bonus[r-1] / 100; #endif @@ -8712,6 +8713,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val tick_time = 10000; val4 = tick / tick_time; break; + case SC_MONSTER_TRANSFORM: + if( !mobdb_checkid(val1) ) + val1 = 1002; // default poring + val_flag |= 1; + break; default: if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 ) { //Status change with no calc, no icon, and no skill associated...? @@ -8739,8 +8745,12 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_SUMMON3: case SC_SUMMON4: case SC_SUMMON5: + case SC_MONSTER_TRANSFORM: val_flag |= 1; break; + case SC_KYOUGAKU: + clif->status_change(bl, SI_ACTIVE_MONSTER_TRANSFORM, 1, 0, 1002, 0, 0); // Poring in disguise + break; } } @@ -9646,7 +9656,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const } break; case SC_KYOUGAKU: - clif->sc_end(&sd->bl,sd->bl.id,AREA,SI_KYOUGAKU); clif->sc_end(&sd->bl,sd->bl.id,AREA,SI_ACTIVE_MONSTER_TRANSFORM); break; case SC_CLAIRVOYANCE: diff --git a/src/map/status.h b/src/map/status.h index 617cd9572..fbce95f17 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -671,6 +671,8 @@ typedef enum sc_type { SC_ALL_RIDING, SC_HANBOK, + SC_MONSTER_TRANSFORM, + SC_MAX, //Automatically updated max, used in for's to check we are within bounds. } sc_type; -- cgit v1.2.3-60-g2f50