summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GNUmakefile4
-rwxr-xr-xchar-server7
m---------client-data0
-rwxr-xr-xlogin-server7
-rw-r--r--login/conf/login_local.conf.example10
-rwxr-xr-xmap-server7
m---------tools0
-rw-r--r--world/map/.gitignore2
-rw-r--r--world/map/conf/.gitignore1
-rw-r--r--world/map/conf/atcommand_athena.conf2
-rw-r--r--world/map/conf/atcommand_local.conf.example7
-rw-r--r--world/map/conf/magic-anchors.sex118
-rw-r--r--world/map/conf/magic-debug.sex408
-rw-r--r--world/map/conf/magic-level0.sex39
-rw-r--r--world/map/conf/magic-level1.sex102
-rw-r--r--world/map/conf/magic-level2.sex212
-rw-r--r--world/map/conf/magic-level3.sex346
-rw-r--r--world/map/conf/magic-level4.sex2
-rw-r--r--world/map/conf/magic-level5.sex102
-rw-r--r--world/map/conf/magic-misc.sex79
-rw-r--r--world/map/conf/magic-procedures.sex31
-rw-r--r--world/map/conf/magic-quests.sex1
-rw-r--r--world/map/conf/magic-quickdebug.sex6
-rw-r--r--world/map/conf/map_athena.conf3
-rw-r--r--world/map/conf/motd.txt.example2
-rw-r--r--world/map/conf/tmwa-map.conf4
-rw-r--r--world/map/data/017-9.wlkbin2707 -> 2707 bytes
-rw-r--r--world/map/data/020-1.wlkbin18948 -> 18948 bytes
-rw-r--r--world/map/data/029-3.wlkbin10004 -> 10004 bytes
-rw-r--r--world/map/db/const.txt6
-rw-r--r--world/map/db/item_db_chest.txt488
-rw-r--r--world/map/db/item_db_foot.txt38
-rw-r--r--world/map/db/item_db_generic.txt472
-rw-r--r--world/map/db/item_db_hand.txt36
-rw-r--r--world/map/db/item_db_head.txt364
-rw-r--r--world/map/db/item_db_leg.txt112
-rw-r--r--world/map/db/item_db_offhand.txt12
-rw-r--r--world/map/db/item_db_trinket.txt38
-rw-r--r--world/map/db/item_db_use.txt190
-rw-r--r--world/map/db/item_db_weapon.txt124
-rw-r--r--world/map/db/mob_db_20_39.txt4
-rw-r--r--world/map/db/quest-log.txt23
-rw-r--r--world/map/news.d/48-v2015.05.04.txt38
-rw-r--r--world/map/news.d/49-v2015.05.18.txt34
-rw-r--r--world/map/npc/001-1/_mobs.txt2
-rw-r--r--world/map/npc/001-1/adrian.txt18
-rw-r--r--world/map/npc/001-1/ched.txt16
-rw-r--r--world/map/npc/001-1/children.txt24
-rw-r--r--world/map/npc/001-1/constable.txt2
-rw-r--r--world/map/npc/001-1/eomie.txt49
-rw-r--r--world/map/npc/001-1/ferry_master.txt2
-rw-r--r--world/map/npc/001-1/gate_guards.txt8
-rw-r--r--world/map/npc/001-1/gossip.txt49
-rw-r--r--world/map/npc/001-1/stat_reset.txt2
-rw-r--r--world/map/npc/001-1/tombstones.txt20
-rw-r--r--world/map/npc/001-1/weellos.txt12
-rw-r--r--world/map/npc/001-2/_mobs.txt2
-rw-r--r--world/map/npc/001-2/government_building.txt73
-rw-r--r--world/map/npc/001-2/heathin.txt7
-rw-r--r--world/map/npc/001-2/manakins.txt22
-rw-r--r--world/map/npc/001-2/sandra.txt3
-rw-r--r--world/map/npc/001-2/wizards.txt50
-rw-r--r--world/map/npc/001-3/_mobs.txt2
-rw-r--r--world/map/npc/002-1/_mobs.txt2
-rw-r--r--world/map/npc/002-1/elanore.txt37
-rw-r--r--world/map/npc/002-1/lieutenant_dausen.txt3
-rw-r--r--world/map/npc/002-1/mine_debug.txt10
-rw-r--r--world/map/npc/002-1/nickos.txt3
-rw-r--r--world/map/npc/002-1/sarah.txt13
-rw-r--r--world/map/npc/002-1/soul-menhir.txt1
-rw-r--r--world/map/npc/002-1/stewen.txt3
-rw-r--r--world/map/npc/002-1/traveler.txt2
-rw-r--r--world/map/npc/002-2/_mobs.txt2
-rw-r--r--world/map/npc/002-2/bakery.txt43
-rw-r--r--world/map/npc/002-2/barber.txt2
-rw-r--r--world/map/npc/002-2/bleacher.txt4
-rw-r--r--world/map/npc/002-2/casino.txt64
-rw-r--r--world/map/npc/002-2/eurni.txt26
-rw-r--r--world/map/npc/002-2/hetchel.txt2
-rw-r--r--world/map/npc/002-2/imec.txt58
-rw-r--r--world/map/npc/002-2/kps.txt31
-rw-r--r--world/map/npc/002-2/kylian.txt118
-rw-r--r--world/map/npc/002-2/troupe_leader.txt2
-rw-r--r--world/map/npc/002-3/_mobs.txt2
-rw-r--r--world/map/npc/002-3/mining_camp_barrier.txt3
-rw-r--r--world/map/npc/002-3/nathan.txt3
-rw-r--r--world/map/npc/002-3/traveler.txt2
-rw-r--r--world/map/npc/002-4/_mobs.txt2
-rw-r--r--world/map/npc/002-4/mine_triggerone.txt3
-rw-r--r--world/map/npc/002-4/mine_triggerthree.txt3
-rw-r--r--world/map/npc/002-4/mine_triggertwo.txt3
-rw-r--r--world/map/npc/002-4/naem.txt3
-rw-r--r--world/map/npc/002-4/underground_palace_barrier.txt3
-rw-r--r--world/map/npc/002-5/_mobs.txt2
-rw-r--r--world/map/npc/002-5/chest.txt3
-rw-r--r--world/map/npc/002-5/sema.txt3
-rw-r--r--world/map/npc/004-3/_mobs.txt2
-rw-r--r--world/map/npc/004-4/_mobs.txt2
-rw-r--r--world/map/npc/004-5/_mobs.txt2
-rw-r--r--world/map/npc/004-5/chest.txt8
-rw-r--r--world/map/npc/005-3/_mobs.txt2
-rw-r--r--world/map/npc/006-1/_mobs.txt2
-rw-r--r--world/map/npc/006-1/miriam.txt16
-rw-r--r--world/map/npc/006-1/pachua.txt4
-rw-r--r--world/map/npc/006-1/spirit.txt8
-rw-r--r--world/map/npc/006-1/traveler.txt2
-rw-r--r--world/map/npc/006-1/tree.txt8
-rw-r--r--world/map/npc/006-2/_mobs.txt2
-rw-r--r--world/map/npc/006-3/_mobs.txt2
-rw-r--r--world/map/npc/007-1/_mobs.txt2
-rw-r--r--world/map/npc/007-1/voltain.txt2
-rw-r--r--world/map/npc/008-1/_mobs.txt2
-rw-r--r--world/map/npc/008-1/annualeaster.txt8
-rw-r--r--world/map/npc/008-1/diryn.txt2
-rw-r--r--world/map/npc/008-1/hinnak.txt2
-rw-r--r--world/map/npc/008-1/mikhail.txt3
-rw-r--r--world/map/npc/009-1/_import.txt1
-rw-r--r--world/map/npc/009-1/_mobs.txt2
-rw-r--r--world/map/npc/009-1/constable.txt11
-rw-r--r--world/map/npc/009-1/jack.txt3
-rw-r--r--world/map/npc/009-1/milly.txt8
-rw-r--r--world/map/npc/009-1/old_man.txt2
-rw-r--r--world/map/npc/009-1/old_woman.txt14
-rw-r--r--world/map/npc/009-1/sabine.txt2
-rw-r--r--world/map/npc/009-1/soul-menhir.txt1
-rw-r--r--world/map/npc/009-2/_mobs.txt2
-rw-r--r--world/map/npc/009-2/airlia.txt20
-rw-r--r--world/map/npc/009-2/alan.txt2
-rw-r--r--world/map/npc/009-2/bernard.txt3
-rw-r--r--world/map/npc/009-2/doctor.txt2
-rw-r--r--world/map/npc/009-2/inspector.txt2
-rw-r--r--world/map/npc/009-2/kfahr.txt6
-rw-r--r--world/map/npc/009-2/lena.txt3
-rw-r--r--world/map/npc/009-2/nurse.txt1
-rw-r--r--world/map/npc/009-2/richard.txt1
-rw-r--r--world/map/npc/009-2/selim.txt4
-rw-r--r--world/map/npc/009-2/trader.txt2
-rw-r--r--world/map/npc/009-2/wyara.txt2
-rw-r--r--world/map/npc/009-3/_mobs.txt2
-rw-r--r--world/map/npc/009-4/_mobs.txt2
-rw-r--r--world/map/npc/009-4/barriers.txt13
-rw-r--r--world/map/npc/009-4/torches.txt74
-rw-r--r--world/map/npc/009-5/_mobs.txt2
-rw-r--r--world/map/npc/009-6/_mobs.txt2
-rw-r--r--world/map/npc/009-6/brodomir.txt6
-rw-r--r--world/map/npc/009-7/_mobs.txt2
-rw-r--r--world/map/npc/009-7/battlemaster.txt2
-rw-r--r--world/map/npc/009-7/core.txt50
-rw-r--r--world/map/npc/009-7/debug.txt19
-rw-r--r--world/map/npc/009-7/mapflags.txt1
-rw-r--r--world/map/npc/010-1/_mobs.txt2
-rw-r--r--world/map/npc/010-2/_mobs.txt2
-rw-r--r--world/map/npc/010-2/band.txt2
-rw-r--r--world/map/npc/011-1/_mobs.txt2
-rw-r--r--world/map/npc/011-1/oscar.txt7
-rw-r--r--world/map/npc/011-3/_mobs.txt2
-rw-r--r--world/map/npc/011-4/_mobs.txt2
-rw-r--r--world/map/npc/011-6/_mobs.txt2
-rw-r--r--world/map/npc/011-6/bryant.txt3
-rw-r--r--world/map/npc/011-6/crastur.txt12
-rw-r--r--world/map/npc/012-1/_mobs.txt2
-rw-r--r--world/map/npc/012-1/injured-mouboo.txt14
-rw-r--r--world/map/npc/012-3/_mobs.txt2
-rw-r--r--world/map/npc/012-3/traveler.txt2
-rw-r--r--world/map/npc/012-4/_mobs.txt2
-rw-r--r--world/map/npc/013-1/_mobs.txt2
-rw-r--r--world/map/npc/013-1/traveler.txt2
-rw-r--r--world/map/npc/013-2/_mobs.txt2
-rw-r--r--world/map/npc/013-3/_mobs.txt2
-rw-r--r--world/map/npc/013-3/barrier.txt2
-rw-r--r--world/map/npc/013-3/mask_chest.txt2
-rw-r--r--world/map/npc/013-3/sword_chest.txt1
-rw-r--r--world/map/npc/014-1/_mobs.txt2
-rw-r--r--world/map/npc/014-3/_mobs.txt2
-rw-r--r--world/map/npc/015-1/_mobs.txt2
-rw-r--r--world/map/npc/015-3/_mobs.txt2
-rw-r--r--world/map/npc/016-1/_mobs.txt2
-rw-r--r--world/map/npc/016-1/gwendolyn.txt2
-rw-r--r--world/map/npc/017-1/_mobs.txt2
-rw-r--r--world/map/npc/017-2/_mobs.txt2
-rw-r--r--world/map/npc/017-3/_mobs.txt2
-rw-r--r--world/map/npc/017-4/_mobs.txt2
-rw-r--r--world/map/npc/017-9/_import.txt5
-rw-r--r--world/map/npc/017-9/_mobs.txt4
-rw-r--r--world/map/npc/017-9/_warps.txt10
-rw-r--r--world/map/npc/017-9/npcs.txt45
-rw-r--r--world/map/npc/017-9/secret.txt39
-rw-r--r--world/map/npc/018-1/_mobs.txt2
-rw-r--r--world/map/npc/018-2/_mobs.txt2
-rw-r--r--world/map/npc/018-2/angus.txt2
-rw-r--r--world/map/npc/018-2/books.txt2
-rw-r--r--world/map/npc/018-2/caul.txt14
-rw-r--r--world/map/npc/018-2/miners.txt2
-rw-r--r--world/map/npc/018-2/receptionist.txt2
-rw-r--r--world/map/npc/018-3/_mobs.txt2
-rw-r--r--world/map/npc/018-3/bookcase.txt2
-rw-r--r--world/map/npc/018-3/evil-obelisk.txt1
-rw-r--r--world/map/npc/019-1/_mobs.txt2
-rw-r--r--world/map/npc/019-1/santa_helper.txt1
-rw-r--r--world/map/npc/019-1/snowman.txt1
-rw-r--r--world/map/npc/019-3/_mobs.txt2
-rw-r--r--world/map/npc/019-4/_mobs.txt2
-rw-r--r--world/map/npc/020-1/_mobs.txt2
-rw-r--r--world/map/npc/020-1/soul-menhir.txt1
-rw-r--r--world/map/npc/020-1/traveler.txt2
-rw-r--r--world/map/npc/020-1/well.txt32
-rw-r--r--world/map/npc/020-2/_mobs.txt2
-rw-r--r--world/map/npc/020-2/baktar.txt90
-rw-r--r--world/map/npc/020-2/banker.txt1
-rw-r--r--world/map/npc/020-3/_mobs.txt2
-rw-r--r--world/map/npc/021-3/_mobs.txt2
-rw-r--r--world/map/npc/025-1/_mobs.txt2
-rw-r--r--world/map/npc/025-3/_mobs.txt2
-rw-r--r--world/map/npc/025-4/_mobs.txt2
-rw-r--r--world/map/npc/026-1/_mobs.txt2
-rw-r--r--world/map/npc/027-1/_mobs.txt2
-rw-r--r--world/map/npc/027-1/graves.txt59
-rw-r--r--world/map/npc/027-1/traveler.txt2
-rw-r--r--world/map/npc/027-2/_mobs.txt2
-rw-r--r--world/map/npc/027-2/gy_inn_shops.txt1
-rw-r--r--world/map/npc/027-3/_mobs.txt2
-rw-r--r--world/map/npc/027-3/monsters.txt2
-rw-r--r--world/map/npc/027-4/_mobs.txt2
-rw-r--r--world/map/npc/027-4/monsters.txt2
-rw-r--r--world/map/npc/027-5/_mobs.txt2
-rw-r--r--world/map/npc/027-6/_mobs.txt2
-rw-r--r--world/map/npc/027-7/_mobs.txt2
-rw-r--r--world/map/npc/027-8/_mobs.txt2
-rw-r--r--world/map/npc/028-1/_mobs.txt2
-rw-r--r--world/map/npc/028-3/_mobs.txt2
-rw-r--r--world/map/npc/029-1/_mobs.txt2
-rw-r--r--world/map/npc/029-1/aahna.txt14
-rw-r--r--world/map/npc/029-1/hasan.txt35
-rw-r--r--world/map/npc/029-1/hideandseek.txt99
-rw-r--r--world/map/npc/029-1/kaan.txt26
-rw-r--r--world/map/npc/029-1/liana.txt13
-rw-r--r--world/map/npc/029-1/rewards_master.txt2
-rw-r--r--world/map/npc/029-1/soul-menhir.txt1
-rw-r--r--world/map/npc/029-1/traveler.txt2
-rw-r--r--world/map/npc/029-1/tutorial.txt27
-rw-r--r--world/map/npc/029-1/valon.txt50
-rw-r--r--world/map/npc/029-1/vincent.txt22
-rw-r--r--world/map/npc/029-1/zegas.txt31
-rw-r--r--world/map/npc/029-2/_mobs.txt2
-rw-r--r--world/map/npc/029-2/barrels.txt8
-rw-r--r--world/map/npc/029-2/barrels_config.txt34
-rw-r--r--world/map/npc/029-2/cynric.txt1
-rw-r--r--world/map/npc/029-2/morgan.txt43
-rw-r--r--world/map/npc/029-2/sorfina.txt63
-rw-r--r--world/map/npc/029-2/stat_reset.txt5
-rw-r--r--world/map/npc/029-2/tanisha.txt43
-rw-r--r--world/map/npc/029-3/_mobs.txt2
-rw-r--r--world/map/npc/029-3/parua.txt5
-rw-r--r--world/map/npc/030-2/_mobs.txt2
-rw-r--r--world/map/npc/030-2/eljas.txt2
-rw-r--r--world/map/npc/030-2/guards.txt3
-rw-r--r--world/map/npc/030-2/shipping_helper.txt2
-rw-r--r--world/map/npc/030-3/_mobs.txt2
-rw-r--r--world/map/npc/030-4/_mobs.txt2
-rw-r--r--world/map/npc/030-4/mana_battery.txt2
-rw-r--r--world/map/npc/031-1/_mobs.txt2
-rw-r--r--world/map/npc/031-1/angelaOutside.txt65
-rw-r--r--world/map/npc/031-1/house.txt15
-rw-r--r--world/map/npc/031-2/_mobs.txt2
-rw-r--r--world/map/npc/031-2/angelaHouse.txt22
-rw-r--r--world/map/npc/031-2/cindyHouse.txt12
-rw-r--r--world/map/npc/031-3/_mobs.txt2
-rw-r--r--world/map/npc/031-4/_mobs.txt2
-rw-r--r--world/map/npc/031-4/cindyCave.txt38
-rw-r--r--world/map/npc/032-3/_mobs.txt2
-rw-r--r--world/map/npc/033-1/_mobs.txt2
-rw-r--r--world/map/npc/033-1/barbarianinit.txt2
-rw-r--r--world/map/npc/033-1/traveler.txt2
-rw-r--r--world/map/npc/034-1/_mobs.txt2
-rw-r--r--world/map/npc/034-2/_mobs.txt2
-rw-r--r--world/map/npc/035-2/_mobs.txt2
-rw-r--r--world/map/npc/036-2/_mobs.txt2
-rw-r--r--world/map/npc/043-3/_mobs.txt2
-rw-r--r--world/map/npc/043-4/_mobs.txt2
-rw-r--r--world/map/npc/045-1/_mobs.txt2
-rw-r--r--world/map/npc/046-1/_mobs.txt2
-rw-r--r--world/map/npc/046-3/_mobs.txt2
-rw-r--r--world/map/npc/047-1/_mobs.txt2
-rw-r--r--world/map/npc/047-3/_mobs.txt2
-rw-r--r--world/map/npc/048-2/_mobs.txt2
-rw-r--r--world/map/npc/048-2/bluesageConfig.txt11
-rw-r--r--world/map/npc/048-2/helperAccused.txt26
-rw-r--r--world/map/npc/048-2/helperBookpages1.txt13
-rw-r--r--world/map/npc/048-2/helperBookpages2.txt8
-rw-r--r--world/map/npc/048-2/helperBookpages3.txt13
-rw-r--r--world/map/npc/048-2/helperChief.txt19
-rw-r--r--world/map/npc/048-2/helperCleaning1.txt13
-rw-r--r--world/map/npc/048-2/helperCleaning2.txt13
-rw-r--r--world/map/npc/048-2/helperCleaning3.txt13
-rw-r--r--world/map/npc/048-2/helperCleaning4.txt13
-rw-r--r--world/map/npc/048-2/helperCleaning5.txt13
-rw-r--r--world/map/npc/048-2/helperJanitor.txt42
-rw-r--r--world/map/npc/048-2/helperMInk.txt13
-rw-r--r--world/map/npc/048-2/helperMReed.txt18
-rw-r--r--world/map/npc/048-2/helperMSilk.txt13
-rw-r--r--world/map/npc/048-2/helperMYetiClaw.txt13
-rw-r--r--world/map/npc/048-2/helperResting1.txt13
-rw-r--r--world/map/npc/048-2/helperResting2.txt13
-rw-r--r--world/map/npc/048-2/sageNikolai.txt28
-rw-r--r--world/map/npc/048-2/traveler.txt2
-rw-r--r--world/map/npc/051-1/_mobs.txt2
-rw-r--r--world/map/npc/051-1/desertmonsters.txt2
-rw-r--r--world/map/npc/051-1/forestmonsters.txt2
-rw-r--r--world/map/npc/051-3/_mobs.txt2
-rw-r--r--world/map/npc/051-3/jailslimes.txt2
-rw-r--r--world/map/npc/052-1/_mobs.txt2
-rw-r--r--world/map/npc/052-1/channelling.txt16
-rw-r--r--world/map/npc/052-2/_mobs.txt2
-rw-r--r--world/map/npc/055-1/_mobs.txt2
-rw-r--r--world/map/npc/055-1/pumpkins.txt2
-rw-r--r--world/map/npc/055-1/traveler.txt2
-rw-r--r--world/map/npc/055-3/_mobs.txt2
-rw-r--r--world/map/npc/056-2/_mobs.txt2
-rw-r--r--world/map/npc/057-1/_mobs.txt2
-rw-r--r--world/map/npc/annuals/fathertime.txt22
-rw-r--r--world/map/npc/annuals/halloween/config.txt2
-rw-r--r--world/map/npc/annuals/halloween/debug.txt5
-rw-r--r--world/map/npc/annuals/halloween/trick_or_treat.txt4
-rw-r--r--world/map/npc/annuals/xmas/barriers.txt8
-rw-r--r--world/map/npc/annuals/xmas/config.txt2
-rw-r--r--world/map/npc/annuals/xmas/core.txt5
-rw-r--r--world/map/npc/annuals/xmas/debug.txt3
-rw-r--r--world/map/npc/botcheck/_mobs.txt2
-rw-r--r--world/map/npc/functions/DyeConfig.txt6
-rw-r--r--world/map/npc/functions/announcements.txt (renamed from world/map/npc/017-9/announcements.txt)90
-rw-r--r--world/map/npc/functions/banker.txt6
-rw-r--r--world/map/npc/functions/clear_vars.txt405
-rwxr-xr-xworld/map/npc/functions/debug.txt87
-rw-r--r--world/map/npc/functions/default_npc_checks.txt25
-rw-r--r--world/map/npc/functions/ferry.txt7
-rw-r--r--world/map/npc/functions/game_rules.txt159
-rw-r--r--world/map/npc/functions/global_event_handler.txt50
-rw-r--r--world/map/npc/functions/gm_island.txt17
-rw-r--r--world/map/npc/functions/inn.txt15
-rw-r--r--world/map/npc/functions/magic.txt2
-rw-r--r--world/map/npc/functions/mob_points.txt15
-rw-r--r--world/map/npc/functions/motd.txt.example11
-rw-r--r--world/map/npc/functions/motdconfig.txt40
-rw-r--r--world/map/npc/functions/slot_machine.txt9
-rw-r--r--world/map/npc/functions/stat_reset.txt8
-rw-r--r--world/map/npc/functions/superdebug.txt61
-rw-r--r--world/map/npc/functions/time.txt5
-rw-r--r--world/map/npc/functions/travelers.txt58
-rw-r--r--world/map/npc/functions/undead_debug.txt3
-rw-r--r--world/map/npc/functions/water_bottle.txt14
-rw-r--r--world/map/npc/items/check_wand.txt6
-rw-r--r--world/map/npc/items/magic_gm_top_hat.txt2
-rw-r--r--world/map/npc/items/require_stat.txt11
-rw-r--r--world/map/npc/items/restricted_item.txt4
-rw-r--r--world/map/npc/items/scissors.txt4
-rw-r--r--world/map/npc/items/shock_sweet.txt4
-rw-r--r--world/map/npc/items/unequipcb.txt4
-rw-r--r--world/map/npc/items/warpTowels.txt2
-rw-r--r--world/map/npc/scripts.conf4
359 files changed, 3454 insertions, 3938 deletions
diff --git a/GNUmakefile b/GNUmakefile
index 35036514..415d91a4 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -10,8 +10,8 @@ maps:
conf: world/map/conf/magic-secrets.sex \
login/conf/login_local.conf login/conf/ladmin_local.conf login/save/gm_account.txt login/save/account.txt \
world/conf/char_local.conf \
-world/map/conf/map_local.conf world/map/conf/battle_local.conf world/map/conf/motd.txt world/map/conf/atcommand_local.conf world/map/db/const-debugflag.txt \
-conf/monitor_local.conf
+world/map/conf/map_local.conf world/map/conf/battle_local.conf world/map/conf/atcommand_local.conf world/map/db/const-debugflag.txt \
+world/map/npc/functions/motd.txt
world/map/conf/magic-secrets.sex: world/map/conf/magic-secrets.sex.template world/map/conf/secrets-build
cd world/map/conf && ./build-magic.sh
diff --git a/char-server b/char-server
deleted file mode 100755
index 3f3598f3..00000000
--- a/char-server
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-echo -e '\e[5;7;31mPlease update your build of TMWA, then use ./run-all\e[m' >& 2
-echo -e 'Or if you want output in separate TTYs, cd world then tmwa-char' >& 2
-sleep 10
-cd world &&
-exec char-server
-
diff --git a/client-data b/client-data
-Subproject 8b2115dc950895bfec084770c45d5487320b428
+Subproject 2338663882dff063702ec069349ce422258b29e
diff --git a/login-server b/login-server
deleted file mode 100755
index fe2e218b..00000000
--- a/login-server
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-echo -e '\e[5;7;31mPlease update your build of TMWA, then use ./run-all\e[m' >& 2
-echo -e 'Or if you want output in separate TTYs, cd login then tmwa-login' >& 2
-sleep 10
-cd login &&
-exec login-server
-
diff --git a/login/conf/login_local.conf.example b/login/conf/login_local.conf.example
index f0ab0bc4..635f22ee 100644
--- a/login/conf/login_local.conf.example
+++ b/login/conf/login_local.conf.example
@@ -22,16 +22,6 @@ admin_pass: admin
//ladminallowip: clear
ladminallowip: 127.0.0.1
-// Gamemaster password, used with the @gm command to obtain GM commands
-// NOTICE: You should also change this one.
-gm_pass: gm
-
-// GM level granted to people using @gm (with the correct password).
-// Builtin default is 60; setting it to 0 will disable the command.
-// To work, @gm also needs to be level 0 in atcommand_local.conf,
-// and atcommand_gm_only needs to be off in battle_local.conf
-level_new_gm: 0
-
// Update host
// If not empty, send address for client to download data.
// This must contain news.txt and resources.xml
diff --git a/map-server b/map-server
deleted file mode 100755
index c251c3d8..00000000
--- a/map-server
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-echo -e '\e[5;7;31mPlease update your build of TMWA, then use ./run-all\e[m' >& 2
-echo -e 'Or if you want output in separate TTYs, cd world/map then tmwa-map' >& 2
-sleep 10
-cd world/map &&
-exec map-server
-
diff --git a/tools b/tools
-Subproject a49ce96049a70e35336e93814282287039b9fa3
+Subproject a67f3867ada037efdd6a983e090f014b8ed24b8
diff --git a/world/map/.gitignore b/world/map/.gitignore
index fcd1d9f0..2c681650 100644
--- a/world/map/.gitignore
+++ b/world/map/.gitignore
@@ -3,3 +3,5 @@
/news.phpbb.txt
/db/const-debugflag.txt
+
+/npc/functions/motd.txt
diff --git a/world/map/conf/.gitignore b/world/map/conf/.gitignore
index 88c1dc21..c2b48eb6 100644
--- a/world/map/conf/.gitignore
+++ b/world/map/conf/.gitignore
@@ -1,5 +1,4 @@
/*_local.conf
/magic-secrets.conf
/magic-secrets.sex
-/motd.txt
/secrets-build
diff --git a/world/map/conf/atcommand_athena.conf b/world/map/conf/atcommand_athena.conf
index fc6b71fe..8b182ab8 100644
--- a/world/map/conf/atcommand_athena.conf
+++ b/world/map/conf/atcommand_athena.conf
@@ -13,6 +13,7 @@ localbroadcast: 40
die: 40
where: 40
goto: 40
+npc: 40
kick: 40
who: 40
whogroup: 40
@@ -46,6 +47,7 @@ summon: 50
charpvp: 60
charstatsall: 60
pvpoff: 60
+exprate: 60
pvpon: 60
speed: 60
killmonster: 60
diff --git a/world/map/conf/atcommand_local.conf.example b/world/map/conf/atcommand_local.conf.example
index 3935db1b..916a092c 100644
--- a/world/map/conf/atcommand_local.conf.example
+++ b/world/map/conf/atcommand_local.conf.example
@@ -1,8 +1 @@
// Athena atcommand Local Configuration file.
-
-// Command to become a GM. Only players who are not a GM can use this.
-// In addition to changing this to 0, you must also:
-// - set level_new_gm in login_athena.conf to something other than 0
-// - set atcommand_gm_only to false in battle_athena.conf
-// - give the correct password (gm_pass in login_athena.conf)
-gm: 100
diff --git a/world/map/conf/magic-anchors.sex b/world/map/conf/magic-anchors.sex
index 40bd7de5..3bb16f75 100644
--- a/world/map/conf/magic-anchors.sex
+++ b/world/map/conf/magic-anchors.sex
@@ -1,56 +1,66 @@
"--------------------------------------------------------------------------------"
-"Teleport anchors"
+" Teleport anchors(disabled) "
+" As of now, only the #vorp spell(disabled) uses them "
"--------------------------------------------------------------------------------"
-(TELEPORT-ANCHOR tulimshar "tulimshar"
- (@+
- (@ "001-1" 43 66)
- 3
- 3))
-
-(TELEPORT-ANCHOR hurnscald "hurnscald"
- (@+
- (@ "009-1" 55 37)
- 3
- 3))
-
-(TELEPORT-ANCHOR nivalis "nivalis"
- (@+
- (@ "020-1" 75 63)
- 19
- 12))
-
-(TELEPORT-ANCHOR wizardhut "##00"
- (@+
- (@ "013-1" 41 92)
- 3
- 3))
-
-(TELEPORT-ANCHOR pachua "##01"
- (@+
- (@ "006-1" 22 101)
- 3
- 3))
-
-(TELEPORT-ANCHOR desert "##02"
- (@+
- (@ "005-1" 160 64)
- 5
- 5))
-
-(TELEPORT-ANCHOR forest "##03"
- (@+
- (@ "015-1" 35 35)
- 40
- 40))
-
-(TELEPORT-ANCHOR snakecave "##04"
- (@+
- (@ "011-4" 50 75)
- 3
- 3))
-
-(TELEPORT-ANCHOR dimondscove "##05"
- (@+
- (@ "010-2" 23 79)
- 3
- 3))
+(DISABLED
+ (TELEPORT-ANCHOR tulimshar "tulimshar"
+ (@+
+ (@ "001-1" 43 66)
+ 3
+ 3)))
+
+(DISABLED
+ (TELEPORT-ANCHOR hurnscald "hurnscald"
+ (@+
+ (@ "009-1" 55 37)
+ 3
+ 3)))
+
+(DISABLED
+ (TELEPORT-ANCHOR nivalis "nivalis"
+ (@+
+ (@ "020-1" 75 63)
+ 19
+ 12)))
+
+(DISABLED
+ (TELEPORT-ANCHOR wizardhut "##00"
+ (@+
+ (@ "013-1" 41 92)
+ 3
+ 3)))
+
+(DISABLED
+ (TELEPORT-ANCHOR pachua "##01"
+ (@+
+ (@ "006-1" 22 101)
+ 3
+ 3)))
+
+(DISABLED
+ (TELEPORT-ANCHOR desert "##02"
+ (@+
+ (@ "005-1" 160 64)
+ 5
+ 5)))
+
+(DISABLED
+ (TELEPORT-ANCHOR forest "##03"
+ (@+
+ (@ "015-1" 35 35)
+ 40
+ 40)))
+
+(DISABLED
+ (TELEPORT-ANCHOR snakecave "##04"
+ (@+
+ (@ "011-4" 50 75)
+ 3
+ 3)))
+
+(DISABLED
+ (TELEPORT-ANCHOR dimondscove "##05"
+ (@+
+ (@ "010-2" 23 79)
+ 3
+ 3)))
diff --git a/world/map/conf/magic-debug.sex b/world/map/conf/magic-debug.sex
deleted file mode 100644
index 3cefd3b9..00000000
--- a/world/map/conf/magic-debug.sex
+++ /dev/null
@@ -1,408 +0,0 @@
-"--------------------------------------------------------------------------------"
-"Debug keywords"
-"--------------------------------------------------------------------------------"
-(SPELL () debug "debug" ()
- (=>
- (REQUIRE DEBUG)
- (EFFECT
- (message caster
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+ "FLAGS: " "drank=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 1)
- 0))
- ", ")
- "Kmseed=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 2)
- 0))
- ", ")
- "touched-mseed=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 4)
- 0))
- ", ")
- "mseed-max=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 8)
- 0))
- ", ")
- "Kauldsbel=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 16)
- 0))
- ", ")
- "Kwyara=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 32)
- 0))
- ", ")
- "Ksagatha=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 64)
- 0))
- ", ")
- "Kmpotion=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 128)
- 0))
- ", ")
- "mseed-rumour=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 256)
- 0))
- ", ")
- "Kcuttree=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 512)
- 0))
- ", ")
- "cut=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 1024)
- 0))
- ", ")
- "Kdruidtree=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 2048)
- 0))
- ", ")
- "Kimp=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 4096)
- 0))
- ", ")
- "Koldwiz=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 8192)
- 0))
- ", ")
- "made-conc=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 16384)
- 0))
- ", ")
- "elanore-omar=")
- (>
- (&
- (script_int caster "MAGIC_FLAGS")
- 32768)
- 0)))
- (message caster
- (+
- (+
- (+
- (+
- (+ "EXP: "
- (&
- (script_int caster "MAGIC_EXPERIENCE")
- 0xffff))
- ", lastspell=")
- (&
- (>>
- (script_int caster "MAGIC_EXPERIENCE")
- 16)
- 0xff))
- ", healexp=")
- (&
- (>>
- (script_int caster "MAGIC_EXPERIENCE")
- 24)
- 0xff)))
- (message caster
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+
- (+ "STATUS: " "auldsbel:")
- (&
- (script_int caster "QUEST_MAGIC")
- 0x1f))
- ",")
- (&
- (>>
- (script_int caster "QUEST_MAGIC")
- 5)
- 0x7))
- ", ")
- "dt/mb:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC")
- 8)
- 0xf))
- ", ")
- "s-unhappy:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC")
- 12)
- 0xf))
- ", ")
- "sagatha:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC")
- 16)
- 0xff))
- ", ")
- "swords:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC")
- 24)
- 0xff))
- ", ")
- "imp:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC2")
- 0)
- 0xf))
- ", ")
- "elanore:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC2")
- 4)
- 0xf))
- ", ")
- "elanore-sub:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC2")
- 12)
- 0xf))
- ", ")
- "wyara:")
- (&
- (>>
- (script_int caster "QUEST_MAGIC2")
- 8)
- 0xf))))))
-(PROCEDURE debug_xmod (name mask shift gain)
- (SET value
- (+
- (&
- (>>
- (script_int caster name)
- shift)
- mask)
- gain))
- (IF (< value 0)
- (SET value 0))
- (IF (> value mask)
- (SET value mask))
- (CALL set_var name mask shift value))
-(PROCEDURE debug_mod (name delta)
- (IF (== name "mexp")
- (CALL debug_xmod "MAGIC_EXPERIENCE" 0xffff 0 delta)
- (IF (== name "lastspell")
- (CALL debug_xmod "MAGIC_EXPERIENCE" 0xff 16 delta)
- (IF (== name "healexp")
- (CALL debug_xmod "MAGIC_EXPERIENCE" 0xff 24 delta)
- (IF (== name "drank")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 0 delta)
- (IF (== name "Kmseed")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 1 delta)
- (IF (== name "touched-mseed")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 2 delta)
- (IF (== name "mseed-max")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 3 delta)
- (IF (== name "Kauldsbel")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 4 delta)
- (IF (== name "Kwyara")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 5 delta)
- (IF (== name "Ksagatha")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 6 delta)
- (IF (== name "Kmpotion")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 7 delta)
- (IF (== name "mseed-rumour")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 8 delta)
- (IF (== name "Kcuttree")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 9 delta)
- (IF (== name "cut")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 10 delta)
- (IF (== name "Kdruidtree")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 11 delta)
- (IF (== name "Kimp")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 12 delta)
- (IF (== name "oldwiz")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 13 delta)
- (IF (== name "made-conc")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 14 delta)
- (IF (== name "elanore-omar")
- (CALL debug_xmod "MAGIC_FLAGS" 0x1 15 delta)
- (IF (== name "auldsbel")
- (CALL debug_xmod "QUEST_MAGIC" 0x1f 0 delta)
- (IF (== name "Qauldsbel")
- (CALL debug_xmod "QUEST_MAGIC" 0x7 5 delta)
- (IF (== name "dt")
- (CALL debug_xmod "QUEST_MAGIC" 0x3 10 delta)
- (IF (== name "mb")
- (CALL debug_xmod "QUEST_MAGIC" 0x3 8 delta)
- (IF (== name "s-unhappy")
- (CALL debug_xmod "QUEST_MAGIC" 0xff 12 delta)
- (IF (== name "sagatha")
- (CALL debug_xmod "QUEST_MAGIC" 0xff 16 delta)
- (IF (== name "swords")
- (CALL debug_xmod "QUEST_MAGIC" 0xff 24 delta)
- (IF (== name "imp")
- (CALL debug_xmod "QUEST_MAGIC2" 0xf 0 delta)
- (IF (== name "elanore")
- (CALL debug_xmod "QUEST_MAGIC2" 0xf 4 delta)
- (IF (== name "wyara")
- (CALL debug_xmod "QUEST_MAGIC2" 0xf 8 delta)
- (IF (== name "elanore-sub")
- (CALL debug_xmod "QUEST_MAGIC2" 0xf 12 delta)
- (message caster "Unknown"))))))))))))))))))))))))))))))))
-
-(SPELL () debug-up1 "debug+1" (STRING name)
- (=>
- (REQUIRE DEBUG)
- (EFFECT
- (CALL debug_mod name 1))))
-
-(SPELL () debug-down1 "debug-1" (STRING name)
- (=>
- (REQUIRE DEBUG)
- (EFFECT
- (CALL debug_mod name
- (- 0 1)))))
-
-(SPELL () debug-up16 "debug+16" (STRING name)
- (=>
- (REQUIRE DEBUG)
- (EFFECT
- (CALL debug_mod name 16))))
-
-(SPELL () debug-down16 "debug-16" (STRING name)
- (=>
- (REQUIRE DEBUG)
- (EFFECT
- (CALL debug_mod name
- (- 0 16)))))
-
-(SPELL () debug-up256 "debug+256" (STRING name)
- (=>
- (REQUIRE DEBUG)
- (EFFECT
-
- (CALL debug_mod name 256))))
-(SPELL () debug-down256 "debug-256" (STRING name)
- (=>
- (REQUIRE DEBUG)
- (EFFECT
- (CALL debug_mod name
- (- 0 256)))))
-
-(SPELL () debug-reset "debug-reset" ()
- (=>
- (REQUIRE DEBUG)
- (EFFECT
- (set_script_variable caster "QUEST_MAGIC"
- 0)
- (set_script_variable caster "QUEST_MAGIC2"
- 0)
- (set_script_variable caster "MAGIC_FLAGS"
- 0)
- (set_script_variable caster "MAGIC_EXP"
- 0))))
diff --git a/world/map/conf/magic-level0.sex b/world/map/conf/magic-level0.sex
new file mode 100644
index 00000000..f376b2cd
--- /dev/null
+++ b/world/map/conf/magic-level0.sex
@@ -0,0 +1,39 @@
+"--------------------------------------------------------------------------------"
+" Level 0 spells "
+"--------------------------------------------------------------------------------"
+(SPELL () wand "#confringo" ()
+ (LET school MAGIC)
+ (=>
+ (GUARD
+ (CASTTIME 500))
+ (EFFECT
+ (SCRIPT "{callfunc \"CheckWand\";}")
+ (IF (==
+ (script_int caster "@Wand")
+ 0)
+ (ABORT))
+ (CALL adjust_spellpower school)
+ (CALL default_effect)
+ (CALL install_attack_spell
+ (+ (script_int caster "@Wand")
+ (/ spellpower 10))
+ 1200
+ 3
+ (script_int caster "@WandID"))
+ (CALL gain_xp 1 3)
+ (ATTRIGGER
+ (CALL attack_check target)
+ (SCRIPT "{callfunc \"WandMana\";}")
+ (IF (==
+ (script_int caster "@WandAttack")
+ 0)
+ (ABORT))
+ (SET damage
+ (* (script_int caster "@Wand")
+ (/ spellpower
+ 3)))
+ (SET damage_bonus
+ (* (script_int caster "@Wand")
+ (/ spellpower
+ 3)))
+ (CALL elt_damage target damage damage_bonus ELT_NEUTRAL ELT_NEUTRAL 5)))))
diff --git a/world/map/conf/magic-level1.sex b/world/map/conf/magic-level1.sex
index af34d27a..9ca79f3b 100644
--- a/world/map/conf/magic-level1.sex
+++ b/world/map/conf/magic-level1.sex
@@ -1,54 +1,15 @@
"--------------------------------------------------------------------------------"
-"Level 0 spells"
+" Level 1 spells "
"--------------------------------------------------------------------------------"
-(SPELL () wand "#confringo" ()
- (LET school MAGIC)
- (=>
- (GUARD
- (CASTTIME 500))
- (EFFECT
- (CALL fightclub_check 0 0)
- (SCRIPT "{callfunc \"CheckWand\";}")
- (IF (==
- (script_int caster "@Wand")
- 0)
- (ABORT))
- (CALL adjust_spellpower school)
- (CALL default_effect)
- (CALL install_attack_spell
- (+ (script_int caster "@Wand")
- (/ spellpower 10))
- 1200
- 3
- (script_int caster "@WandID"))
- (CALL gain_xp 1 3)
- (ATTRIGGER
- (CALL attack_check target)
- (SCRIPT "{callfunc \"WandMana\";}")
- (IF (==
- (script_int caster "@WandAttack")
- 0)
- (ABORT))
- (SET damage
- (* (script_int caster "@Wand")
- (/ spellpower
- 3)))
- (SET damage_bonus
- (* (script_int caster "@Wand")
- (/ spellpower
- 3)))
- (CALL elt_damage target damage damage_bonus ELT_NEUTRAL ELT_NEUTRAL 5))
-)))
-
(SPELL () ask-magic-exp "#abizit" ()
- (LET level 0)
+ (LET level 1)
(LET school MAGIC)
(=>
(GUARD
(MANA 1)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level)))
(EFFECT
@@ -120,14 +81,14 @@
(message caster "You feel completely overwhelmed by your magic."))))))))))))))))))
(SPELL () transmute-wood-to-figurine "#parum" (STRING name)
- (LET level 0)
+ (LET level 1)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 5)
(CASTTIME 4000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(COMPONENTS "RawLog"))
@@ -150,14 +111,14 @@
(message caster "You have no idea what a Skrytlurk looks like."))))))
(SPELL () make-sulphur "#gole" ()
- (LET level 0)
+ (LET level 1)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 4)
(CASTTIME 4000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(COMPONENTS "PileOfAsh"))
@@ -178,14 +139,14 @@
(CALL gain_xp 1 1))))
(SPELL () lesser-heal "#lum" (STRING target)
- (LET level 0)
+ (LET level 1)
(LET school LIFE)
(=>
(GUARD
(MANA 6)
(CASTTIME 500)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
@@ -203,7 +164,6 @@
(GUARD
(COMPONENTS "Lifestone")))
(EFFECT
- (CALL fightclub_check 1 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(IF (failed
@@ -246,14 +206,14 @@
(CALL gain_xp 1 2))))
(SPELL () flare-dart "#flar" ()
- (LET level 0)
+ (LET level 1)
(LET school WAR)
(=>
(GUARD
(MANA 10)
(CASTTIME 500)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(GUARD
@@ -264,7 +224,6 @@
2))
(COMPONENTS "SulphurPowder"))))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(SET damage
@@ -287,21 +246,20 @@
(CALL elt_damage target damage damage_bonus ELT_WATER ELT_FIRE 15)))))
(SPELL () magic-blade "#chiza" ()
- (LET level 0)
+ (LET level 1)
(LET school WAR)
(=>
(GUARD
(MANA 9)
(CASTTIME 500)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level)))
(|
(=>
(COMPONENTS "SharpKnife")
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower WAR)
(CALL default_effect)
(CALL install_melee_spell
@@ -317,7 +275,6 @@
(=>
(COMPONENTS "Knife")
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower WAR)
(CALL default_effect)
(CALL install_melee_spell
@@ -332,14 +289,14 @@
(str caster)))))))))
(SPELL () aggravate "#itenplz" ()
- (LET level 0)
+ (LET level 1)
(LET school NATURE)
(=>
(GUARD
(MANA 3)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level)))
(EFFECT
@@ -358,19 +315,18 @@
(aggravate target 0 caster)))))))
(SPELL () grow-mauve "#modrilax" ()
- (LET level 0)
+ (LET level 1)
(LET school NATURE)
(=>
(GUARD
(MANA 4)
(CASTTIME 2000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(COMPONENTS "MauveHerb" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 1 6)
@@ -388,19 +344,18 @@
school))))
(SPELL () grow-alizarin "#modriphoo" ()
- (LET level 0)
+ (LET level 1)
(LET school NATURE)
(=>
(GUARD
(MANA 4)
(CASTTIME 2000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(COMPONENTS "AlizarinHerb" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 1 7)
@@ -418,19 +373,18 @@
school))))
(SPELL () grow-gamboge "#modriyikam" ()
- (LET level 0)
+ (LET level 1)
(LET school NATURE)
(=>
(GUARD
(MANA 4)
(CASTTIME 2000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(COMPONENTS "GambogeHerb" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 1 8)
@@ -448,19 +402,18 @@
school))))
(SPELL () grow-cobalt "#modrisump" ()
- (LET level 0)
+ (LET level 1)
(LET school NATURE)
(=>
(GUARD
(MANA 4)
(CASTTIME 2000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(COMPONENTS "CobaltHerb" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 1 9)
@@ -478,19 +431,18 @@
school))))
(SPELL (LOCAL) summon-maggots "#kalmurk" ()
- (LET level 0)
+ (LET level 1)
(LET school ASTRAL)
(=>
(GUARD
(MANA 21)
(CASTTIME 20000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(COMPONENTS "MaggotSlime" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL gain_xp 1 10)
(CALL summon_spell 1002
@@ -508,14 +460,14 @@
school))))
(SPELL () detect-magic "#miteyo" ()
- (LET level 0)
+ (LET level 1)
(LET school MAGIC)
(=>
(GUARD
(MANA 3)
(CASTTIME 6000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level)))
(EFFECT
diff --git a/world/map/conf/magic-level2.sex b/world/map/conf/magic-level2.sex
index 70a37163..dcc2deb7 100644
--- a/world/map/conf/magic-level2.sex
+++ b/world/map/conf/magic-level2.sex
@@ -1,19 +1,19 @@
"--------------------------------------------------------------------------------"
-"Level 1 spells"
+" Level 2 spells "
"--------------------------------------------------------------------------------"
(SPELL () make-arrows "#kularzufrill" ()
- (LET level 1)
+ (LET level 2)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 8)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "RawLog"))
@@ -34,18 +34,18 @@
(CALL gain_xp 1 11))))
(SPELL () make-shirt "#patmuploo" ()
- (LET level 1)
+ (LET level 2)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 25)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS
@@ -57,18 +57,18 @@
(CALL gain_xp 2 12))))
(SPELL () make-tanktop "#patloree" ()
- (LET level 1)
+ (LET level 2)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 25)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS
@@ -80,18 +80,18 @@
(CALL gain_xp 2 13))))
(SPELL () make-short-tanktop "#patviloree" ()
- (LET level 1)
+ (LET level 2)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 25)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS
@@ -103,18 +103,18 @@
(CALL gain_xp 2 14))))
(SPELL () make-iron-powder "#zukminbirf" ()
- (LET level 1)
+ (LET level 2)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 8)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "IronOre"))
@@ -135,18 +135,18 @@
(CALL gain_xp 3 15))))
(SPELL () make-concentration-potion "#loshira" ()
- (LET level 1)
+ (LET level 2)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 8)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "BottleOfWater"
@@ -174,18 +174,18 @@
(CALL gain_xp 4 16))))
(SPELL () merge-concentration-potions "#skrimp" ()
- (LET level 1)
+ (LET level 2)
(LET school TRANSMUTE)
(=>
(GUARD
(MANA 8)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "DarkConcentrationPotion" "DilutedConcentrationPot"))
@@ -200,7 +200,7 @@
(CALL gain_xp 4 17))))
(SPELL () lay-on-hands "#inma" (STRING target)
- (LET level 1)
+ (LET level 2)
(LET school LIFE)
(=>
(GUARD
@@ -213,23 +213,14 @@
(max_hp caster)
20)))
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(REQUIRE
- (== (if_then_else (failed (pc target))
- 1
- (not
- (is_in (location (pc target))
- (@+
- (@ "009-7" (script_int caster "$@fightclub_x1") (script_int caster "$@fightclub_y1"))
- (+ (- (script_int caster "$@fightclub_x2") (script_int caster "$@fightclub_x1")) 1)
- (+ (- (script_int caster "$@fightclub_y2") (script_int caster "$@fightclub_y1")) 1))))) 1))
- (REQUIRE
(if_then_else
(failed
(pc target))
@@ -326,11 +317,11 @@
(max_hp caster)
20)
-1))
- (IF (>
+ (IF (>=
(skill caster school)
level)
(itemheal caster h 0))
- (IF (>
+ (IF (>=
(skill caster school)
level)
(SET t 10000))
@@ -341,29 +332,28 @@
18))))
(SPELL () lightning-strike "#ingrav" ()
- (LET level 1)
+ (LET level 2)
(LET school WAR)
(=>
(GUARD
(MANA 20)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(GUARD
(OR
(REQUIRE
- (>
- (skill caster school)
- 3))
+ (>=
+ (skill caster school) "The spell is free at magic lv 4"
+ 4))
(COMPONENTS "IronPowder"))))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(SET damage spellpower)
(SET damage_bonus
@@ -443,18 +433,18 @@
(random 3))))))))
(SPELL (LOCAL) arrow-hail "#frillyar" ()
- (LET level 1)
+ (LET level 2)
(LET school WAR)
(=>
(GUARD
(MANA 25)
(CASTTIME 5000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(REQUIRE
@@ -544,18 +534,18 @@
(random 50))))))))
(SPELL () magic-knuckles "#upmarmu" ()
- (LET level 1)
+ (LET level 2)
(LET school WAR)
(=>
(GUARD
(MANA 20)
(CASTTIME 500)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(GUARD
@@ -566,7 +556,6 @@
3))
(COMPONENTS "Beer"))))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower WAR)
(SET str
(str caster))
@@ -581,18 +570,18 @@
(* str 2)))))))
(SPELL (LOCAL) summon-snakes "#halhiss" ()
- (LET level 1)
+ (LET level 2)
(LET school DARK)
(=>
(GUARD
(MANA 40)
(CASTTIME 15000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(REQUIRE
@@ -601,7 +590,6 @@
40))
(COMPONENTS "DarkCrystal" "SnakeEgg"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 3 31)
@@ -615,7 +603,7 @@
school))))
(SPELL () toxic-dart "#phlex" ()
- (LET level 1)
+ (LET level 2)
(LET school DARK)
(=>
(GUARD
@@ -626,19 +614,18 @@
(script_int caster "OrumQuest")
37))
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(GUARD
(OR
(REQUIRE
- (>
+ (>=
(skill caster school)
- 2))
+ 3))
(COMPONENTS
(2 "Root")))))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(SET damage
@@ -673,14 +660,14 @@
(* spellpower 1200))))))))
(SPELL (LOCAL) summon-wickedmushroom "#helorp" ()
- (LET level 1)
+ (LET level 2)
(LET school DARK)
(=>
(GUARD
(MANA 35)
(CASTTIME 15000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
@@ -688,12 +675,11 @@
(script_int caster "OrumQuest")
36))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "SmallMushroom" "DarkCrystal"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 3 36)
@@ -707,18 +693,18 @@
school))))
(SPELL () flying-backpack "#plugh" (PC target)
- (LET level 1)
+ (LET level 2)
(LET school NATURE)
(=>
(GUARD
(MANA 12)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(GUARD
@@ -736,7 +722,6 @@
(+ 2
(/ spellpower 30)))))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(IF (!= caster target)
@@ -751,18 +736,18 @@
(sfx target 2 0)))))
(SPELL () protect "#betsanc" (PC target)
- (LET level 1)
+ (LET level 2)
(LET school NATURE)
(=>
(GUARD
(MANA 14)
(CASTTIME 1500)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(REQUIRE
@@ -773,9 +758,9 @@
(GUARD
(OR
(REQUIRE
- (>
+ (>=
(skill caster school)
- 3))
+ 4))
(COMPONENTS "HardSpike")))
(REQUIRE
(<
@@ -785,7 +770,6 @@
(+ 2
(/ spellpower 30)))))
(EFFECT
- (CALL fightclub_check 0 1)
(CALL adjust_spellpower school)
(sfx target 11 0)
(IF (!= caster target)
@@ -806,18 +790,18 @@
(sfx target 111 0)))))
(SPELL () happy-curse "#joyplim" (PC target)
- (LET level 1)
+ (LET level 2)
(LET school NATURE)
(=>
(GUARD
(MANA 13)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(GUARD
@@ -853,18 +837,18 @@
(CALL gain_xp 1 23))))
(SPELL (LOCAL) rain "#kaflosh" ()
- (LET level 1)
+ (LET level 2)
(LET school NATURE)
(=>
(GUARD
(MANA 17)
(CASTTIME 3000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(REQUIRE
@@ -873,9 +857,9 @@
(GUARD
(OR
(REQUIRE
- (>
+ (>=
(skill caster school)
- 3))
+ 4))
(COMPONENTS "BottleOfWater"))))
(EFFECT
(CALL adjust_spellpower school)
@@ -915,6 +899,7 @@
(SCRIPT "{
set @flag, 1;
callfunc \"QuestTreeTrigger\";
+ close;
}"))
(IF (is_in
(location caster)
@@ -984,18 +969,18 @@
(+ prob3 prob))))))
(SPELL () shear "#chipchip" ()
- (LET level 1)
+ (LET level 2)
(LET school NATURE)
(=>
(GUARD
(MANA 23)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level)))
(EFFECT
@@ -1043,18 +1028,18 @@
}"))))))))
(SPELL () barrier "#asorm" (PC target)
- (LET level 1)
+ (LET level 2)
(LET school ASTRAL)
(=>
(GUARD
(MANA 16)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(REQUIRE
@@ -1077,7 +1062,6 @@
(+ 2
(/ spellpower 30)))))
(EFFECT
- (CALL fightclub_check 0 1)
(CALL adjust_spellpower school)
(sfx target SFX_BARRIER 0)
(IF (!= caster target)
@@ -1098,23 +1082,22 @@
(sfx target SFX_UNBARRIER 0)))))
(SPELL (LOCAL) summon-spiky-mushrooms "#kalrenk" ()
- (LET level 1)
+ (LET level 2)
(LET school ASTRAL)
(=>
(GUARD
(MANA 33)
(CASTTIME 20000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "HardSpike" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 1 26)
@@ -1128,23 +1111,22 @@
school))))
(SPELL (LOCAL) summon-fluffies "#kalakarenk" ()
- (LET level 1)
+ (LET level 2)
(LET school ASTRAL)
(=>
(GUARD
(MANA 39)
(CASTTIME 20000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "WhiteFur" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 1 27)
@@ -1160,23 +1142,22 @@
school))))
(SPELL (LOCAL) summon-mouboo "#kalboo" ()
- (LET level 1)
+ (LET level 2)
(LET school ASTRAL)
(=>
(GUARD
(MANA 35)
(CASTTIME 20000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "MoubooFigurine" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 2 37)
@@ -1190,23 +1171,22 @@
school))))
(SPELL (LOCAL) summon-pinkie "#kalgina" ()
- (LET level 1)
+ (LET level 2)
(LET school ASTRAL)
(=>
(GUARD
(MANA 35)
(CASTTIME 20000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(COMPONENTS "PinkAntenna" "Root"))
(EFFECT
- (CALL fightclub_check 0 0)
(CALL adjust_spellpower school)
(CALL default_effect)
(CALL gain_xp 2 38)
@@ -1220,18 +1200,18 @@
school))))
(SPELL () detect-players "#inwilt" ()
- (LET level 1)
+ (LET level 2)
(LET school MAGIC)
(=>
(GUARD
(MANA 7)
(CASTTIME 300)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level)))
(EFFECT
@@ -1271,18 +1251,18 @@
(+ "You sense the following: " message))))))
(SPELL () enchant-lifestone "#manpahil" ()
- (LET level 1)
+ (LET level 2)
(LET school MAGIC)
(=>
(GUARD
(MANA 15)
(CASTTIME 4000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(GUARD
@@ -1298,18 +1278,18 @@
(CALL gain_xp 1 28))))
(SPELL () sense-spouse "#inzuwilt" ()
- (LET level 1)
+ (LET level 2)
(LET school MAGIC)
(=>
(GUARD
(MANA 7)
(CASTTIME 400)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(REQUIRE
@@ -1430,18 +1410,18 @@
"."))))))))))
(SPELL () hide "#anwiltyp" (PC target)
- (LET level 1)
+ (LET level 2)
(LET school ASTRAL)
(=>
(GUARD
(MANA 11)
(CASTTIME 1000)
(REQUIRE
- (>
+ (>=
(skill caster MAGIC)
level))
(REQUIRE
- (>
+ (>=
(skill caster school)
level))
(GUARD
diff --git a/world/map/conf/magic-level3.sex b/world/map/conf/magic-level3.sex
index d53f1a19..5d4d7374 100644
--- a/world/map/conf/magic-level3.sex
+++ b/world/map/conf/magic-level3.sex
@@ -1,177 +1,179 @@
"--------------------------------------------------------------------------------"
-"Level 2 spells"
+" Level 3 spells "
"--------------------------------------------------------------------------------"
-(SPELL () cure-poison "#anju" (PC target)
- (LET level 2)
- (LET school LIFE)
- (=>
- (GUARD
- (MANA 15)
- (CASTTIME 1000)
- (REQUIRE
- (>
- (skill caster MAGIC)
- level))
- (REQUIRE
- (>
- (skill caster school)
- level))
- (REQUIRE
- (<
- (rdistance
- (location caster)
- (location
- (pc target)))
- (+ 1
- (/ spellpower 60))))
- (COMPONENTS "GambogeHerb"))
- (EFFECT
- (CALL adjust_spellpower school)
- (CALL default_effect)
- (IF (running_status_update target SC_POISON)
- (BLOCK
- (CALL gain_heal_xp 40 1 2 2)
- (stop_status_change target SC_POISON)
- (CALL gain_xp 2 30)
- (IF (!= caster target)
- (sfx target SFX_HEAL 0)))))))
+(DISABLED
+ (SPELL () cure-poison "#anju" (PC target)
+ (LET level 3)
+ (LET school LIFE)
+ (=>
+ (GUARD
+ (MANA 15)
+ (CASTTIME 1000)
+ (REQUIRE
+ (>=
+ (skill caster MAGIC)
+ level))
+ (REQUIRE
+ (>=
+ (skill caster school)
+ level))
+ (REQUIRE
+ (<
+ (rdistance
+ (location caster)
+ (location
+ (pc target)))
+ (+ 1
+ (/ spellpower 60))))
+ (COMPONENTS "GambogeHerb"))
+ (EFFECT
+ (CALL adjust_spellpower school)
+ (CALL default_effect)
+ (IF (running_status_update target SC_POISON)
+ (BLOCK
+ (CALL gain_heal_xp 40 1 2 2)
+ (stop_status_change target SC_POISON)
+ (CALL gain_xp 2 30)
+ (IF (!= caster target)
+ (sfx target SFX_HEAL 0))))))))
-(SPELL () fire-ball "#flarfol" ()
- (LET level 2)
- (LET school WAR)
- (=>
- (GUARD
- (MANA 30)
- (CASTTIME 1000)
- (REQUIRE
- (>
- (skill caster MAGIC)
- level))
- (REQUIRE
- (>
- (skill caster school)
- level))
- (COMPONENTS "PileOfAsh"))
- (EFFECT
- (CALL fightclub_check 0 0)
- (CALL adjust_spellpower school)
- (SET damage
- (min
- (+ 50
- (*
- (skill caster school)
- 40))
- (+ 30
- (/
- (* spellpower 3)
- 2))))
- (SET damage_bonus
- (+
- (level caster)
- (* spellpower 2)))
- (SET radius
- (+ 2
- (/ spellpower 50)))
- (CALL install_attack_spell
- (+ 1
- (/ spellpower 60))
- 5000
- 10
- 31)
- (ATTRIGGER
- (CALL attack_check target)
- (SET loc
- (location target))
- (DISABLED (WAIT 500))
- (sfx loc 16 0)
- (FOREACH TARGET target
- (rbox loc radius)
- (IF (line_of_sight loc
- (location target))
- (BLOCK
- (SET divisor
- (+ 3
- (rdistance loc
- (location target))))
- (CALL elt_damage target
- (/
- (* damage 3)
- divisor)
- (/
- (* damage_bonus 3)
- divisor)
- ELT_WATER
- ELT_FIRE
- 15))))))))
+(DISABLED
+ (SPELL () fire-ball "#flarfol" ()
+ (LET level 3)
+ (LET school WAR)
+ (=>
+ (GUARD
+ (MANA 30)
+ (CASTTIME 1000)
+ (REQUIRE
+ (>=
+ (skill caster MAGIC)
+ level))
+ (REQUIRE
+ (>=
+ (skill caster school)
+ level))
+ (COMPONENTS "PileOfAsh"))
+ (EFFECT
+ (CALL adjust_spellpower school)
+ (SET damage
+ (min
+ (+ 50
+ (*
+ (skill caster school)
+ 40))
+ (+ 30
+ (/
+ (* spellpower 3)
+ 2))))
+ (SET damage_bonus
+ (+
+ (level caster)
+ (* spellpower 2)))
+ (SET radius
+ (+ 2
+ (/ spellpower 50)))
+ (CALL install_attack_spell
+ (+ 1
+ (/ spellpower 60))
+ 5000
+ 10
+ 31)
+ (ATTRIGGER
+ (CALL attack_check target)
+ (SET loc
+ (location target))
+ (DISABLED (WAIT 500))
+ (sfx loc 16 0)
+ (FOREACH TARGET target
+ (rbox loc radius)
+ (IF (line_of_sight loc
+ (location target))
+ (BLOCK
+ (SET divisor
+ (+ 3
+ (rdistance loc
+ (location target))))
+ (CALL elt_damage target
+ (/
+ (* damage 3)
+ divisor)
+ (/
+ (* damage_bonus 3)
+ divisor)
+ ELT_WATER
+ ELT_FIRE
+ 15)))))))))
-(SPELL () summon-partner "#kalzumin" ()
- (LET level 2)
- (LET school ASTRAL)
- (=>
- (GUARD
- (MANA 30)
- (CASTTIME 2000)
- (REQUIRE
- (>
- (skill caster MAGIC)
- level))
- (REQUIRE
- (>
- (skill caster school)
- level))
- (REQUIRE
- (is_married caster))
- (REQUIRE
- (is_equipped caster "WeddingRing")))
- (EFFECT
- (CALL adjust_spellpower school)
- (CALL default_effect)
- (IF (failed
- (partner caster))
- (message caster "You call out for your partner, but there is no response.")
- (BLOCK
- (message caster
- (+
- (+ "You call out for "
- (name_of
- (partner caster)))
- "."))
- (message
- (partner caster)
- (+
- (name_of caster)
- " is calling for your aid!"))
- (sfx
- (partner caster)
- 2
- 0)
- (WAIT
- (max 5000
- (- 30000
- (* spellpower 60))))
- (IF (failed
- (partner caster))
- (message caster "Your partner has abandoned you.")
- (IF (is_dead
+(DISABLED
+ (SPELL () summon-partner "#kalzumin" ()
+ (LET level 3)
+ (LET school ASTRAL)
+ (=>
+ (GUARD
+ (MANA 30)
+ (CASTTIME 2000)
+ (REQUIRE
+ (>=
+ (skill caster MAGIC)
+ level))
+ (REQUIRE
+ (>=
+ (skill caster school)
+ level))
+ (REQUIRE
+ (is_married caster))
+ (REQUIRE
+ (is_equipped caster "WeddingRing")))
+ (EFFECT
+ (CALL adjust_spellpower school)
+ (CALL default_effect)
+ (IF (failed
+ (partner caster))
+ (message caster "You call out for your partner, but there is no response.")
+ (BLOCK
+ (message caster
+ (+
+ (+ "You call out for "
+ (name_of
+ (partner caster)))
+ "."))
+ (message
+ (partner caster)
+ (+
+ (name_of caster)
+ " is calling for your aid!"))
+ (sfx
+ (partner caster)
+ 2
+ 0)
+ (WAIT
+ (max 5000
+ (- 30000
+ (* spellpower 60))))
+ (IF (failed
(partner caster))
- (message caster
- (+
- (+ "Something seems to have happened to "
- (name_of
- (partner caster)))
- "."))
- (BLOCK
- (sfx
- (location
- (partner caster))
- SFX_TELEPORT
- 0)
- (SET dest
- (awayfrom
- (location caster)
- (random_dir 1)
- 1))
- (warp
- (partner caster)
- dest)
- (sfx dest SFX_TELEPORT 0)))))))))
+ (message caster "Your partner has abandoned you.")
+ (IF (is_dead
+ (partner caster))
+ (message caster
+ (+
+ (+ "Something seems to have happened to "
+ (name_of
+ (partner caster)))
+ "."))
+ (BLOCK
+ (sfx
+ (location
+ (partner caster))
+ SFX_TELEPORT
+ 0)
+ (SET dest
+ (awayfrom
+ (location caster)
+ (random_dir 1)
+ 1))
+ (warp
+ (partner caster)
+ dest)
+ (sfx dest SFX_TELEPORT 0))))))))))
diff --git a/world/map/conf/magic-level4.sex b/world/map/conf/magic-level4.sex
index f46e7454..f04092f4 100644
--- a/world/map/conf/magic-level4.sex
+++ b/world/map/conf/magic-level4.sex
@@ -1,3 +1,3 @@
"--------------------------------------------------------------------------------"
-"Level 3 spells"
+" Level 4 spells "
"--------------------------------------------------------------------------------"
diff --git a/world/map/conf/magic-level5.sex b/world/map/conf/magic-level5.sex
index 6a7093e5..056c9e50 100644
--- a/world/map/conf/magic-level5.sex
+++ b/world/map/conf/magic-level5.sex
@@ -1,53 +1,55 @@
"--------------------------------------------------------------------------------"
-"Level 4 spells"
+" Level 5 spells "
"--------------------------------------------------------------------------------"
-(SPELL () shroud "#anwilvimar" ()
- (LET level 4)
- (LET school NATURE)
- (=>
- (GUARD
- (MANA 40)
- (CASTTIME 400)
- (REQUIRE
- (>
- (skill caster MAGIC)
- level))
- (REQUIRE
- (>
- (skill caster school)
- level)))
- (EFFECT
- (CALL default_effect)
- (shroud caster 0x04))))
+(DISABLED
+ (SPELL () shroud "#anwilvimar" ()
+ (LET level 5)
+ (LET school NATURE)
+ (=>
+ (GUARD
+ (MANA 40)
+ (CASTTIME 400)
+ (REQUIRE
+ (>=
+ (skill caster MAGIC)
+ level))
+ (REQUIRE
+ (>=
+ (skill caster school)
+ level)))
+ (EFFECT
+ (CALL default_effect)
+ (shroud caster 0x04)))))
-(SPELL () teleport "#vorp" (STRING destination)
- (LET level 4)
- (LET school ASTRAL)
- (=>
- (GUARD
- (MANA 80)
- (CASTTIME 400)
- (DISABLED (COMPONENT "EtherEssence"))
- (DISABLED (CATALYST "TeleportCrystal"))
- (REQUIRE
- (>
- (skill caster MAGIC)
- level))
- (REQUIRE
- (>
- (skill caster school)
- level)))
- (EFFECT
- (CALL default_effect)
- (WAIT
- (+ 1000
- (/ 200000
- (+ spellpower 10))))
- (sfx
- (location caster)
- SFX_TELEPORT
- 200)
- (warp caster
- (random_location
- (anchor destination)))
- (sfx caster SFX_TELEPORT 200))))
+(DISABLED
+ (SPELL () teleport "#vorp" (STRING destination)
+ (LET level 5)
+ (LET school ASTRAL)
+ (=>
+ (GUARD
+ (MANA 80)
+ (CASTTIME 400)
+ (COMPONENT "EtherEssence")
+ (CATALYSTS "TeleportCrystal")
+ (REQUIRE
+ (>=
+ (skill caster MAGIC)
+ level))
+ (REQUIRE
+ (>=
+ (skill caster school)
+ level)))
+ (EFFECT
+ (CALL default_effect)
+ (WAIT
+ (+ 1000
+ (/ 200000
+ (+ spellpower 10))))
+ (sfx
+ (location caster)
+ SFX_TELEPORT
+ 200)
+ (warp caster
+ (random_location
+ (anchor destination)))
+ (sfx caster SFX_TELEPORT 200)))))
diff --git a/world/map/conf/magic-misc.sex b/world/map/conf/magic-misc.sex
index 2e4942b7..15672f4c 100644
--- a/world/map/conf/magic-misc.sex
+++ b/world/map/conf/magic-misc.sex
@@ -1,5 +1,5 @@
"--------------------------------------------------------------------------------"
-"Special-purpose quasispells"
+" Special-purpose quasispells "
"--------------------------------------------------------------------------------"
(SPELL (NONMAGIC) dueloff "#dueloff" ()
(=>
@@ -166,48 +166,47 @@
(name_of target)
" turned down your marriage offer."))))))
-(SPELL (LOCAL) mouboo-groan "#g" ()
- (=>
- (GUARD
- (MANA 1)
- (REQUIRE
- (==
- (name_of caster)
- "MOUBOOTAUR")))
- (EFFECT
- (FOREACH PC p
- (rbox
- (location caster)
- 200)
- (SET distance
- (rdistance
+(DISABLED
+ (SPELL (LOCAL) mouboo-groan "#g" ()
+ (=>
+ (GUARD
+ (MANA 1)
+ (REQUIRE
+ (==
+ (name_of caster)
+ "MOUBOOTAUR")))
+ (EFFECT
+ (FOREACH PC p
+ (rbox
(location caster)
- (location p))))
- (IF (< distance 15)
- (message p "The moubootaur's groaning rings in your ears!")
- (IF (< distance 70)
- (message p "You hear a loud groaning noise, not far away...")
- (message p "You hear an odd groaning noise in the distance..."))))))
+ 200)
+ (SET distance
+ (rdistance
+ (location caster)
+ (location p))))
+ (IF (< distance 15)
+ (message p "The moubootaur's groaning rings in your ears!")
+ (IF (< distance 70)
+ (message p "You hear a loud groaning noise, not far away...")
+ (message p "You hear an odd groaning noise in the distance...")))))))
-(SPELL (LOCAL) mouboo-smell "#s" ()
- (=>
- (GUARD
- (MANA 1)
- (REQUIRE
- (==
- (name_of caster)
- "MOUBOOTAUR")))
- (EFFECT
- (WAIT 30000)
- (FOREACH PC p
- (rbox
- (location caster)
- 30)
- (message p "You notice a strange smell all around you.")))))
+(DISABLED
+ (SPELL (LOCAL) mouboo-smell "#s" ()
+ (=>
+ (GUARD
+ (MANA 1)
+ (REQUIRE
+ (==
+ (name_of caster)
+ "MOUBOOTAUR")))
+ (EFFECT
+ (WAIT 30000)
+ (FOREACH PC p
+ (rbox
+ (location caster)
+ 30)
+ (message p "You notice a strange smell all around you."))))))
-"--------------------------------------------------------------------------------"
-"Kill the GM event spell"
-"--------------------------------------------------------------------------------"
(SPELL (NONMAGIC) killgm0 "#pullrabbit" ()
(=>
(REQUIRE
diff --git a/world/map/conf/magic-procedures.sex b/world/map/conf/magic-procedures.sex
index 6157765d..ea62f50f 100644
--- a/world/map/conf/magic-procedures.sex
+++ b/world/map/conf/magic-procedures.sex
@@ -280,37 +280,6 @@
(PROCEDURE install_melee_spell (charges base_delay attack_animation)
(CALL install_attack_spell charges base_delay 1 attack_animation))
-(PROCEDURE fightclub_check (onSelf onTarget)
- (IF (&&
- (is_in (location caster)
- (@+
- (@ "009-7" (script_int caster "$@fightclub_x1") (script_int caster "$@fightclub_y1"))
- (+ (- (script_int caster "$@fightclub_x2") (script_int caster "$@fightclub_x1")) 1)
- (+ (- (script_int caster "$@fightclub_y2") (script_int caster "$@fightclub_y1")) 1)))
- (||
- (== (script_int caster "$@Duel_NoMagic") 1)
- (!= (script_int caster "@Duel_Fighter") 1)))
- (ABORT))
- (IF (== onSelf 1)
- (IF (&&
- (== (substr (location caster) 2 5) "009-7")
- (not
- (is_in (location caster)
- (@+
- (@ "009-7" (script_int caster "$@fightclub_x1") (script_int caster "$@fightclub_y1"))
- (+ (- (script_int caster "$@fightclub_x2") (script_int caster "$@fightclub_x1")) 1)
- (+ (- (script_int caster "$@fightclub_y2") (script_int caster "$@fightclub_y1")) 1)))))
- (ABORT)))
- (IF (== onTarget 1)
- (IF (&&
- (!= (pc target) caster)
- (is_in (location (pc target))
- (@+
- (@ "009-7" (script_int caster "$@fightclub_x1") (script_int caster "$@fightclub_y1"))
- (+ (- (script_int caster "$@fightclub_x2") (script_int caster "$@fightclub_x1")) 1)
- (+ (- (script_int caster "$@fightclub_y2") (script_int caster "$@fightclub_y1")) 1))))
- (ABORT))))
-
(PROCEDURE summon_spell (mob_id count delay lifetime control_level school)
(CALL default_effect)
(sfx location SFX_SUMMON_START 0)
diff --git a/world/map/conf/magic-quests.sex b/world/map/conf/magic-quests.sex
index ddc7302b..4b8a822c 100644
--- a/world/map/conf/magic-quests.sex
+++ b/world/map/conf/magic-quests.sex
@@ -19,6 +19,7 @@
(SCRIPT "{
set @flag, 2;
callfunc \"QuestTreeTrigger\";
+ close;
}")))
(SPELL (NONMAGIC) hug0 "hug" (STRING target)
diff --git a/world/map/conf/magic-quickdebug.sex b/world/map/conf/magic-quickdebug.sex
index 63ff5ada..1b5f582c 100644
--- a/world/map/conf/magic-quickdebug.sex
+++ b/world/map/conf/magic-quickdebug.sex
@@ -3,4 +3,8 @@
"--------------------------------------------------------------------------------"
(SPELL (NONMAGIC SILENT) debug0 "#debug" ()
(EFFECT
- (SCRIPT "{if(!debug)end;callfunc \"Debug\";}")))
+ (SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"Debug\";}")))
+
+(SPELL (NONMAGIC SILENT) debug1 "#numa" ()
+ (EFFECT
+ (SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"SuperDebug\";}")))
diff --git a/world/map/conf/map_athena.conf b/world/map/conf/map_athena.conf
index f0f59fd7..86f7f072 100644
--- a/world/map/conf/map_athena.conf
+++ b/world/map/conf/map_athena.conf
@@ -3,9 +3,6 @@
// Database autosave time, in seconds.
autosave_time: 60
-// Message of the day file, when a character logs on, this message is displayed.
-motd_txt: conf/motd.txt
-
mapreg_txt: save/mapreg.txt
import: npc/scripts.conf
diff --git a/world/map/conf/motd.txt.example b/world/map/conf/motd.txt.example
deleted file mode 100644
index 9c949dda..00000000
--- a/world/map/conf/motd.txt.example
+++ /dev/null
@@ -1,2 +0,0 @@
-Welcome to The Mana World! (running on tmwAthena)
-You can report abuse by typing in chat: @wgm Player XYZ is abusing me
diff --git a/world/map/conf/tmwa-map.conf b/world/map/conf/tmwa-map.conf
index 10dd615e..849779af 100644
--- a/world/map/conf/tmwa-map.conf
+++ b/world/map/conf/tmwa-map.conf
@@ -14,6 +14,8 @@ const_db: db/const-quest.txt
const_db: db/const-mapflags.txt
const_db: db/const-debugflag.txt
+quest_db: db/quest-log.txt
+
item_db: db/item_db_chest.txt
item_db: db/item_db_foot.txt
item_db: db/item_db_generic.txt
@@ -35,12 +37,12 @@ skill_db: db/skill_db.txt
magic_conf: conf/magic-config.sex
magic_conf: conf/magic-procedures.sex
+magic_conf: conf/magic-level0.sex
magic_conf: conf/magic-level1.sex
magic_conf: conf/magic-level2.sex
magic_conf: conf/magic-level3.sex
magic_conf: conf/magic-level4.sex
magic_conf: conf/magic-level5.sex
-magic_conf: conf/magic-debug.sex
magic_conf: conf/magic-misc.sex
magic_conf: conf/magic-quests.sex
magic_conf: conf/magic-anchors.sex
diff --git a/world/map/data/017-9.wlk b/world/map/data/017-9.wlk
index e83f810b..16fcf306 100644
--- a/world/map/data/017-9.wlk
+++ b/world/map/data/017-9.wlk
Binary files differ
diff --git a/world/map/data/020-1.wlk b/world/map/data/020-1.wlk
index 0ba1ddc7..b3b92058 100644
--- a/world/map/data/020-1.wlk
+++ b/world/map/data/020-1.wlk
Binary files differ
diff --git a/world/map/data/029-3.wlk b/world/map/data/029-3.wlk
index 235b703d..c9c173d8 100644
--- a/world/map/data/029-3.wlk
+++ b/world/map/data/029-3.wlk
Binary files differ
diff --git a/world/map/db/const.txt b/world/map/db/const.txt
index c00773e2..af5cc476 100644
--- a/world/map/db/const.txt
+++ b/world/map/db/const.txt
@@ -26,6 +26,12 @@ Weight 24 1
MaxWeight 25 1
//JobLevel 55 1
//Upper 56 1
+Str 13 1
+Agi 14 1
+Vit 15 1
+Int 16 1
+Dex 17 1
+Luk 18 1
// BEFORE UNCOMMENTING ANYTHING, TALK TO o11c!
bMaxHP 6
diff --git a/world/map/db/item_db_chest.txt b/world/map/db/item_db_chest.txt
index 3351257f..ac47d7b1 100644
--- a/world/map/db/item_db_chest.txt
+++ b/world/map/db/item_db_chest.txt
@@ -1,245 +1,245 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-523, LeatherShirt, Leather Shirt, 5, 2000, 1000, 20, 0, 4, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-546, DesertShirt, Desert Shirt, 5, 2000, 1000, 20, 0, 6, 0, -18, 0, 2, 512, 0, 0, 0, {}, {}
-564, Turtleneck, Turtleneck Sweater, 5, 2000, 1000, 30, 0, 6, 0, -18, 0, 2, 512, 0, 0, 0, {}, {}
-624, VNeckSweater, V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -24, 0, 2, 512, 0, 0, 0, {}, {}
-625, ChainmailShirt, Chainmail Shirt, 5, 15000, 1500, 800, 0, 20, 0, -120, 0, 2, 512, 0, 0, 0, {}, {}
-626, LightPlatemail, Light Platemail, 5, 50000, 2500, 1200, 0, 25, 0, -150, 0, 2, 512, 0, 0, 0, {}, {}
-645, GoldenPlatemail, Golden Platemail, 5, 9999000, 3000, 4500, 0, 25, 0, -100, 0, 2, 512, 0, 0, 0, {}, {}
-649, WhiteEvokersRobeBlue, White Evokers Robe Blue, 5, 8000, 4000, 5, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-650, BlackEvokersRobeBlue, Black Evokers Robe Blue, 5, 8000, 4000, 5, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-651, WhiteWizardRobe, White Wizard Robe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-652, BlackWizardRobe, Black Wizard Robe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-653, ApprenticeRobe, Apprentice Robe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-658, WarlordPlate, Warlord Plate, 5, 100000, 3000, 2600, 0, 27, 0, -170, 0, 2, 512, 0, 0, 0, {}, {}
-659, GoldenWarlordPlate, Golden Warlord Plate, 5, 500000, 4000, 7600, 0, 27, 0, -110, 0, 2, 512, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-688, TankTop, Tank Top, 5, 800, 400, 10, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-689, ShortTankTop, Short Tank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-720, SilkRobe, Silk Robe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-726, GMRobe, GM Robe, 5, 8000, 4000, 40, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {callfunc "RestrictedItem";}
-755, AssassinShirt, Assassin Shirt, 5, 10000, 3000, 15, 0, 10, 0, -5, 0, 2, 512, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 10;}
-767, TerraniteChestArmor, Terranite Chest Armor, 5, 100000, 3000, 800, 0, 20, 0, -70, 0, 2, 512, 0, 0, 0, {}, {bonus bDex, 1;bonus bMdef, 10;}
-782, ForestArmor, Forest Armor, 5, 3000, 1500, 40, 0, 10, 0, -20, 0, 2, 512, 0, 0, 0, {}, {bonus bDex, 3;}
-783, PlatynaRedDress, Platyna Red Dress, 5, 100000, 50000, 35, 0, 15, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-791, YetiSkinShirt, Yeti Skin Shirt, 5, 20000, 10000, 20, 0, 12, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-793, BromenalChest, Bromenal Chest, 5, 100000, 3000, 2000, 0, 25, 0, -170, 0, 2, 512, 0, 0, 0, {}, {}
-798, SorcererRed, Sorcerer Robe Red, 5, 8000, 4000, 5, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-870, FineDress, Fine Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-880, LazuriteRobe, Lazurite Robe, 5, 92000, 52000, 30, 0, 7, 0, 60, 0, 2, 512, 0, 90, 0, {}, {set @bStat, bInt;set @minbStatVal, 70;callfunc "RequireStat"; set @bStat, bVit;set @minbStatVal, 40;callfunc "RequireStat"; bonus bSpeedAddRate, -15; bonus bDef2Rate, -40; bonus bMdef, 60; bonus bVit, -1; bonus bInt, 7; bonus bLuk, -1; bonus bDex, -1; bonus bStr, -1;}
-1178, Contributor, ContributorShirt, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-1183, AmberChristmasSweater, Amber Christmas Sweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-1184, FunkyChristmasSweater, Funky Christmas Sweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-1185, PinkChristmasSweater, Pink Christmas Sweater, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-1186, DarkChristmasSweater, Dark Christmas Sweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-1187, BlueChristmasSweater, Blue Christmas Sweater, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-1202, CottonShirt, Cotton Shirt, 5, 300, 5, 13, 0, 2, 0, -2, 0, 2, 512, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2050, RedCottonShirt, Red Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2051, GreenCottonShirt, Green Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2052, DarkBlueCottonShirt, Dark Blue Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2053, YellowCottonShirt, Yellow Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2054, LightBlueCottonShirt, Light Blue Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2055, PinkCottonShirt, Pink Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2056, BlackCottonShirt, Black Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2057, OrangeCottonShirt, Orange Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2058, PurpleCottonShirt, Purple Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2059, DarkGreenCottonShirt, Dark Green Cotton Shirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2060, RedVNeckSweater, Red V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2061, GreenVNeckSweater, Green V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2062, DarkBlueVNeckSweater, Dark Blue V-Neck Sweate, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2063, YellowVNeckSweater, Yellow V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2064, LightBlueVNeckSweater, Light Blue V-Neck Sweat, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2065, PinkVNeckSweater, Pink V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2066, BlackVNeckSweater, Black V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2067, OrangeVNeckSweater, Orange V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2068, PurpleVNeckSweater, Purple V-Neck Sweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2069, DarkGreenVNeckSweater, Dark Green V-Neck Sweat, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
-2070, RedTurtleneck, Red Turtleneck Sweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2071, GreenTurtleneck, Green Turtleneck Sweate, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2072, DarkBlueTurtleneck, Dark Blue Turtleneck Sw, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2073, YellowTurtleneck, Yellow Turtleneck Sweat, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2074, LightBlueTurtleneck, Light Blue Turtleneck S, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2075, PinkTurtleneck, Pink Turtleneck Sweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2076, BlackTurtleneck, Black Turtleneck Sweate, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2077, OrangeTurtleneck, Orange Turtleneck Sweat, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2078, PurpleTurtleneck, Purple Turtleneck Sweat, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2079, DarkGreenTurtleneck, Dark Green Turtleneck S, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
-2080, RedSilkRobe, Red Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2081, GreenSilkRobe, Green Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2082, DarkBlueSilkRobe, Dark Blue Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2083, YellowSilkRobe, Yellow Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2084, LightBlueSilkRobe, Light Blue Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2085, PinkSilkRobe, Pink Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2086, BlackSilkRobe, Black Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2087, OrangeSilkRobe, Orange Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2088, PurpleSilkRobe, Purple Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2089, DarkGreenSilkRobe, Dark Green Silk Robe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
-2090, RedTankTop, Red Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2091, GreenTankTop, Green Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2092, DarkBlueTankTop, Dark Blue Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2093, YellowTankTop, Yellow Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2094, LightBlueTankTop, Light Blue Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2095, PinkTankTop, Pink Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2096, BlackTankTop, Black Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2097, OrangeTankTop, Orange Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2098, PurpleTankTop, Purple Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2099, DarkGreenTankTop, Dark Green Tank Top, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2120, RedShortTankTop, Red Short Tank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2121, GreenShortTankTop, Green Short Tank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2122, DarkBlueShortTankTop, Dark Blue Short Tank To, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2123, YellowShortTankTop, Yellow Short Tank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2124, LightBlueShortTankTop, Light Blue Short Tank T, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2125, PinkShortTankTop, Pink Short Tank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2126, BlackShortTankTop, Black Short Tank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2127, OrangeShortTankTop, Orange ShortTank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2128, PurpleShortTankTop, Purple Short Tank Top, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-2129, DarkGreenShortTankTop, Dark Green Short Tank T, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2220, RedSorcererRed, Red Sorcerer Robe Red, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2221, GreenSorcererRed, Green Sorcerer Robe Red, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2222, DarkBlueSorcererRed, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2223, YellowSorcererRed, Yellow Sorcerer Robe Re, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2224, LightBlueSorcererRed, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2225, PinkSorcererRed, Pink Sorcerer Robe Red, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2226, BlackSorcererRed, Black Sorcerer Robe Red, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2227, OrangeSorcererRed, Orange Sorcerer Robe Re, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2228, PurpleSorcererRed, Purple Sorcerer Robe Re, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2229, DarkGreenSorcererRed, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-2240, RedFineDress, Fine Red Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2241, GreenFineDress, Fine Green Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2242, DarkBlueFineDress, Fine Dark Blue Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2243, YellowFineDress, Fine Yellow Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2244, LightBlueFineDress, Fine Light Blue Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2245, PinkFineDress, Fine Pink Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2246, BlackFineDress, Fine Black Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2247, OrangeFineDress, Fine Orange Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2248, PurpleFineDress, Fine Purple Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-2249, DarkGreenFineDress, Fine Dark Green Dress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-5000, RedSorcererGreen, Red Sorcerer Robe Green, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5001, GreenSorcererGreen, Green Sorcerer Robe Gre, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5002, DarkBlueSorcererGreen, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5003, YellowSorcererGreen, Yellow Sorcerer Robe Gr, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5004, LightBlueSorcererGreen, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5005, PinkSorcererGreen, Pink Sorcerer Robe Gree, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5006, BlackSorcererGreen, Black Sorcerer Robe Gre, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5007, OrangeSorcererGreen, Orange Sorcerer Robe Gr, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5008, PurpleSorcererGreen, Purple Sorcerer Robe Gr, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5009, DarkGreenSorcererGreen, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5010, SorcererGreen, Sorcerer Robe Green, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5011, RedSorcererDBlue, Red Sorcerer Robe Dark, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5012, GreenSorcererDBlue, Green Sorcerer Robe Dar, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5013, DarkBlueSorcererDBlue, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5014, YellowSorcererDBlue, Yellow Sorcerer Robe Da, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5015, LightBlueSorcererDBlue, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5016, PinkSorcererDBlue, Pink Sorcerer Robe Dark, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5017, BlackSorcererDBlue, Black Sorcerer Robe Dar, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5018, OrangeSorcererDBlue, Orange Sorcerer Robe Da, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5019, PurpleSorcererDBlue, Purple Sorcerer Robe Da, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5020, DarkGreenSorcererDBlue, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5021, SorcererDBlue, Sorcerer Robe Dark Blue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5022, RedSorcererYellow, Red Sorcerer Robe Yello, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5023, GreenSorcererYellow, Green Sorcerer Robe Yel, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5024, DarkBlueSorcererYellow, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5025, YellowSorcererYellow, Yellow Sorcerer Robe Ye, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5026, LightBlueSorcererYellow, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5027, PinkSorcererYellow, Pink Sorcerer Robe Yell, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5028, BlackSorcererYellow, Black Sorcerer Robe Yel, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5029, OrangeSorcererYellow, Orange Sorcerer Robe Ye, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5030, PurpleSorcererYellow, Purple Sorcerer Robe Ye, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5031, DarkGreenSorcererYellow, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5032, SorcererYellow, Sorcerer Robe Yellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5033, RedSorcererLBlue, Red Sorcerer Robe Light, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5034, GreenSorcererLBlue, Green Sorcerer Robe Lig, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5035, DarkBlueSorcererLBlue, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5036, YellowSorcererLBlue, Yellow Sorcerer Robe Li, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5037, LightBlueSorcererLBlue, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5038, PinkSorcererLBlue, Pink Sorcerer Robe Ligh, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5039, BlackSorcererLBlue, Black Sorcerer Robe Lig, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5040, OrangeSorcererLBlue, Orange Sorcerer Robe Li, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5041, PurpleSorcererLBlue, Purple Sorcerer Robe Li, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5042, DarkGreenSorcererLBlue, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5043, SorcererLBlue, Sorcerer Robe Light Blu, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5044, RedSorcererPink, Red Sorcerer Robe Pink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5045, GreenSorcererPink, Green Sorcerer Robe Pin, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5046, DarkBlueSorcererPink, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5047, YellowSorcererPink, Yellow Sorcerer Robe Pi, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5048, LightBlueSorcererPink, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5049, PinkSorcererPink, Pink Sorcerer Robe Pink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-5050, BlackSorcererPink, Black Sorcerer Robe Pin, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5051, OrangeSorcererPink, Orange Sorcerer Robe Pi, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5052, PurpleSorcererPink, Purple Sorcerer Robe Pi, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5053, DarkGreenSorcererPink, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5054, SorcererPink, Sorcerer Robe Pink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5055, RedSorcererBlack, Red Sorcerer Robe Black, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5056, GreenSorcererBlack, Green Sorcerer Robe Bla, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5057, DarkBlueSorcererBlack, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5058, YellowSorcererBlack, Yellow Sorcerer Robe Bl, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5059, LightBlueSorcererBlack, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5060, PinkSorcererBlack, Pink Sorcerer Robe Blac, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5061, BlackSorcererBlack, Black Sorcerer Robe Bla, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5062, OrangeSorcererBlack, Orange Sorcerer Robe Bl, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5063, PurpleSorcererBlack, Purple Sorcerer Robe Bl, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5064, DarkGreenSorcererBlack, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5065, SorcererBlack, Sorcerer Robe Black, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5066, RedSorcererOrange, Red Sorcerer Robe Orang, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5067, GreenSorcererOrange, Green Sorcerer Robe Ora, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5068, DarkBlueSorcererOrange, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5069, YellowSorcererOrange, Yellow Sorcerer Robe Or, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5070, LightBlueSorcererOrange, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5071, PinkSorcererOrange, Pink Sorcerer Robe Oran, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5072, BlackSorcererOrange, Black Sorcerer Robe Ora, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5073, OrangeSorcererOrange, Orange Sorcerer Robe Or, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5074, PurpleSorcererOrange, Purple Sorcerer Robe Or, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5075, DarkGreenSorcererOrange, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5076, SorcererOrange, Sorcerer Robe Orange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5077, RedSorcererPurple, Red Sorcerer Robe Purpl, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5078, GreenSorcererPurple, Green Sorcerer Robe Pur, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5079, DarkBlueSorcererPurple, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5080, YellowSorcererPurple, Yellow Sorcerer Robe Pu, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5081, LightBlueSorcererPurple, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5082, PinkSorcererPurple, Pink Sorcerer Robe Purp, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5083, BlackSorcererPurple, Black Sorcerer Robe Pur, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5084, OrangeSorcererPurple, Orange Sorcerer Robe Pu, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5085, PurpleSorcererPurple, Purple Sorcerer Robe Pu, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5086, DarkGreenSorcererPurple, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5087, SorcererPurple, Sorcerer Robe Purple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5088, RedSorcererDGreen, Red Sorcerer Robe Dark, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5089, GreenSorcererDGreen, Green Sorcerer Robe Dar, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5090, DarkBlueSorcererDGreen, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5091, YellowSorcererDGreen, Yellow Sorcerer Robe Da, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5092, LightBlueSorcererDGreen, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5093, PinkSorcererDGreen, Pink Sorcerer Robe Dark, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5094, BlackSorcererDGreen, Black Sorcerer Robe Dar, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5095, OrangeSorcererDGreen, Orange Sorcerer Robe Da, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5096, PurpleSorcererDGreen, Purple Sorcerer Robe Da, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5097, DarkGreenSorcererDGreen, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5098, SorcererDGreen, Sorcerer Robe Dark Gree, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5099, RedSorcererWhite, Red Sorcerer Robe White, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5100, GreenSorcererWhite, Green Sorcerer Robe Whi, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5101, DarkBlueSorcererWhite, Dark Blue Sorcerer Robe, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5102, YellowSorcererWhite, Yellow Sorcerer Robe Wh, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5103, LightBlueSorcererWhite, Light Blue Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5104, PinkSorcererWhite, Pink Sorcerer Robe Whit, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5105, BlackSorcererWhite, Black Sorcerer Robe Whi, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5106, OrangeSorcererWhite, Orange Sorcerer Robe Wh, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5107, PurpleSorcererWhite, Purple Sorcerer Robe Wh, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5108, DarkGreenSorcererWhite, Dark Green Sorcerer Rob, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-5109, SorcererWhite, Sorcerer Robe White, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-5131, RedContributor, Red Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5132, GreenContributor, Green Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5133, DarkBlueContributor, Dark Blue Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5134, YellowContributor, Yellow Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5135, LightBlueContributor, Light Blue Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5136, PinkContributor, Pink Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5137, BlackContributor, Black Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5138, OrangeContributor, Orange Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5139, PurpleContributor, Purple Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
-5140, DarkGreenContributor, Dark Green Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+523, LeatherShirt, 5, 2000, 1000, 20, 0, 4, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+546, DesertShirt, 5, 2000, 1000, 20, 0, 6, 0, -18, 0, 2, 512, 0, 0, 0, {}, {}
+564, Turtleneck, 5, 2000, 1000, 30, 0, 6, 0, -18, 0, 2, 512, 0, 0, 0, {}, {}
+624, VNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -24, 0, 2, 512, 0, 0, 0, {}, {}
+625, ChainmailShirt, 5, 15000, 1500, 800, 0, 20, 0, -120, 0, 2, 512, 0, 0, 0, {}, {}
+626, LightPlatemail, 5, 50000, 2500, 1200, 0, 25, 0, -150, 0, 2, 512, 0, 0, 0, {}, {}
+645, GoldenPlatemail, 5, 9999000, 3000, 4500, 0, 25, 0, -100, 0, 2, 512, 0, 0, 0, {}, {}
+649, WhiteEvokersRobeBlue, 5, 8000, 4000, 5, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+650, BlackEvokersRobeBlue, 5, 8000, 4000, 5, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+651, WhiteWizardRobe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+652, BlackWizardRobe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+653, ApprenticeRobe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+658, WarlordPlate, 5, 100000, 3000, 2600, 0, 27, 0, -170, 0, 2, 512, 0, 0, 0, {}, {}
+659, GoldenWarlordPlate, 5, 500000, 4000, 7600, 0, 27, 0, -110, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+688, TankTop, 5, 800, 400, 10, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+689, ShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+720, SilkRobe, 5, 8000, 4000, 5, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+726, GMRobe, 5, 8000, 4000, 40, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {callfunc "RestrictedItem";}
+755, AssassinShirt, 5, 10000, 3000, 15, 0, 10, 0, -5, 0, 2, 512, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 10;}
+767, TerraniteChestArmor, 5, 100000, 3000, 800, 0, 20, 0, -70, 0, 2, 512, 0, 0, 0, {}, {bonus bDex, 1;bonus bMdef, 10;}
+782, ForestArmor, 5, 3000, 1500, 40, 0, 10, 0, -20, 0, 2, 512, 0, 0, 0, {}, {bonus bDex, 3;}
+783, PlatynaRedDress, 5, 100000, 50000, 35, 0, 15, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+791, YetiSkinShirt, 5, 20000, 10000, 20, 0, 12, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+793, BromenalChest, 5, 100000, 3000, 2000, 0, 25, 0, -170, 0, 2, 512, 0, 0, 0, {}, {}
+798, SorcererRed, 5, 8000, 4000, 5, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+870, FineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+880, LazuriteRobe, 5, 92000, 52000, 30, 0, 7, 0, 60, 0, 2, 512, 0, 90, 0, {}, {set @bStat, Int;set @minbStatVal, 70;callfunc "RequireStat"; set @bStat, Vit;set @minbStatVal, 40;callfunc "RequireStat"; bonus bSpeedAddRate, -15; bonus bDef2Rate, -40; bonus bMdef, 60; bonus bVit, -1; bonus bInt, 7; bonus bLuk, -1; bonus bDex, -1; bonus bStr, -1;}
+1178, Contributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+1183, AmberChristmasSweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+1184, FunkyChristmasSweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+1185, PinkChristmasSweater, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+1186, DarkChristmasSweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+1187, BlueChristmasSweater, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+1202, CottonShirt, 5, 300, 5, 13, 0, 2, 0, -2, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2050, RedCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2051, GreenCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2052, DarkBlueCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2053, YellowCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2054, LightBlueCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2055, PinkCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2056, BlackCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2057, OrangeCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2058, PurpleCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2059, DarkGreenCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2060, RedVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2061, GreenVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2062, DarkBlueVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2063, YellowVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2064, LightBlueVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2065, PinkVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2066, BlackVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2067, OrangeVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2068, PurpleVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2069, DarkGreenVNeckSweater, 5, 6000, 3000, 35, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, {}, {}
+2070, RedTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2071, GreenTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2072, DarkBlueTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2073, YellowTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2074, LightBlueTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2075, PinkTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2076, BlackTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2077, OrangeTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2078, PurpleTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2079, DarkGreenTurtleneck, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, {}, {}
+2080, RedSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2081, GreenSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2082, DarkBlueSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2083, YellowSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2084, LightBlueSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2085, PinkSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2086, BlackSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2087, OrangeSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2088, PurpleSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2089, DarkGreenSilkRobe, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, {}, {}
+2090, RedTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2091, GreenTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2092, DarkBlueTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2093, YellowTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2094, LightBlueTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2095, PinkTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2096, BlackTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2097, OrangeTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2098, PurpleTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2099, DarkGreenTankTop, 5, 800, 400, 12, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2120, RedShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2121, GreenShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2122, DarkBlueShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2123, YellowShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2124, LightBlueShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2125, PinkShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2126, BlackShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2127, OrangeShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2128, PurpleShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+2129, DarkGreenShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2220, RedSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2221, GreenSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2222, DarkBlueSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2223, YellowSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2224, LightBlueSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2225, PinkSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2226, BlackSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2227, OrangeSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2228, PurpleSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2229, DarkGreenSorcererRed, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+2240, RedFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2241, GreenFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2242, DarkBlueFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2243, YellowFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2244, LightBlueFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2245, PinkFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2246, BlackFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2247, OrangeFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2248, PurpleFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+2249, DarkGreenFineDress, 5, 10000, 5000, 35, 0, 8, 0, 3, 0, 2, 512, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+5000, RedSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5001, GreenSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5002, DarkBlueSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5003, YellowSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5004, LightBlueSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5005, PinkSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5006, BlackSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5007, OrangeSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5008, PurpleSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5009, DarkGreenSorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5010, SorcererGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5011, RedSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5012, GreenSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5013, DarkBlueSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5014, YellowSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5015, LightBlueSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5016, PinkSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5017, BlackSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5018, OrangeSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5019, PurpleSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5020, DarkGreenSorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5021, SorcererDBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5022, RedSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5023, GreenSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5024, DarkBlueSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5025, YellowSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5026, LightBlueSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5027, PinkSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5028, BlackSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5029, OrangeSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5030, PurpleSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5031, DarkGreenSorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5032, SorcererYellow, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5033, RedSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5034, GreenSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5035, DarkBlueSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5036, YellowSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5037, LightBlueSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5038, PinkSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5039, BlackSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5040, OrangeSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5041, PurpleSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5042, DarkGreenSorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5043, SorcererLBlue, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5044, RedSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5045, GreenSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5046, DarkBlueSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5047, YellowSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5048, LightBlueSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5049, PinkSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+5050, BlackSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5051, OrangeSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5052, PurpleSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5053, DarkGreenSorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5054, SorcererPink, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5055, RedSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5056, GreenSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5057, DarkBlueSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5058, YellowSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5059, LightBlueSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5060, PinkSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5061, BlackSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5062, OrangeSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5063, PurpleSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5064, DarkGreenSorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5065, SorcererBlack, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5066, RedSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5067, GreenSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5068, DarkBlueSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5069, YellowSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5070, LightBlueSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5071, PinkSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5072, BlackSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5073, OrangeSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5074, PurpleSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5075, DarkGreenSorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5076, SorcererOrange, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5077, RedSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5078, GreenSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5079, DarkBlueSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5080, YellowSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5081, LightBlueSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5082, PinkSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5083, BlackSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5084, OrangeSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5085, PurpleSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5086, DarkGreenSorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5087, SorcererPurple, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5088, RedSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5089, GreenSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5090, DarkBlueSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5091, YellowSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5092, LightBlueSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5093, PinkSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5094, BlackSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5095, OrangeSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5096, PurpleSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5097, DarkGreenSorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5098, SorcererDGreen, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5099, RedSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5100, GreenSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5101, DarkBlueSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5102, YellowSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5103, LightBlueSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5104, PinkSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5105, BlackSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5106, OrangeSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5107, PurpleSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5108, DarkGreenSorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+5109, SorcererWhite, 5, 8000, 4000, 30, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, {}, {bonus bAgi, 1;}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+5131, RedContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5132, GreenContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5133, DarkBlueContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5134, YellowContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5135, LightBlueContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5136, PinkContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5137, BlackContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5138, OrangeContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5139, PurpleContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
+5140, DarkGreenContributor, 5, 0, 0, 20, 0, 5, 0, 5, 0, 2, 512, 0, 0, 0, {}, {}
diff --git a/world/map/db/item_db_foot.txt b/world/map/db/item_db_foot.txt
index 5d0537dc..04f8e70b 100644
--- a/world/map/db/item_db_foot.txt
+++ b/world/map/db/item_db_foot.txt
@@ -1,20 +1,20 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-528, Boots, Boots, 5, 2000, 500, 80, 0, 2, 0, -2, 0, 2, 64, 0, 0, 0, {}, {}
-655, FurBoots, Fur Boots, 5, 5000, 600, 50, 0, 3, 0, -3, 0, 2, 64, 0, 0, 0, {}, {}
-734, BlackBoots, Black Boots, 5, 20000, 3000, 25, 0, 3, 0, -10, 0, 2, 64, 0, 0, 0, {}, {}
-735, CottonBoots, Cotton Boots, 5, 2000, 500, 10, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-757, AssassinBoots, Assassin Boots, 5, 7000, 2000, 10, 0, 5, 0, -3, 0, 2, 64, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 5;}
-792, BromenalBoots, Bromenal Boots, 5, 8000, 500, 30, 0, 1, 0, -2, 0, 2, 64, 0, 0, 0, {}, {}
-876, WarlordBoots, Warlord Boots, 5, 19000, 2000, 550, 0, 5, 0, -22, 0, 2, 64, 0, 0, 0, {}, {}
-2150, RedCottonBoots, Red Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2151, GreenCottonBoots, Green Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2152, DarkBlueCottonBoots, Dark Blue Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2153, YellowCottonBoots, Yellow Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2154, LightBlueCottonBoots, Light Blue Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2155, PinkCottonBoots, Pink Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2156, BlackCottonBoots, Black Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2157, OrangeCottonBoots, Orange Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2158, PurpleCottonBoots, Purple Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-2159, DarkGreenCottonBoots, Dark Green Cotton Boots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
-1188, RedStockings, Red Stockings, 5, 7000, 2000, 10, 0, 1, 0, 2, 0, 2, 64, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+528, Boots, 5, 2000, 500, 80, 0, 2, 0, -2, 0, 2, 64, 0, 0, 0, {}, {}
+655, FurBoots, 5, 5000, 600, 50, 0, 3, 0, -3, 0, 2, 64, 0, 0, 0, {}, {}
+734, BlackBoots, 5, 20000, 3000, 25, 0, 3, 0, -10, 0, 2, 64, 0, 0, 0, {}, {}
+735, CottonBoots, 5, 2000, 500, 10, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+757, AssassinBoots, 5, 7000, 2000, 10, 0, 5, 0, -3, 0, 2, 64, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 5;}
+792, BromenalBoots, 5, 8000, 500, 30, 0, 1, 0, -2, 0, 2, 64, 0, 0, 0, {}, {}
+876, WarlordBoots, 5, 19000, 2000, 550, 0, 5, 0, -22, 0, 2, 64, 0, 0, 0, {}, {}
+2150, RedCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2151, GreenCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2152, DarkBlueCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2153, YellowCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2154, LightBlueCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2155, PinkCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2156, BlackCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2157, OrangeCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2158, PurpleCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+2159, DarkGreenCottonBoots, 5, 2000, 500, 30, 0, 1, 0, 1, 0, 2, 64, 0, 0, 0, {}, {}
+1188, RedStockings, 5, 7000, 2000, 10, 0, 1, 0, 2, 0, 2, 64, 0, 0, 0, {}, {}
diff --git a/world/map/db/item_db_generic.txt b/world/map/db/item_db_generic.txt
index efae1569..16934102 100644
--- a/world/map/db/item_db_generic.txt
+++ b/world/map/db/item_db_generic.txt
@@ -1,237 +1,237 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-503, CasinoCoins, Casino Coins, 3, 10, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-504, DecorCandy, Decor Candy, 3, 25, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-505, MaggotSlime, Maggot Slime, 3, 8, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-507, ScorpionStinger, Scorpion Stinger, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-515, PurplePresentBox, Purple Present Box, 3, 50, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-516, BluePresentBox, Blue Present Box, 3, 60, 30, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-517, RedScorpionStinger, Red Scorpion Stinger, 3, 170, 85, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-518, BugLeg, Bug Leg, 3, 100, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-526, CoinBag, Coin Bag, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-537, TreasureKey, Treasure Key, 3, 100, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-538, GreenPresentBox, Green Present Box, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-540, EmptyBottle, Empty Bottle, 3, 20, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-542, BottleOfSand, Bottle of Sand, 3, 70, 35, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-551, AquaHint, Aqua Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-552, MagentaHint, Magenta Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-553, YellowHint, Yellow Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-554, GreenHint, Green Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-555, TealHint, Teal Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-556, PurpleHint, Purple Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-557, RedHint, Red Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-558, BlueHint, Blue Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-559, OrangeHint, Orange Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-560, GrayHint, Gray Hint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-569, RawLog, Raw Log, 3, 20, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-589, Toothbrush, Toothbrush, 3, 20, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-611, WhiteFur, White Fur, 3, 8, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-612, CaveSnakeLamp, Cave Snake Lamp, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-613, HardSpike, Hard Spike, 3, 40, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-614, PinkAntenna, Pink Antenna, 3, 10, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-631, DarkCrystal, Dark Crystal, 3, 1000, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-635, SantaCookie, Santa Cookie, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-640, IronOre, Iron Ore, 3, 250, 100, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-641, SnakeSkin, Snake Skin, 3, 250, 100, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-660, CottonCloth, Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-661, RedRose, Red Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-662, WhiteRose, White Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-663, DarkRedRose, Dark Red Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-664, PinkRose, Pink Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-665, YellowRose, Yellow Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-666, BlackRose, Black Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-667, OrangeRose, Orange Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-668, BlueRose, Blue Rose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-669, YellowTulip, Yellow Tulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-670, PurpleTulip, Purple Tulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-671, RedTulip, Red Tulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-672, WhiteTulip, White Tulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-673, PinkTulip, Pink Tulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-674, OrangeTulip, Orange Tulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-677, HeartNecklace, Heart Necklace, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-680, MauveHerb, Mauve Herb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-681, CobaltHerb, Cobalt Herb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-682, GambogeHerb, Gamboge Herb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-683, AlizarinHerb, Alizarin Herb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-690, RedDye, Red Dye, 3, 100, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-691, GreenDye, Green Dye, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-692, DarkBlueDye, Dark Blue Dye, 3, 40000, 15000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-693, YellowDye, Yellow Dye, 3, 100, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-694, LightBlueDye, Light Blue Dye, 3, 100, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-695, PinkDye, Pink Dye, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-696, BlackDye, Black Dye, 3, 30000, 25000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-697, OrangeDye, Orange Dye, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-698, PurpleDye, Purple Dye, 3, 70000, 50000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-699, DarkGreenDye, Dark Green Dye, 3, 2000, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-700, Pearl, Pearl, 3, 5000, 3000, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-701, PileOfAsh, Pile of Ash, 3, 3000, 100, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-703, SulphurPowder, Sulphur Powder, 3, 1000, 25, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-704, IronPowder, Iron Powder, 3, 800, 80, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-706, GoldenScorpionStinger, Golden Scorpion Stinger, 3, 2000, 500, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-707, MonsterOilPotion, Monster Oil Potion, 3, 10000, 2000, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-708, LeatherPatch, Leather Patch, 3, 300, 150, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-709, BlackScorpionStinger, Black Scorpion Stinger, 3, 250, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-710, SnakeTongue, Snake Tongue, 3, 60, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-711, MountainSnakeTongue, Mountain Snake Tongue, 3, 80, 40, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-712, GrassSnakeTongue, Grass Snake Tongue, 3, 160, 80, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-713, CaveSnakeTongue, Cave Snake Tongue, 3, 120, 60, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-718, SilkCocoon, Silk Cocoon, 3, 200, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-727, Iten, Iten, 3, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-728, MoubooFigurine, Mouboo Figurine, 3, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-729, WarpedLog, Warped Log, 3, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-730, Lifestone, Lifestone, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-732, DruidTreeBranch, Druid Tree Branch, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-740, Root, Root, 3, 500, 200, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-746, MopoxCurePotion, Mopox Cure Potion, 3, 0, 0, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-753, BatWing, Bat Wing, 3, 500, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-754, BatTeeth, Bat Teeth, 3, 600, 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-763, TerraniteOre, Terranite Ore, 3, 500, 250, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-772, WispPowder, Wisp Powder, 3, 700, 350, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-773, SpectrePowder, Spectre Powder, 3, 700, 350, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-774, PoltergeistPowder, Poltergeist Powder, 3, 700, 350, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-775, Bone, Bone, 3, 140, 70, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-776, Skull, Skull, 3, 900, 450, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-777, RottenRags, Rotten Rags, 3, 100, 50, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-778, DiseasedHeart, Diseased Heart, 3, 180, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-779, UndeadEar, Undead Ear, 3, 30, 15, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-780, UndeadEye, Undead Eye, 3, 30, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-799, MylarinDust, Mylarin Dust, 3, 10000, 5000, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-802, EasterBasket, Easter Basket, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-803, GrassLiner, Grass Liner, 3, 20, 10, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-804, JellyBeans, Jelly Beans, 3, 20, 10, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-805, ChocolateMouboo, Chocolate Mouboo, 3, 20, 10, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-806, ReedBundle, Reed Bundle, 3, 20, 10, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-807, GrassSeed, Grass Seed, 3, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-819, DiamondPowder, Diamond Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-820, RubyPowder, Ruby Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-821, EmeraldPowder, Emerald Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-822, SapphirePowder, Sapphire Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-823, TopazPowder, Topaz Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-824, AmethystPowder, Amethyst Powder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-833, BrokenFourLeafAmulet, Broken Four-Leaf Amulet, 3, 100, 1, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-834, BrokenDoll, Broken Doll, 3, 20, 5, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-835, HyvernStinger, Hyvern Stinger, 3, 100, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-836, GrubSlime, Grub Slime, 3, 40, 10, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-841, RedDottedWrap, Red Dotted Wrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-842, YellowDottedWrap, Yellow Dotted Wrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-843, BlueDottedWrap, Blue Dotted Wrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-844, PurpleStripedWrap, Purple Striped Wrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-845, RedGoldenStripedWrap, Red Golden Striped Wrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-846, GreenRedStripedWrap, Green Red Striped Wrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-847, PlushMouboo, Plush Mouboo, 3, 50, 25, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-849, OpenPresentBox, Open Present Box, 3, 50, 25, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-850, ClosedChristmasBox, Closed Christmas Box, 3, 50, 25, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-851, StickReinboo, Stick Reinboo, 3, 50, 25, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-852, LeatherBall, Leather Ball, 3, 50, 25, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-853, Doll, Doll, 3, 50, 25, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-858, WolvernTooth, Wolvern Tooth, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-859, WolvernPelt, Wolvern Pelt, 3, 500, 250, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-860, SquirrelPelt, Squirrel Pelt, 3, 50, 25, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-861, WhiteBellTuber, White Bell Tuber, 3, 20, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-862, IcedWater, Iced Water, 3, 100, 50, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-863, SilverMirror, Silver Mirror, 3, 500, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-864, BookPage, Book Page, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-866, LeatherSuitcase, Leather Suitcase, 3, 4000, 2000, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-869, Antlers, Antlers, 3, 4000, 2000, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-871, SealedSoul, Sealed Soul, 3, 12000, 1000, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-872, LockPicks, Lock Picks, 3, 5000, 1500, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-873, LazuriteShard, Lazurite Shard, 3, 500, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-874, LazuriteCrystal, Lazurite Crystal, 3, 3000, 200, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-875, HeartOfLazurite, Heart of Lazurite, 3, 10000, 400, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-891, SilkSheet, Silk Sheet, 3, 1000, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-892, OrangeSummonFlower, Orange Summon Flower, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-893, PurpleSummonFlower, Purple Summon Flower, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-894, WhiteSummonFlower, White Summon Flower, 3, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-895, YellowSummonFlower, Yellow Summon Flower, 3, 400, 200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-896, RedSummonFlower, Red Summon Flower, 3, 600, 300, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1191, WhiteWrap, White Wrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1192, YellowWrap, Yellow Wrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1193, BlueWrap, Blue Wrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1194, PurpleWrap, Purple Wrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1195, GreenWrap, Green Wrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1198, Soul, Soul, 3, 100000, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1207, RedChristmasStocking, Red Christmas Stocking, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1208, RedEasterEgg, Red Easter Egg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1209, GreenEasterEgg, Green Easter Egg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1210, BlueEasterEgg, Blue Easter Egg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1211, YellowEasterEgg, Yellow Easter Egg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1212, PinkEasterEgg, Pink Easter Egg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1213, TealEasterEgg, Teal Easter Egg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1228, LightCrystal, Light Crystal, 3, 1000, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-1233, FakeFangs, Cheap Plastic Fangs, 3, 20000, 10000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1234, RedOrnament, Red Christmas Ornament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1235, YellowOrnament, Yellow Christmas Orname, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1236, GreenOrnament, Green Christmas Ornamen, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1237, AquaOrnament, Aqua Christmas Ornament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1238, BlueOrnament, Blue Christmas Ornament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1239, MagentaOrnament, Magenta Christmas Ornam, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1240, SantaSnowGlobe, Santa Snow Globe, 3, 7500, 5000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1241, SnowmanSnowGlobe, Snowman Snow Globe, 3, 7500, 5000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1245, BentNeedle, Bent Needle, 3, 700, 1, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1246, DarkEasterEgg, Dark Easter Egg, 3, 700, 50, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1249, StrangeCoin, Strange Coin, 3, 7000, 5000, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1254, DarkPetal, Dark Petal, 3, 15000, 8000, 250, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-1257, FlawedLens, Flawed Lens, 3, 10000, 5000, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-2250, RedCottonCloth, Red Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2251, GreenCottonCloth, Green Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2252, DarkBlueCottonCloth, Dark Blue Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2253, YellowCottonCloth, Yellow Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2254, LightBlueCottonCloth, Light Blue Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2255, PinkCottonCloth, Pink Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2256, BlackCottonCloth, Black Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2257, OrangeCottonCloth, Orange Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2258, PurpleCottonCloth, Purple Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-2259, DarkGreenCottonCloth, Dark Green Cotton Cloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-3000, JackOLantern, Jack-o-Lantern, 3, 200, 100, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-3002, RealisticBrain, Realistic Brain, 3, 200, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-3003, JarofBlood, Jar of Blood, 3, 200, 100, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-3004, Tongue, Tongue, 3, 5, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-3011, PumpkinSeeds, Pumpkin Seeds, 3, 5, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4000, AngryScorpionStinger, Angry Scorpion Stinger, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4001, Coal, Coal, 3, 250, 100, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4002, Diamond, Diamond, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-4003, Ruby, Ruby, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4004, Emerald, Emerald, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4005, Sapphire, Sapphire, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4006, Topaz, Topaz, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4007, Amethyst, Amethyst, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4015, IronIngot, Iron Ingot, 3, 500, 250, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4016, BanditHood, Bandit Hood, 3, 100, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4017, RedPowder, Red Powder, 3, 3000, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4018, YellowPowder, Yellow Powder, 3, 3000, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4019, BluePowder, Blue Powder, 3, 3000, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4021, YellowPresentBox, Yellow Present Box, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-4022, WhitePresentBox, White Present Box, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-4023, AnimalBones, Animal Bones, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4024, FrozenYetiTear, Frozen Yeti Tear, 3, 500, 250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4025, YetiClaw, Yeti Claw, 3, 150, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4026, IceCube, Ice Cube, 3, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4029, GrimaceOfDementia, Grimace of Dementia, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-4034, BlackPearl, Black Pearl, 3, 8000, 4000, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4037, WhiteBlanket, White Blanket, 3, 600, 125, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4038, WhiteSaddleRug, White Saddle Rug, 3, 1000, 250, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4039, RedSaddleRug, Red Saddle Rug, 3, 1200, 300, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4040, RawTalisman, Raw Talisman, 3, 800, 200, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-4041, FlightTalisman, Flight Talisman, 3, 5000, 1200, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5110, Bloodstone, Bloodstone, 3, 2000, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5111, BrainStem, Brain Stem, 3, 180, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5112, CryptKey, Crypt Key, 3, 300, 150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5113, Ectoplasm, Ectoplasm, 3, 80, 20, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-5114, Urn, Urn, 3, 40, 20, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5115, VampireBatWing, Vampire Bat Wing, 3, 700, 20, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5116, WraithHorn, Wraith Horn, 3, 700, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5117, AstralCube, Astral Cube, 3, 10000, 10, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5118, RunestoneA, Runestone A, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5119, RunestoneL, Runestone L, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5120, RunestoneN, Runestone N, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5121, RunestoneT, Runestone T, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5122, RunestoneW, Runestone W, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5123, QuillOfBinding, Quill Of Binding, 3, 10, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5124, BloodInk, Blood Ink, 3, 10, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5125, UnderworldKey, Underworld Key, 3, 10, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-5127, JarofOwnBlood, Jar of Own Blood, 3, 200, 100, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+503, CasinoCoins, 3, 10, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+504, DecorCandy, 3, 25, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+505, MaggotSlime, 3, 8, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+507, ScorpionStinger, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+515, PurplePresentBox, 3, 50, 25, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+516, BluePresentBox, 3, 60, 30, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+517, RedScorpionStinger, 3, 170, 85, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+518, BugLeg, 3, 100, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+526, CoinBag, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+537, TreasureKey, 3, 100, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+538, GreenPresentBox, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+540, EmptyBottle, 3, 20, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+542, BottleOfSand, 3, 70, 35, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+551, AquaHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+552, MagentaHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+553, YellowHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+554, GreenHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+555, TealHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+556, PurpleHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+557, RedHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+558, BlueHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+559, OrangeHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+560, GrayHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+569, RawLog, 3, 20, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+589, Toothbrush, 3, 20, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+611, WhiteFur, 3, 8, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+612, CaveSnakeLamp, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+613, HardSpike, 3, 40, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+614, PinkAntenna, 3, 10, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+631, DarkCrystal, 3, 1000, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+635, SantaCookie, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+640, IronOre, 3, 250, 100, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+641, SnakeSkin, 3, 250, 100, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+660, CottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+661, RedRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+662, WhiteRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+663, DarkRedRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+664, PinkRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+665, YellowRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+666, BlackRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+667, OrangeRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+668, BlueRose, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+669, YellowTulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+670, PurpleTulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+671, RedTulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+672, WhiteTulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+673, PinkTulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+674, OrangeTulip, 3, 80, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+677, HeartNecklace, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+680, MauveHerb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+681, CobaltHerb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+682, GambogeHerb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+683, AlizarinHerb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+690, RedDye, 3, 100, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+691, GreenDye, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+692, DarkBlueDye, 3, 40000, 15000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+693, YellowDye, 3, 100, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+694, LightBlueDye, 3, 100, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+695, PinkDye, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+696, BlackDye, 3, 30000, 25000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+697, OrangeDye, 3, 2500, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+698, PurpleDye, 3, 70000, 50000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+699, DarkGreenDye, 3, 2000, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+700, Pearl, 3, 5000, 3000, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+701, PileOfAsh, 3, 3000, 100, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+703, SulphurPowder, 3, 1000, 25, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+704, IronPowder, 3, 800, 80, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+706, GoldenScorpionStinger, 3, 2000, 500, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+707, MonsterOilPotion, 3, 10000, 2000, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+708, LeatherPatch, 3, 300, 150, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+709, BlackScorpionStinger, 3, 250, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+710, SnakeTongue, 3, 60, 30, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+711, MountainSnakeTongue, 3, 80, 40, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+712, GrassSnakeTongue, 3, 160, 80, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+713, CaveSnakeTongue, 3, 120, 60, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+718, SilkCocoon, 3, 200, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+727, Iten, 3, 0, 0, 8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+728, MoubooFigurine, 3, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+729, WarpedLog, 3, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+730, Lifestone, 3, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+732, DruidTreeBranch, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+740, Root, 3, 500, 200, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+746, MopoxCurePotion, 3, 0, 0, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+753, BatWing, 3, 500, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+754, BatTeeth, 3, 600, 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+763, TerraniteOre, 3, 500, 250, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+772, WispPowder, 3, 700, 350, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+773, SpectrePowder, 3, 700, 350, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+774, PoltergeistPowder, 3, 700, 350, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+775, Bone, 3, 140, 70, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+776, Skull, 3, 900, 450, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+777, RottenRags, 3, 100, 50, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+778, DiseasedHeart, 3, 180, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+779, UndeadEar, 3, 30, 15, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+780, UndeadEye, 3, 30, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+799, MylarinDust, 3, 10000, 5000, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+802, EasterBasket, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+803, GrassLiner, 3, 20, 10, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+804, JellyBeans, 3, 20, 10, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+805, ChocolateMouboo, 3, 20, 10, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+806, ReedBundle, 3, 20, 10, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+807, GrassSeed, 3, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+819, DiamondPowder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+820, RubyPowder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+821, EmeraldPowder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+822, SapphirePowder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+823, TopazPowder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+824, AmethystPowder, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+833, BrokenFourLeafAmulet, 3, 100, 1, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+834, BrokenDoll, 3, 20, 5, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+835, HyvernStinger, 3, 100, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+836, GrubSlime, 3, 40, 10, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+841, RedDottedWrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+842, YellowDottedWrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+843, BlueDottedWrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+844, PurpleStripedWrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+845, RedGoldenStripedWrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+846, GreenRedStripedWrap, 3, 50, 25, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+847, PlushMouboo, 3, 50, 25, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+849, OpenPresentBox, 3, 50, 25, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+850, ClosedChristmasBox, 3, 50, 25, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+851, StickReinboo, 3, 50, 25, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+852, LeatherBall, 3, 50, 25, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+853, Doll, 3, 50, 25, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+858, WolvernTooth, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+859, WolvernPelt, 3, 500, 250, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+860, SquirrelPelt, 3, 50, 25, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+861, WhiteBellTuber, 3, 20, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+862, IcedWater, 3, 100, 50, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+863, SilverMirror, 3, 500, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+864, BookPage, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+866, LeatherSuitcase, 3, 4000, 2000, 12000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+869, Antlers, 3, 4000, 2000, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+871, SealedSoul, 3, 12000, 1000, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+872, LockPicks, 3, 5000, 1500, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+873, LazuriteShard, 3, 500, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+874, LazuriteCrystal, 3, 3000, 200, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+875, HeartOfLazurite, 3, 10000, 400, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+891, SilkSheet, 3, 1000, 250, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+892, OrangeSummonFlower, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+893, PurpleSummonFlower, 3, 100, 50, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+894, WhiteSummonFlower, 3, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+895, YellowSummonFlower, 3, 400, 200, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+896, RedSummonFlower, 3, 600, 300, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1191, WhiteWrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1192, YellowWrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1193, BlueWrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1194, PurpleWrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1195, GreenWrap, 3, 50, 25, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1198, Soul, 3, 100000, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1207, RedChristmasStocking, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1208, RedEasterEgg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1209, GreenEasterEgg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1210, BlueEasterEgg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1211, YellowEasterEgg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1212, PinkEasterEgg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1213, TealEasterEgg, 3, 80, 40, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1228, LightCrystal, 3, 1000, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+1233, FakeFangs, 3, 20000, 10000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1234, RedOrnament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1235, YellowOrnament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1236, GreenOrnament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1237, AquaOrnament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1238, BlueOrnament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1239, MagentaOrnament, 3, 5000, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1240, SantaSnowGlobe, 3, 7500, 5000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1241, SnowmanSnowGlobe, 3, 7500, 5000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1245, BentNeedle, 3, 700, 1, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1246, DarkEasterEgg, 3, 700, 50, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1249, StrangeCoin, 3, 7000, 5000, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1254, DarkPetal, 3, 15000, 8000, 250, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+1257, FlawedLens, 3, 10000, 5000, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+2250, RedCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2251, GreenCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2252, DarkBlueCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2253, YellowCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2254, LightBlueCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2255, PinkCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2256, BlackCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2257, OrangeCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2258, PurpleCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+2259, DarkGreenCottonCloth, 3, 400, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+3000, JackOLantern, 3, 200, 100, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+3002, RealisticBrain, 3, 200, 100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+3003, JarofBlood, 3, 200, 100, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+3004, Tongue, 3, 5, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+3011, PumpkinSeeds, 3, 5, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4000, AngryScorpionStinger, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4001, Coal, 3, 250, 100, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4002, Diamond, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+4003, Ruby, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4004, Emerald, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4005, Sapphire, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4006, Topaz, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4007, Amethyst, 3, 5000, 2500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4015, IronIngot, 3, 500, 250, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4016, BanditHood, 3, 100, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4017, RedPowder, 3, 3000, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4018, YellowPowder, 3, 3000, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4019, BluePowder, 3, 3000, 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4021, YellowPresentBox, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+4022, WhitePresentBox, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+4023, AnimalBones, 3, 50, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4024, FrozenYetiTear, 3, 500, 250, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4025, YetiClaw, 3, 150, 75, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4026, IceCube, 3, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4029, GrimaceOfDementia, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+4034, BlackPearl, 3, 8000, 4000, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4037, WhiteBlanket, 3, 600, 125, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4038, WhiteSaddleRug, 3, 1000, 250, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4039, RedSaddleRug, 3, 1200, 300, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4040, RawTalisman, 3, 800, 200, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+4041, FlightTalisman, 3, 5000, 1200, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5110, Bloodstone, 3, 2000, 250, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5111, BrainStem, 3, 180, 90, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5112, CryptKey, 3, 300, 150, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5113, Ectoplasm, 3, 80, 20, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+5114, Urn, 3, 40, 20, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5115, VampireBatWing, 3, 700, 20, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5116, WraithHorn, 3, 700, 20, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5117, AstralCube, 3, 10000, 10, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5118, RunestoneA, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5119, RunestoneL, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5120, RunestoneN, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5121, RunestoneT, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5122, RunestoneW, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5123, QuillOfBinding, 3, 10, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5124, BloodInk, 3, 10, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5125, UnderworldKey, 3, 10, 10, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+5127, JarofOwnBlood, 3, 200, 100, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
diff --git a/world/map/db/item_db_hand.txt b/world/map/db/item_db_hand.txt
index d57062b5..2776927e 100644
--- a/world/map/db/item_db_hand.txt
+++ b/world/map/db/item_db_hand.txt
@@ -1,19 +1,19 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-531, MinerGloves, Miner Gloves, 5, 3000, 1000, 30, 0, 2, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-532, LeatherGloves, Leather Gloves, 5, 6000, 2000, 20, 0, 4, 0, -20, 0, 2, 4, 0, 0, 0, {}, {}
-563, WinterGloves, Winter Gloves, 5, 6000, 3000, 20, 0, 3, 0, -15, 0, 2, 4, 0, 0, 0, {}, {}
-741, CottonGloves, Cotton Gloves, 5, 2000, 500, 10, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-756, AssassinGloves, Assassin Gloves, 5, 7000, 2000, 9, 0, 5, 0, -3, 0, 2, 4, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 5;}
-794, BromenalGloves, Bromenal Gloves, 5, 6000, 2000, 40, 0, 4, 0, -20, 0, 2, 4, 0, 0, 0, {}, {}
-868, SilkGloves, Silk Gloves, 5, 5000, 2500, 4, 0, 1, 0, 0, 0, 2, 4, 0, 0, 0, {}, {}
-2160, RedCottonGloves, Red Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2161, GreenCottonGloves, Green Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2162, DarkBlueCottonGloves, Dark Blue Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2163, YellowCottonGloves, Yellow Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2164, LightBlueCottonGloves, Light Blue Cotton Glove, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2165, PinkCottonGloves, Pink Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2166, BlackCottonGloves, Black Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2167, OrangeCottonGloves, Orange Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2168, PurpleCottonGloves, Purple Cotton Gloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
-2169, DarkGreenCottonGloves, Dark Green Cotton Glove, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+531, MinerGloves, 5, 3000, 1000, 30, 0, 2, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+532, LeatherGloves, 5, 6000, 2000, 20, 0, 4, 0, -20, 0, 2, 4, 0, 0, 0, {}, {}
+563, WinterGloves, 5, 6000, 3000, 20, 0, 3, 0, -15, 0, 2, 4, 0, 0, 0, {}, {}
+741, CottonGloves, 5, 2000, 500, 10, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+756, AssassinGloves, 5, 7000, 2000, 9, 0, 5, 0, -3, 0, 2, 4, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 5;}
+794, BromenalGloves, 5, 6000, 2000, 40, 0, 4, 0, -20, 0, 2, 4, 0, 0, 0, {}, {}
+868, SilkGloves, 5, 5000, 2500, 4, 0, 1, 0, 0, 0, 2, 4, 0, 0, 0, {}, {}
+2160, RedCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2161, GreenCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2162, DarkBlueCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2163, YellowCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2164, LightBlueCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2165, PinkCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2166, BlackCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2167, OrangeCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2168, PurpleCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
+2169, DarkGreenCottonGloves, 5, 2000, 500, 20, 0, 1, 0, -10, 0, 2, 4, 0, 0, 0, {}, {}
diff --git a/world/map/db/item_db_head.txt b/world/map/db/item_db_head.txt
index b838fc07..9cd56c4e 100644
--- a/world/map/db/item_db_head.txt
+++ b/world/map/db/item_db_head.txt
@@ -1,183 +1,183 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-511, SantaHat, Santa Hat, 5, 400, 200, 20, 0, 2, 0, -2, 0, 2, 256, 0, 0, 0, {}, {}
-524, FancyHat, Fancy Hat, 5, 1600, 800, 20, 0, 5, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-525, MinersHat, Miner's Hat, 5, 800, 400, 40, 0, 4, 0, -8, 0, 2, 256, 0, 0, 0, {}, {}
-543, StandardHeadband, Standard Headband, 5, 800, 400, 10, 0, 3, 0, -3, 0, 2, 256, 0, 0, 0, {}, {}
-544, SilkHeadband, Silk Headband, 5, 5000, 2000, 10, 0, 10, 0, -10, 0, 2, 256, 0, 0, 0, {}, {}
-615, PumpkinHelmet, Pumpkin Helmet, 5, 2000, 1000, 60, 0, 4, 0, -4, 0, 2, 256, 0, 0, 0, {}, {}
-616, AxeHat, Axe Hat, 5, 2000, 1000, 50, 0, 4, 0, -4, 0, 2, 256, 0, 0, 0, {}, {}
-617, PirateHat, Pirate Hat, 5, 2000, 1000, 40, 0, 4, 0, -8, 0, 2, 256, 0, 0, 0, {}, {}
-618, Goggles, Goggles, 5, 500, 100, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-619, LeatherGoggles, Leather Goggles, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-620, Circlet, Circlet, 5, 2000, 1000, 25, 0, 4, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
-621, Eyepatch, Eyepatch, 5, 1000, 500, 5, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-622, Bandana, Bandana, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-627, TopHat, Top Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-628, FunkyHat, Funky Hat, 5, 3000, 1500, 20, 0, 13, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-629, MushHat, Mush Hat, 5, 2500, 1250, 30, 0, 10, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-630, ShroomHat, Shroom Hat, 5, 3000, 1500, 30, 0, 13, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-633, ChristmasElfHat, Christmas Elf Hat, 5, 3000, 1500, 30, 0, 13, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-634, FaceMask, Face Mask, 5, 2500, 1250, 50, 0, 10, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-636, WarlordHelmet, Warlord Helmet, 5, 30000, 3000, 900, 0, 18, 0, -36, 0, 2, 256, 0, 0, 0, {}, {}
-637, KnightsHelmet, Knight's Helmet, 5, 20000, 2000, 600, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, {}, {}
-638, InfantryHelmet, Infantry Helmet, 5, 15000, 1500, 400, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, {}, {}
-639, CrusadeHelmet, Crusade Helmet, 5, 25000, 2500, 1300, 0, 18, 0, -36, 0, 2, 256, 0, 0, 0, {}, {}
-643, WhiteCowboyHat, White Cowboy Hat, 5, 1800, 900, 30, 0, 6, 0, -12, 0, 2, 256, 0, 0, 0, {}, {}
-644, BlackCowboyHat, Black Cowboy Hat, 5, 1800, 900, 30, 0, 6, 0, -12, 0, 2, 256, 0, 0, 0, {}, {}
-646, Crown, Crown, 5, 5000, 1000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-647, DevelopersCap, Developer's Cap, 5, 2000, 500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
-654, Cap, Cap, 5, 4000000, 500, 20, 0, 5, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-656, SerfHat, Serf Hat, 5, 500, 100, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-675, GraduationCap, Graduation Cap, 5, 1000, 250, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-678, NohMask, Noh Mask, 5, 7000, 1000, 18, 0, 3, 0, 1, 0, 2, 256, 0, 0, 0, {}, {}
-679, DemonMask, Demon Mask, 5, 10000, 5000, 23, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-721, HighPriestCrown, High Priest Crown, 5, 6000000, 5000, 400, 0, 4, 0, 20, 0, 2, 256, 0, 0, 0, {}, {bonus bMaxSP, 20;}
-722, MonsterSkullHelmet, Monster Skull Helmet, 5, 6000000, 3000, 250, 0, 7, 0, 10, 0, 2, 256, 0, 0, 0, {}, {bonus bMdef, 20;}
-723, DesertHat, Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-724, CottonHeadband, Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-725, GMCap, GM Cap, 5, 2000, 500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 0, 0, {}, {callfunc "RestrictedItem";}
-751, PinkieHat, Pinkie Hat, 5, 5000, 1000, 5, 0, 1, 0, 1, 0, 2, 256, 0, 0, 0, {}, {}
-752, FluffyHat, Fluffy Hat, 5, 7000, 2000, 10, 0, 2, 0, -5, 0, 2, 256, 0, 0, 0, {}, {}
-759, PaladinsHelmet, Paladin's Helmet, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-760, OverlordsHelmet, Overlord's Helmet, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-761, DesertHelmet, Desert Helmet, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-764, SailorHat, Sailor Hat, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-765, CaptainsHat, Captain's Hat, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-766, TerraniteHelmet, Terranite Helmet, 5, 30000, 3000, 300, 0, 15, 0, -12, 0, 2, 256, 0, 0, 0, {}, {bonus bMdef, 5;}
-769, GuyFawkesMask, Guy Fawkes Mask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-770, FairyHat, Fairy Hat, 5, 2000, 1000, 20, 0, 5, 0, -10, 0, 2, 256, 0, 0, 0, {}, {bonus bLuk, 3;}
-795, BromenalHelmet, Bromenal Helmet, 5, 15000, 1500, 400, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, {}, {}
-800, BowlerHatBrown, Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-801, PinkieHelmet, Pinkie Helmet, 5, 20000, 1500, 800, 0, 10, 0, -20, 0, 2, 256, 0, 0, 0, {}, {bonus bLuk, 1;}
-848, Earmuffs, Earmuffs, 5, 1000, 500, 20, 0, 2, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-854, ElfNightcap, Elf Nightcap, 5, 1000, 500, 50, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
-855, Sunglasses, Sunglasses, 5, 1000, 500, 10, 0, 2, 0, 6, 0, 2, 256, 0, 0, 0, {}, {}
-856, KnitCap, KnitCap, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-877, BullHelmet, Bull Helmet, 5, 90000, 60000, 1300, 0, 19, 0, -52, 0, 2, 256, 0, 90, 0, {}, {set @bStat, bStr;set @minbStatVal, 70;callfunc "RequireStat"; set @bStat, bVit;set @minbStatVal, 50;callfunc "RequireStat"; set @bStat, bLuk;set @minbStatVal, 50;callfunc "RequireStat"; bonus bAtkRange, -10; bonus bDoubleAddRate, 20; bonus bStr, 10; bonus bCritical, 15; bonus bAspdRate, 10; bonus bDef2Rate, -39; bonus bHit, -15;}
-882, RedEggshellHat, Red Eggshell Hat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
-883, BlueEggshellHat, Blue Eggshell Hat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
-884, YellowEggshellHat, Yellow Eggshell Hat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
-885, GreenEggshellHat, Green Eggshell Hat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
-886, OrangeEggshellHat, Orange Eggshell Hat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
-887, DarkEggshellHat, Dark Eggshell Hat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
-888, MagicGMTopHat, Magic GM Top Hat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, 60; callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;}
-889, MurdererCrown, Murderer Crown, 5, 75000, 12000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-890, BeanieCopter, Beanie Copter, 5, 8000, 2000, 20, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-897, RedRoseHat, Red Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
-898, WhiteRoseHat, White Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
-899, PinkRoseHat, Pink Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
-900, YellowRoseHat, Yellow Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
-901, OrangeRoseHat, Orange Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
-902, BlueRoseHat, Blue Rose Hat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
-905, BucketHat, Bucket Hat, 5, 1600, 800, 20, 0, 5, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-1173, TamOShanter, Tam O' Shanter, 5, 5000, 500, 20, 0, 9, 0, -2, 0, 2, 256, 0, 0, 0, {}, {}
-1174, CashiersShade, Cashier's Shade, 5, 4000, 500, 15, 0, 2, 0, -10, 0, 2, 256, 0, 0, 0, {}, {}
-1175, AutumnMask, Autumn Mask, 5, 5000, 500, 10, 0, 1, 0, 4, 0, 2, 256, 0, 0, 0, {}, {}
-1190, NutcrackerHat, NutcrackerHat, 5, 1000, 500, 20, 0, 5, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-1196, Beret, Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-1203, RangerHat, Ranger Hat, 5, 1000, 500, 20, 0, 2, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-1204, AntlerHat, Antler Hat, 5, 1000, 500, 15, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-1205, ChristmasTreeHat, Christmas Tree Hat, 5, 2000, 1000, 20, 0, 2, 0, 4, 0, 2, 256, 0, 0, 0, {}, {}
-1206, SantaBeardHat, Santa Beard Hat, 5, 1000, 500, 20, 0, 5, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-1214, BunnyEars, Bunny Ears, 5, 5000, 2000, 20, 0, 10, 0, 1, 0, 2, 256, 0, 0, 0, {}, {}
-1216, MoubooHead, Mouboo Head, 5, 10, 1, 80, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-1217, CatEars, Cat Ears, 5, 100, 50, 20, 0, 1, 0, 1, 0, 2, 256, 0, 0, 0, {}, {bonus bAgi, 3;}
-1218, PaperBag, Paper Bag, 5, 1000, 5, 10, 0, 1, 0, -1, 0, 2, 256, 0, 0, 0, {}, {bonus bAgi, -1;}
-1219, MoubootaurHead, Moubootaur Head, 5, 10, 1, 80, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, {}, {set@minLvl, 1;callfunc "RestrictedItem";}
-1220, BunchOfParsley, Bunch of Parsley, 5, 3, 1, 1, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, {}, {bonus bDeaf, 1;}
-1221, SkullMask, Skull Mask, 5, 10000, 5000, 150, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
-1242, SnowGoggles, Snow Goggles, 5, 7500, 5000, 10, 0, 5, 0, -2, 0, 2, 256, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-1247, HeartGlasses, Heart Glasses, 5, 7500, 5000, 20, 0, 4, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
-1255, RabbitEars, Rabbit Ears, 5, 7000, 5000, 20, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-1256, EggshellHat, Eggshell Hat, 5, 7000, 5000, 15, 0, 12, 0, 0, 0, 2, 256, 0, 1, 0, {}, {bonus bAgi, -1;}
-1276, OperaMask, Opera Mask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-1277, JesterMask, Jester Mask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-1278, WitchHat, Witch Hat, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-1279, GoblinMask, Goblin Mask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2130, RedDesertHat, Red Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2131, GreenDesertHat, Green Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2132, DarkBlueDesertHat, Dark Blue Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2133, YellowDesertHat, Yellow Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2134, LightBlueDesertHat, Light Blue Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2135, PinkDesertHat, Pink Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2136, BlackDesertHat, Black Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2137, OrangeDesertHat, Orange Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2138, PurpleDesertHat, Purple Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2139, DarkGreenDesertHat, Dark Green Desert Hat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
-2140, RedCottonHeadband, Red Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2141, GreenCottonHeadband, Green Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2142, DarkBlueCottonHeadband, Dark Blue Cotton Headba, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2143, YellowCottonHeadband, Yellow Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2144, LightBlueCottonHeadband, Light Blue Cotton Headb, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2145, PinkCottonHeadband, Pink Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2146, BlackCottonHeadband, Black Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2147, OrangeCottonHeadband, Orange Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2148, PurpleCottonHeadband, Purple Cotton Headband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2149, DarkGreenCottonHeadband, Dark Green Cotton Headb, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
-2190, RedRabbitEars, Red Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2191, GreenRabbitEars, Green Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2192, DarkBlueRabbitEars, Dark Blue Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2193, YellowRabbitEars, Yellow Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2194, LightBlueRabbitEars, Light Blue Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2195, PinkRabbitEars, Pink Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2196, BlackRabbitEars, Black Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2197, OrangeRabbitEars, Orange Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2198, PurpleRabbitEars, Purple Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2199, DarkGreenRabbitEars, Dark Green Rabbit Ears, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
-2200, RedWizardHat, Red Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2201, GreenWizardHat, Green Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2202, DarkBlueWizardHat, Dark Blue Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2203, YellowWizardHat, Yellow Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2204, LightBlueWizardHat, Light Blue Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2205, PinkWizardHat, Pink Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2206, BlackWizardHat, Black Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2207, OrangeWizardHat, Orange Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2208, PurpleWizardHat, Purple Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2209, DarkGreenWizardHat, Dark Green Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-2210, RedBowlerHat, Red Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2211, GreenBowlerHat, Green Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2212, DarkBlueBowlerHat, Dark Blue Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2213, YellowBowlerHat, Yellow Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2214, LightBlueBowlerHat, Light Blue Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2215, PinkBowlerHat, Pink Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2216, BlackBowlerHat, Black Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2217, OrangeBowlerHat, Orange Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2218, PurpleBowlerHat, Purple Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2219, DarkGreenBowlerHat, Dark Green Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2230, RedBowlerHatBrown, Red Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2231, GreenBowlerHatBrown, Green Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2232, DarkBlueBowlerHatBrown, Dark Blue Bowler Hat Br, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2233, YellowBowlerHatBrown, Yellow Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2234, LightBlueBowlerHatBrown, Light Blue Bowler Hat B, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2235, PinkBowlerHatBrown, Pink Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2236, BlackBowlerHatBrown, Black Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2237, OrangeBowlerHatBrown, Orange Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2238, PurpleBowlerHatBrown, Purple Bowler Hat Brown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2239, DarkGreenBowlerHatBrown, Dark Green Bowler Hat B, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-2260, RedBeret, Red Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2261, GreenBeret, Green Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2262, DarkBlueBeret, Dark Blue Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2263, YellowBeret, Yellow Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2264, LightBlueBeret, Light Blue Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2265, PinkBeret, Pink Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2266, BlackBeret, Black Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2267, OrangeBeret, Orange Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2268, PurpleBeret, Purple Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-2269, DarkGreenBeret, Dark Green Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-4020, CandleHelmet, Candle Helmet, 5, 20000, 2000, 450, 0, 16, 0, -25, 0, 2, 256, 0, 0, 0, {}, {bonus bInt, 1;bonus bAgi, -1;}
-4027, YetiMask, Yeti Mask, 5, 6000, 3000, 10, 0, 4, 0, -10, 0, 2, 256, 0, 0, 0, {}, {}
-4028, WizardHat, Wizard Hat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
-4030, BowlerHat, Bowler Hat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-4031, Monocle, Monocle, 5, 5000, 2500, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {bonus bDex, 1; bonus bLuk, 1; bonus bCritical, 10;}
-4032, PanHat, Pan Hat, 5, 1000, 500, 400, 0, 13, 0, -20, 0, 2, 256, 0, 0, 0, {}, {}
-4033, ChefHat, Chef Hat, 5, 1000, 500, 30, 0, 2, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
-4042, RedNose, Red Nose, 5, 4000, 1000, 4, 0, 2, 0, 7, 0, 2, 256, 0, 0, 0, {}, {}
-5128, DarkHelm, DarkHelm, 5, 50000, 10000, 800, 0, 19, 0, -80, 0, 2, 256, 0, 0, 0, {}, {callfunc "UnreleasedItem"; bonus bMaxHPrate, 10; bonus bAtkRange, -((readparam(bAtkRange)/2)); bonus bInt, -(readparam(bInt));}
-5129, UnderworldMask, UnderworldMask, 5, 50000, 10000, 100, 0, 9, 0, -40, 0, 2, 256, 0, 0, 0, {}, {callfunc "UnreleasedItem"; bonus bAtkRange, 1; bonus bInt, -(readparam(bInt));}
-5130, Phylactery, Phylactery, 5, 50000, 10000, 20, 0, 1, 0, 5, 0, 2, 256, 0, 0, 0, {}, {callfunc "UnreleasedItem"; bonus bAspdRate, 10; bonus bDex, -(readparam(bDex)/2);}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+511, SantaHat, 5, 400, 200, 20, 0, 2, 0, -2, 0, 2, 256, 0, 0, 0, {}, {}
+524, FancyHat, 5, 1600, 800, 20, 0, 5, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+525, MinersHat, 5, 800, 400, 40, 0, 4, 0, -8, 0, 2, 256, 0, 0, 0, {}, {}
+543, StandardHeadband, 5, 800, 400, 10, 0, 3, 0, -3, 0, 2, 256, 0, 0, 0, {}, {}
+544, SilkHeadband, 5, 5000, 2000, 10, 0, 10, 0, -10, 0, 2, 256, 0, 0, 0, {}, {}
+615, PumpkinHelmet, 5, 2000, 1000, 60, 0, 4, 0, -4, 0, 2, 256, 0, 0, 0, {}, {}
+616, AxeHat, 5, 2000, 1000, 50, 0, 4, 0, -4, 0, 2, 256, 0, 0, 0, {}, {}
+617, PirateHat, 5, 2000, 1000, 40, 0, 4, 0, -8, 0, 2, 256, 0, 0, 0, {}, {}
+618, Goggles, 5, 500, 100, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+619, LeatherGoggles, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+620, Circlet, 5, 2000, 1000, 25, 0, 4, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
+621, Eyepatch, 5, 1000, 500, 5, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+622, Bandana, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+627, TopHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+628, FunkyHat, 5, 3000, 1500, 20, 0, 13, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+629, MushHat, 5, 2500, 1250, 30, 0, 10, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+630, ShroomHat, 5, 3000, 1500, 30, 0, 13, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+633, ChristmasElfHat, 5, 3000, 1500, 30, 0, 13, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+634, FaceMask, 5, 2500, 1250, 50, 0, 10, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+636, WarlordHelmet, 5, 30000, 3000, 900, 0, 18, 0, -36, 0, 2, 256, 0, 0, 0, {}, {}
+637, KnightsHelmet, 5, 20000, 2000, 600, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, {}, {}
+638, InfantryHelmet, 5, 15000, 1500, 400, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, {}, {}
+639, CrusadeHelmet, 5, 25000, 2500, 1300, 0, 18, 0, -36, 0, 2, 256, 0, 0, 0, {}, {}
+643, WhiteCowboyHat, 5, 1800, 900, 30, 0, 6, 0, -12, 0, 2, 256, 0, 0, 0, {}, {}
+644, BlackCowboyHat, 5, 1800, 900, 30, 0, 6, 0, -12, 0, 2, 256, 0, 0, 0, {}, {}
+646, Crown, 5, 5000, 1000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+647, DevelopersCap, 5, 2000, 500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
+654, Cap, 5, 4000000, 500, 20, 0, 5, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+656, SerfHat, 5, 500, 100, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+675, GraduationCap, 5, 1000, 250, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+678, NohMask, 5, 7000, 1000, 18, 0, 3, 0, 1, 0, 2, 256, 0, 0, 0, {}, {}
+679, DemonMask, 5, 10000, 5000, 23, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+721, HighPriestCrown, 5, 6000000, 5000, 400, 0, 4, 0, 20, 0, 2, 256, 0, 0, 0, {}, {bonus bMaxSP, 20;}
+722, MonsterSkullHelmet, 5, 6000000, 3000, 250, 0, 7, 0, 10, 0, 2, 256, 0, 0, 0, {}, {bonus bMdef, 20;}
+723, DesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+724, CottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+725, GMCap, 5, 2000, 500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 0, 0, {}, {callfunc "RestrictedItem";}
+751, PinkieHat, 5, 5000, 1000, 5, 0, 1, 0, 1, 0, 2, 256, 0, 0, 0, {}, {}
+752, FluffyHat, 5, 7000, 2000, 10, 0, 2, 0, -5, 0, 2, 256, 0, 0, 0, {}, {}
+759, PaladinsHelmet, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+760, OverlordsHelmet, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+761, DesertHelmet, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+764, SailorHat, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+765, CaptainsHat, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+766, TerraniteHelmet, 5, 30000, 3000, 300, 0, 15, 0, -12, 0, 2, 256, 0, 0, 0, {}, {bonus bMdef, 5;}
+769, GuyFawkesMask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+770, FairyHat, 5, 2000, 1000, 20, 0, 5, 0, -10, 0, 2, 256, 0, 0, 0, {}, {bonus bLuk, 3;}
+795, BromenalHelmet, 5, 15000, 1500, 400, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, {}, {}
+800, BowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+801, PinkieHelmet, 5, 20000, 1500, 800, 0, 10, 0, -20, 0, 2, 256, 0, 0, 0, {}, {bonus bLuk, 1;}
+848, Earmuffs, 5, 1000, 500, 20, 0, 2, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+854, ElfNightcap, 5, 1000, 500, 50, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
+855, Sunglasses, 5, 1000, 500, 10, 0, 2, 0, 6, 0, 2, 256, 0, 0, 0, {}, {}
+856, KnitCap, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+877, BullHelmet, 5, 90000, 60000, 1300, 0, 19, 0, -52, 0, 2, 256, 0, 90, 0, {}, {set @bStat, Str;set @minbStatVal, 70;callfunc "RequireStat"; set @bStat, Vit;set @minbStatVal, 50;callfunc "RequireStat"; set @bStat, Luk;set @minbStatVal, 50;callfunc "RequireStat"; bonus bAtkRange, -10; bonus bDoubleAddRate, 20; bonus bStr, 10; bonus bCritical, 15; bonus bAspdRate, 10; bonus bDef2Rate, -39; bonus bHit, -15;}
+882, RedEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
+883, BlueEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
+884, YellowEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
+885, GreenEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
+886, OrangeEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
+887, DarkEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {}
+888, MagicGMTopHat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, 60; callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;}
+889, MurdererCrown, 5, 75000, 12000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+890, BeanieCopter, 5, 8000, 2000, 20, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+897, RedRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
+898, WhiteRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
+899, PinkRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
+900, YellowRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
+901, OrangeRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
+902, BlueRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {}
+905, BucketHat, 5, 1600, 800, 20, 0, 5, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+1173, TamOShanter, 5, 5000, 500, 20, 0, 9, 0, -2, 0, 2, 256, 0, 0, 0, {}, {}
+1174, CashiersShade, 5, 4000, 500, 15, 0, 2, 0, -10, 0, 2, 256, 0, 0, 0, {}, {}
+1175, AutumnMask, 5, 5000, 500, 10, 0, 1, 0, 4, 0, 2, 256, 0, 0, 0, {}, {}
+1190, NutcrackerHat, 5, 1000, 500, 20, 0, 5, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+1196, Beret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+1203, RangerHat, 5, 1000, 500, 20, 0, 2, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+1204, AntlerHat, 5, 1000, 500, 15, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+1205, ChristmasTreeHat, 5, 2000, 1000, 20, 0, 2, 0, 4, 0, 2, 256, 0, 0, 0, {}, {}
+1206, SantaBeardHat, 5, 1000, 500, 20, 0, 5, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+1214, BunnyEars, 5, 5000, 2000, 20, 0, 10, 0, 1, 0, 2, 256, 0, 0, 0, {}, {}
+1216, MoubooHead, 5, 10, 1, 80, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+1217, CatEars, 5, 100, 50, 20, 0, 1, 0, 1, 0, 2, 256, 0, 0, 0, {}, {bonus bAgi, 3;}
+1218, PaperBag, 5, 1000, 5, 10, 0, 1, 0, -1, 0, 2, 256, 0, 0, 0, {}, {bonus bAgi, -1;}
+1219, MoubootaurHead, 5, 10, 1, 80, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, {}, {set@minLvl, 1;callfunc "RestrictedItem";}
+1220, BunchOfParsley, 5, 3, 1, 1, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, {}, {bonus bDeaf, 1;}
+1221, SkullMask, 5, 10000, 5000, 150, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
+1242, SnowGoggles, 5, 7500, 5000, 10, 0, 5, 0, -2, 0, 2, 256, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+1247, HeartGlasses, 5, 7500, 5000, 20, 0, 4, 0, 5, 0, 2, 256, 0, 0, 0, {}, {}
+1255, RabbitEars, 5, 7000, 5000, 20, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+1256, EggshellHat, 5, 7000, 5000, 15, 0, 12, 0, 0, 0, 2, 256, 0, 1, 0, {}, {bonus bAgi, -1;}
+1276, OperaMask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+1277, JesterMask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+1278, WitchHat, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+1279, GoblinMask, 5, 1000, 500, 50, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2130, RedDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2131, GreenDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2132, DarkBlueDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2133, YellowDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2134, LightBlueDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2135, PinkDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2136, BlackDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2137, OrangeDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2138, PurpleDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2139, DarkGreenDesertHat, 5, 2400, 600, 20, 0, 3, 0, -1, 0, 2, 256, 0, 0, 0, {}, {}
+2140, RedCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2141, GreenCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2142, DarkBlueCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2143, YellowCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2144, LightBlueCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2145, PinkCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2146, BlackCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2147, OrangeCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2148, PurpleCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2149, DarkGreenCottonHeadband, 5, 3000, 500, 5, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {}
+2190, RedRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2191, GreenRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2192, DarkBlueRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2193, YellowRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2194, LightBlueRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2195, PinkRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2196, BlackRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2197, OrangeRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2198, PurpleRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2199, DarkGreenRabbitEars, 5, 7000, 5000, 15, 0, 5, 0, 4, 0, 2, 256, 0, 1, 0, {}, {}
+2200, RedWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2201, GreenWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2202, DarkBlueWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2203, YellowWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2204, LightBlueWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2205, PinkWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2206, BlackWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2207, OrangeWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2208, PurpleWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2209, DarkGreenWizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+2210, RedBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2211, GreenBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2212, DarkBlueBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2213, YellowBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2214, LightBlueBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2215, PinkBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2216, BlackBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2217, OrangeBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2218, PurpleBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2219, DarkGreenBowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2230, RedBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2231, GreenBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2232, DarkBlueBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2233, YellowBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2234, LightBlueBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2235, PinkBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2236, BlackBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2237, OrangeBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2238, PurpleBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2239, DarkGreenBowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+2260, RedBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2261, GreenBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2262, DarkBlueBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2263, YellowBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2264, LightBlueBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2265, PinkBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2266, BlackBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2267, OrangeBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2268, PurpleBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+2269, DarkGreenBeret, 5, 1000, 500, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, {bonus bAgi, 2;}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+4020, CandleHelmet, 5, 20000, 2000, 450, 0, 16, 0, -25, 0, 2, 256, 0, 0, 0, {}, {bonus bInt, 1;bonus bAgi, -1;}
+4027, YetiMask, 5, 6000, 3000, 10, 0, 4, 0, -10, 0, 2, 256, 0, 0, 0, {}, {}
+4028, WizardHat, 5, 5000, 2500, 20, 0, 5, 0, 5, 0, 2, 256, 0, 1, 0, {}, {bonus bInt, 3;}
+4030, BowlerHat, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+4031, Monocle, 5, 5000, 2500, 20, 0, 2, 0, 0, 0, 2, 256, 0, 0, 0, {}, {bonus bDex, 1; bonus bLuk, 1; bonus bCritical, 10;}
+4032, PanHat, 5, 1000, 500, 400, 0, 13, 0, -20, 0, 2, 256, 0, 0, 0, {}, {}
+4033, ChefHat, 5, 1000, 500, 30, 0, 2, 0, 2, 0, 2, 256, 0, 0, 0, {}, {}
+4042, RedNose, 5, 4000, 1000, 4, 0, 2, 0, 7, 0, 2, 256, 0, 0, 0, {}, {}
+5128, DarkHelm, 5, 50000, 10000, 800, 0, 19, 0, -80, 0, 2, 256, 0, 0, 0, {}, {callfunc "UnreleasedItem"; bonus bMaxHPrate, 10; bonus bAtkRange, -((bAtkRange/2)); bonus bInt, -Int;}
+5129, UnderworldMask, 5, 50000, 10000, 100, 0, 9, 0, -40, 0, 2, 256, 0, 0, 0, {}, {callfunc "UnreleasedItem"; bonus bAtkRange, 1; bonus bInt, -Int;}
+5130, Phylactery, 5, 50000, 10000, 20, 0, 1, 0, 5, 0, 2, 256, 0, 0, 0, {}, {callfunc "UnreleasedItem"; bonus bAspdRate, 10; bonus bDex, -(Dex/2);}
diff --git a/world/map/db/item_db_leg.txt b/world/map/db/item_db_leg.txt
index 173b8f98..eb3e7807 100644
--- a/world/map/db/item_db_leg.txt
+++ b/world/map/db/item_db_leg.txt
@@ -1,57 +1,57 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-586, CottonShorts, Cotton Shorts, 5, 1000, 500, 15, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-610, JeansShorts, Jeans Shorts, 5, 2000, 1000, 25, 0, 4, 0, -8, 0, 2, 1, 0, 0, 0, {}, {}
-632, CottonSkirt, Cotton Skirt, 5, 1000, 500, 10, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-642, JeansChaps, Jeans Chaps, 5, 2000, 1000, 60, 0, 6, 0, -12, 0, 2, 1, 0, 0, 0, {}, {}
-648, CottonTrousers, Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-731, AssassinPants, Assassin Pants, 5, 10000, 3000, 20, 0, 5, 0, -5, 0, 2, 1, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 8;}
-768, TerraniteLegs, Terranite Legs, 5, 10000, 3000, 30, 0, 5, 0, -8, 0, 2, 1, 0, 0, 0, {}, {bonus bAgi, 1;bonus bMdef, 5;}
-771, Miniskirt, Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-796, BromenalLegs, Bromenal Legs, 5, 2000, 1000, 150, 0, 6, 0, -12, 0, 2, 1, 0, 0, 0, {}, {}
-857, LeatherTrousers, Leather Trousers, 5, 1000, 500, 25, 0, 5, 0, -4, 0, 2, 1, 0, 0, 0, {}, {bonus bHit, 2;}
-881, RaggedShorts, Ragged Shorts, 5, 60, 1, 7, 0, 1, 0, -2, 0, 2, 1, 0, 1, 0, {}, {}
-1172, SilkPants, Silk Pants, 5, 20000, 750, 10, 0, 2, 0, 0, 0, 2, 1, 0, 1, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2100, RedCottonSkirt, Red Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2101, GreenCottonSkirt, Green Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2102, DarkBlueCottonSkirt, Dark Blue Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2103, YellowCottonSkirt, Yellow Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2104, LightBlueCottonSkirt, Light Blue Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2105, PinkCottonSkirt, Pink Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2106, BlackCottonSkirt, Black Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2107, OrangeCottonSkirt, Orange Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2108, PurpleCottonSkirt, Purple Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2109, DarkGreenCottonSkirt, Dark Green Cotton Skirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2110, RedCottonShorts, Red Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2111, GreenCottonShorts, Green Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2112, DarkBlueCottonShorts, Dark Blue Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2113, YellowCottonShorts, Yellow Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2114, LightBlueCottonShorts, Light Blue Cotton Short, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2115, PinkCottonShorts, Pink Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2116, BlackCottonShorts, Black Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2117, OrangeCottonShorts, Orange Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2118, PurpleCottonShorts, Purple Cotton Shorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-2119, DarkGreenCottonShorts, Dark Green Cotton Short, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-2170, RedMiniskirt, Red Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2171, GreenMiniskirt, Green Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2172, DarkBlueMiniskirt, Dark Blue Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2173, YellowMiniskirt, Yellow Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2174, LightBlueMiniskirt, Light Blue Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2175, PinkMiniskirt, Pink Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2176, BlackMiniskirt, Black Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2177, OrangeMiniskirt, Orange Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2178, PurpleMiniskirt, Purple Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2179, DarkGreenMiniskirt, Dark Green Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
-2180, RedCottonTrousers, Red Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2181, GreenCottonTrousers, Green Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2182, DarkBlueCottonTrousers, Dark Blue Cotton Trouse, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2183, YellowCottonTrousers, Yellow Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2184, LightBlueCottonTrousers, Light Blue Cotton Trous, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2185, PinkCottonTrousers, Pink Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2186, BlackCottonTrousers, Black Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2187, OrangeCottonTrousers, Orange Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2188, PurpleCottonTrousers, Purple Cotton Trousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-2189, DarkGreenCottonTrousers, Dark Green Cotton Trous, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+586, CottonShorts, 5, 1000, 500, 15, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+610, JeansShorts, 5, 2000, 1000, 25, 0, 4, 0, -8, 0, 2, 1, 0, 0, 0, {}, {}
+632, CottonSkirt, 5, 1000, 500, 10, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+642, JeansChaps, 5, 2000, 1000, 60, 0, 6, 0, -12, 0, 2, 1, 0, 0, 0, {}, {}
+648, CottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+731, AssassinPants, 5, 10000, 3000, 20, 0, 5, 0, -5, 0, 2, 1, 0, 0, 0, {}, {callfunc "UnreleasedItem";bonus bAgi, 8;}
+768, TerraniteLegs, 5, 10000, 3000, 30, 0, 5, 0, -8, 0, 2, 1, 0, 0, 0, {}, {bonus bAgi, 1;bonus bMdef, 5;}
+771, Miniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+796, BromenalLegs, 5, 2000, 1000, 150, 0, 6, 0, -12, 0, 2, 1, 0, 0, 0, {}, {}
+857, LeatherTrousers, 5, 1000, 500, 25, 0, 5, 0, -4, 0, 2, 1, 0, 0, 0, {}, {bonus bHit, 2;}
+881, RaggedShorts, 5, 60, 1, 7, 0, 1, 0, -2, 0, 2, 1, 0, 1, 0, {}, {}
+1172, SilkPants, 5, 20000, 750, 10, 0, 2, 0, 0, 0, 2, 1, 0, 1, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2100, RedCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2101, GreenCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2102, DarkBlueCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2103, YellowCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2104, LightBlueCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2105, PinkCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2106, BlackCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2107, OrangeCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2108, PurpleCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2109, DarkGreenCottonSkirt, 5, 1000, 500, 20, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2110, RedCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2111, GreenCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2112, DarkBlueCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2113, YellowCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2114, LightBlueCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2115, PinkCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2116, BlackCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2117, OrangeCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2118, PurpleCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+2119, DarkGreenCottonShorts, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 1, 0, 1, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+2170, RedMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2171, GreenMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2172, DarkBlueMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2173, YellowMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2174, LightBlueMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2175, PinkMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2176, BlackMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2177, OrangeMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2178, PurpleMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2179, DarkGreenMiniskirt, 5, 1000, 500, 8, 0, 4, 0, -8, 0, 2, 1, 0, 1, 0, {}, {}
+2180, RedCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2181, GreenCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2182, DarkBlueCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2183, YellowCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2184, LightBlueCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2185, PinkCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2186, BlackCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2187, OrangeCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2188, PurpleCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+2189, DarkGreenCottonTrousers, 5, 1500, 750, 25, 0, 4, 0, -6, 0, 2, 1, 0, 1, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
diff --git a/world/map/db/item_db_offhand.txt b/world/map/db/item_db_offhand.txt
index a36e1778..1752315d 100644
--- a/world/map/db/item_db_offhand.txt
+++ b/world/map/db/item_db_offhand.txt
@@ -1,7 +1,7 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-585, ScarabArmlet, Scarab Armlet, 5, 8000, 4000, 200, 0, 0, 0, 5, 0, 2, 32, 0, 1, 0, {}, {}
-601, SteelShield, Steel Shield, 5, 40000, 3000, 2500, 0, 20, 0, -200, 0, 2, 32, 0, 0, 0, {}, {}
-602, WoodenShield, Wooden Shield, 5, 10000, 2000, 1500, 0, 14, 0, -70, 0, 2, 32, 0, 0, 0, {}, {}
-603, LeatherShield, Leather Shield, 5, 2000, 1000, 1300, 0, 7, 0, -35, 0, 2, 32, 0, 0, 0, {}, {}
-797, BromenalShield, Bromenal Shield, 5, 40000, 3000, 2500, 0, 20, 0, -200, 0, 2, 32, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+585, ScarabArmlet, 5, 8000, 4000, 200, 0, 0, 0, 5, 0, 2, 32, 0, 1, 0, {}, {}
+601, SteelShield, 5, 40000, 3000, 2500, 0, 20, 0, -200, 0, 2, 32, 0, 0, 0, {}, {}
+602, WoodenShield, 5, 10000, 2000, 1500, 0, 14, 0, -70, 0, 2, 32, 0, 0, 0, {}, {}
+603, LeatherShield, 5, 2000, 1000, 1300, 0, 7, 0, -35, 0, 2, 32, 0, 0, 0, {}, {}
+797, BromenalShield, 5, 40000, 3000, 2500, 0, 20, 0, -200, 0, 2, 32, 0, 0, 0, {}, {}
diff --git a/world/map/db/item_db_trinket.txt b/world/map/db/item_db_trinket.txt
index fce3f06e..ae2a1a1f 100644
--- a/world/map/db/item_db_trinket.txt
+++ b/world/map/db/item_db_trinket.txt
@@ -1,20 +1,20 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-702, WeddingRing, Wedding Ring, 5, 1000, 1, 1, 0, 0, 0, 0, 0, 2, 16, 0, 0, 0, {}, {}
-742, FourLeafClover, Four-Leaf Clover, 5, 10000, 5000, 1, 0, 0, 0, 5, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 1;}
-749, Towel, Towel, 5, 800, 250, 50, 0, 0, 0, 5, 0, 2, 8, 0, 0, 0, {}, {}
-829, CrozeniteFourLeafAmulet, Crozenite Four-Leaf Amu, 5, 10000, 1000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 1;}
-830, BromenalFourLeafAmulet, Bromenal Four-Leaf Amul, 5, 20000, 2000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 2;}
-831, SilverFourLeafAmulet, Silver Four-Leaf Amulet, 5, 30000, 3000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 3;}
-832, GoldenFourLeafAmulet, Golden Four-Leaf Amulet, 5, 40000, 4000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 4;}
-865, Grimoire, Grimoire, 5, 5000, 2500, 100, 0, 0, 0, 5, 0, 2, 8, 0, 0, 0, {}, {bonus bMaxSP, 30;}
-879, HeartOfIsis, Heart of Isis, 5, 70000, 35000, 40, 0, 0, 0, 0, 0, 2, 8, 0, 85, 0, {}, {bonus bMaxHPrate, 15; bonus bHPrecovRate, 65;}
-1197, SkeletonCharm, Skeleton Charm, 5, 0, 0, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, { callfunc "CheckMunro"; }
-1244, DarkTalisman, Dark Talisman, 5, 0, 0, 0, 0, 30, 0, 100, 0, 2, 8, 0, 0, 0, {}, {set @minLvl, 1;callfunc "RestrictedItem";}
-4008, DiamondRing, Diamond Ring, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bVit, 1;}
-4009, RubyRing, Ruby Ring, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bStr, 1;}
-4010, EmeraldRing, Emerald Ring, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bLuk, 1;}
-4011, SapphireRing, Sapphire Ring, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bInt, 1;}
-4012, TopazRing, Topaz Ring, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bAgi, 1;}
-4013, AmethystRing, Amethyst Ring, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bDex, 1;}
-4014, SimpleRing, Simple Ring, 5, 100000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+702, WeddingRing, 5, 1000, 1, 1, 0, 0, 0, 0, 0, 2, 16, 0, 0, 0, {}, {}
+742, FourLeafClover, 5, 10000, 5000, 1, 0, 0, 0, 5, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 1;}
+749, Towel, 5, 800, 250, 50, 0, 0, 0, 5, 0, 2, 8, 0, 0, 0, {}, {}
+829, CrozeniteFourLeafAmulet, 5, 10000, 1000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 1;}
+830, BromenalFourLeafAmulet, 5, 20000, 2000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 2;}
+831, SilverFourLeafAmulet, 5, 30000, 3000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 3;}
+832, GoldenFourLeafAmulet, 5, 40000, 4000, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, {bonus bLuk, 4;}
+865, Grimoire, 5, 5000, 2500, 100, 0, 0, 0, 5, 0, 2, 8, 0, 0, 0, {}, {bonus bMaxSP, 30;}
+879, HeartOfIsis, 5, 70000, 35000, 40, 0, 0, 0, 0, 0, 2, 8, 0, 85, 0, {}, {bonus bMaxHPrate, 15; bonus bHPrecovRate, 65;}
+1197, SkeletonCharm, 5, 0, 0, 10, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, {}, { callfunc "CheckMunro"; }
+1244, DarkTalisman, 5, 0, 0, 0, 0, 30, 0, 100, 0, 2, 8, 0, 0, 0, {}, {set @minLvl, 1;callfunc "RestrictedItem";}
+4008, DiamondRing, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bVit, 1;}
+4009, RubyRing, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bStr, 1;}
+4010, EmeraldRing, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bLuk, 1;}
+4011, SapphireRing, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bInt, 1;}
+4012, TopazRing, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bAgi, 1;}
+4013, AmethystRing, 5, 5000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {bonus bDex, 1;}
+4014, SimpleRing, 5, 100000, 2500, 1, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, {}, {}
diff --git a/world/map/db/item_db_use.txt b/world/map/db/item_db_use.txt
index c0a736b4..4f69c2f5 100644
--- a/world/map/db/item_db_use.txt
+++ b/world/map/db/item_db_use.txt
@@ -1,96 +1,96 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-0, DEFAULT, Default, 0, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
-501, CactusDrink, Cactus Drink, 0, 50, 25, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 15, 0, 1;}, {}
-502, CactusPotion, Cactus Potion, 0, 70, 35, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 25, 0, 1;}, {}
-506, CandyCane, Candy Cane, 0, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 5, 0, 1;}, {}
-508, XmasCake, Xmas Cake, 0, 70, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
-509, ChocolateBar, Chocolate Bar, 0, 60, 20, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 20, 0, 1;}, {}
-510, Candy, Candy, 0, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 5, 0, 1;}, {}
-512, GingerBreadMan, Ginger Bread Man, 0, 50, 25, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 25, 0, 1;}, {}
-513, Cake, Cake, 0, 30, 15, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 15, 0, 1;}, {}
-514, XmasCandyCane, Xmas Candy Cane, 0, 30, 15, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
-519, CherryCake, Cherry Cake, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 35, 0, 1;}, {}
-520, EasterEgg, Easter Egg, 0, 200, 100, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
-527, Milk, Milk, 0, 300, 150, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 150, 0, 1;}, {}
-533, RoastedMaggot, Roasted Maggot, 0, 110, 55, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 150, 0, 1;}, {}
-534, OrangeCupcake, Orange Cupcake, 0, 90, 45, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
-535, RedApple, Red Apple, 0, 25, 6, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
-539, Beer, Beer, 0, 175, 87, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 5, 1;}, {}
-541, BottleOfWater, Bottle of Water, 0, 200, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 250, 0, 1;getitem 540, 1;}, {}
-562, ChickenLeg, Chicken Leg, 0, 250, 125, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 500, 0, 1;}, {}
-565, PinkPetal, Pink Petal, 0, 100, 50, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
-566, SmallMushroom, Small Mushroom, 0, 125, 50, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
-567, IronPotion, Iron Potion, 0, 500, 250, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackstrength, 60, 60;}, {}
-568, ConcentrationPotion, Concentration Potion, 0, 500, 250, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackspeed0, 60, 30;}, {}
-657, Orange, Orange, 0, 40, 10, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 60, 0, 1;}, {}
-676, Steak, Steak, 0, 275, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 250, 0, 1;}, {}
-684, TinyHealingPotion, Tiny Healing Potion, 0, 25, 12, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
-685, SmallHealingPotion, Small Healing Potion, 0, 50, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 0, 1;}, {}
-686, MediumHealingPotion, Medium Healing Potion, 0, 100, 50, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 400, 0, 1;}, {}
-687, LargeHealingPotion, Large Healing Potion, 0, 200, 100, 25, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
-705, ManaPotion, Mana Potion, 0, 2000, 300, 50, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 10, 1;callfunc "MagicGainBasic";}, {}
-714, SnakeEgg, Snake Egg, 0, 50, 25, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 30, 0, 1;}, {}
-715, MountainSnakeEgg, Mountain Snake Egg, 0, 80, 40, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 40, 0, 1;}, {}
-716, GrassSnakeEgg, Grass Snake Egg, 0, 100, 50, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
-717, CaveSnakeEgg, Cave Snake Egg, 0, 60, 30, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 20, 0, 1;}, {}
-719, GreenApple, Green Apple, 0, 20, 5, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 45, 0, 1;}, {}
-733, PurificationPotion, Purification Potion, 0, 0, 0, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "usePurificationPotion";}, {}
-736, WhiteCake, White Cake, 0, 500, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
-737, ChocolateCake, Chocolate Cake, 0, 550, 125, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 11, 0, 1;}, {}
-738, OrangeCake, Orange Cake, 0, 600, 150, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 12, 0, 1;}, {}
-739, AppleCake, Apple Cake, 0, 600, 150, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 12, 0, 1;}, {}
-743, Acorn, Acorn, 0, 50, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 3, 0, 1;}, {}
-744, DilutedConcentrationPot, Diluted Concentration P, 0, 250, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackspeed0, 30, 20;}, {}
-745, DarkConcentrationPotion, Dark Concentration Poti, 0, 50, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackspeed0, 10, 40;sc_start sc_poison, 1, 50;}, {}
-747, LacedChocolateCake, Laced Chocolate Cake, 0, 550, 125, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 11, 0, 1;}, {}
-748, LacedOrangeCupcake, Laced Orange Cupcake, 0, 90, 45, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-750, SlowPoisonPotion, Slow Poison Potion, 0, 500, 200, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 5, 0, 1;sc_start sc_slowpoison, 180000, 180;}, {}
-784, ZombieNachos, Zombie Nachos, 0, 100, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 60, 0, 1;}, {}
-785, LadyFingers, Lady Fingers, 0, 70, 25, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 40, 0, 1;}, {}
-786, JellAhh, Jell-Ahh, 0, 80, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
-787, Snapple, Snapple, 0, 110, 55, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 70, 0, 1;}, {}
-788, BeetleJuice, Beetle Juice, 0, 80, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
-789, GutBuster, Gut Buster Ale, 0, 100, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 60, 0, 1;}, {}
-790, BloodWine, Blood Wine, 0, 150, 50, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
-808, HitchhikersTowel, Hitchhiker's Towel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "HitchhikersTowel"; callfunc "WarpTowel";}, {}
-809, WhiteHitchhikersTowel, White Hitchhiker's Towe, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "WhiteHitchhikersTowel"; callfunc "WarpTowel";}, {}
-810, RedHitchhikersTowel, Red Hitchhiker's Towel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "RedHitchhikersTowel"; callfunc "WarpTowel";}, {}
-811, GreenHitchhikersTowel, Green Hitchhiker's Towe, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "GreenHitchhikersTowel"; callfunc "WarpTowel";}, {}
-812, BlueHitchhikersTowel, Blue Hitchhiker's Towel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "BlueHitchhikersTowel"; callfunc "WarpTowel";}, {}
-813, YellowHitchhikersTowel, Yellow Hitchhiker's Tow, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "YellowHitchhikersTowel"; callfunc "WarpTowel";}, {}
-814, PurpleHitchhikersTowel, Purple Hitchhiker's Tow, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "PurpleHitchhikersTowel"; callfunc "WarpTowel";}, {}
-815, OrangeHitchhikersTowel, Orange Hitchhiker's Tow, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "OrangeHitchhikersTowel"; callfunc "WarpTowel";}, {}
-816, PinkHitchhikersTowel, Pink Hitchhiker's Towel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "PinkHitchhikersTowel"; callfunc "WarpTowel";}, {}
-817, TealHitchhikersTowel, Teal Hitchhiker's Towel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "TealHitchhikersTowel"; callfunc "WarpTowel";}, {}
-818, LimeHitchhikersTowel, Lime Hitchhiker's Towel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "LimeHitchhikersTowel"; callfunc "WarpTowel";}, {}
-825, TinyManaElixir, Tiny Mana Elixir, 0, 100, 10, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 25, 1;}, {}
-826, SmallManaElixir, Small Mana Elixir, 0, 200, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 50, 1;}, {}
-827, MediumManaElixir, Medium Mana Elixir, 0, 400, 40, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 100, 1;}, {}
-828, LargeManaElixir, Large Mana Elixir, 0, 800, 80, 25, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 250, 1;}, {}
-838, CranberryLollipop, Cranberry Lollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 750, 0, 1;}, {}
-839, GrapeLollipop, Grape Lollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 750, 0, 1;}, {}
-840, OrangeLollipop, Orange Lollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 750, 0, 1;}, {}
-1189, PollettEgg, PollettEgg, 0, 250, 25, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 75, 10, 1;}, {}
-1229, CaramelApple, Caramel Apple, 0, 500, 75, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 1000, 0, 1;}, {}
-1230, LollipopColor1, Booberry Blue Lollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
-1231, LollipopColor2, Ghastly Green Lollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
-1232, LollipopColor3, Blood Red Lollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
-1248, Blueberries, Blueberries, 0, 50, 25, 6, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 0, 1;}, {}
-1250, Pear, Pear, 0, 50, 25, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 150, 0, 1;}, {}
-1251, Plum, Plum, 0, 50, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
-1252, Cherry, Cherry, 0, 50, 25, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
-1253, GoldenDeliciousApple, Golden Delicious Apple, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 0, 1;}, {}
-1258, Honey, Honey, 0, 100, 80, 20, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 45, 0, 1;}, {}
-1280, Scissors, Scissors, 0, 1000, 500, 120, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useScissors";}, {}
-1281, ShockSweet, Shock Sweet, 0, 1000, 500, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useShockSweet";}, {}
-3001, RubberBat, Rubber Bat, 0, 200, 100, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {misceffect 403;getitem 3001,1;}, {}
-3006, TonoriDelight, Tonori Delight, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 2, 1;}, {}
-3007, Marshmallow, Marshmallow, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
-3009, JellySkull, Jelly Skull, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
-3010, CandyPumpkin, Candy Pumpkin, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
-4035, PickledBeets, Pickled Beets, 0, 100, 50, 150, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1; setlook LOOK_HAIR_COLOR, HC_PURPLE;}, {}
-4036, RoastedAcorn, Roasted Acorn, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 15, 0, 1;}, {}
-5126, MTJarofOwnBlood, MTJar of Own Blood, 0, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {heal -250, 0;getitem 5127, 1;}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+0, DEFAULT, 0, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {}, {}
+501, CactusDrink, 0, 50, 25, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 15, 0, 1;}, {}
+502, CactusPotion, 0, 70, 35, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 25, 0, 1;}, {}
+506, CandyCane, 0, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 5, 0, 1;}, {}
+508, XmasCake, 0, 70, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
+509, ChocolateBar, 0, 60, 20, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 20, 0, 1;}, {}
+510, Candy, 0, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 5, 0, 1;}, {}
+512, GingerBreadMan, 0, 50, 25, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 25, 0, 1;}, {}
+513, Cake, 0, 30, 15, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 15, 0, 1;}, {}
+514, XmasCandyCane, 0, 30, 15, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
+519, CherryCake, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 35, 0, 1;}, {}
+520, EasterEgg, 0, 200, 100, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
+527, Milk, 0, 300, 150, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 150, 0, 1;}, {}
+533, RoastedMaggot, 0, 110, 55, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 150, 0, 1;}, {}
+534, OrangeCupcake, 0, 90, 45, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
+535, RedApple, 0, 25, 6, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
+539, Beer, 0, 175, 87, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 5, 1;}, {}
+541, BottleOfWater, 0, 200, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 250, 0, 1;getitem 540, 1;}, {}
+562, ChickenLeg, 0, 250, 125, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 500, 0, 1;}, {}
+565, PinkPetal, 0, 100, 50, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
+566, SmallMushroom, 0, 125, 50, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
+567, IronPotion, 0, 500, 250, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackstrength, 60, 60;}, {}
+568, ConcentrationPotion, 0, 500, 250, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackspeed0, 60, 30;}, {}
+657, Orange, 0, 40, 10, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 60, 0, 1;}, {}
+676, Steak, 0, 275, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 250, 0, 1;}, {}
+684, TinyHealingPotion, 0, 25, 12, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
+685, SmallHealingPotion, 0, 50, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 0, 1;}, {}
+686, MediumHealingPotion, 0, 100, 50, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 400, 0, 1;}, {}
+687, LargeHealingPotion, 0, 200, 100, 25, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
+705, ManaPotion, 0, 2000, 300, 50, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 10, 1;callfunc "MagicGainBasic";}, {}
+714, SnakeEgg, 0, 50, 25, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 30, 0, 1;}, {}
+715, MountainSnakeEgg, 0, 80, 40, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 40, 0, 1;}, {}
+716, GrassSnakeEgg, 0, 100, 50, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
+717, CaveSnakeEgg, 0, 60, 30, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 20, 0, 1;}, {}
+719, GreenApple, 0, 20, 5, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 45, 0, 1;}, {}
+733, PurificationPotion, 0, 0, 0, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "usePurificationPotion";}, {}
+736, WhiteCake, 0, 500, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
+737, ChocolateCake, 0, 550, 125, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 11, 0, 1;}, {}
+738, OrangeCake, 0, 600, 150, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 12, 0, 1;}, {}
+739, AppleCake, 0, 600, 150, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 12, 0, 1;}, {}
+743, Acorn, 0, 50, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 3, 0, 1;}, {}
+744, DilutedConcentrationPot, 0, 250, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackspeed0, 30, 20;}, {}
+745, DarkConcentrationPotion, 0, 50, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {sc_start sc_raiseattackspeed0, 10, 40;sc_start sc_poison, 1, 50;}, {}
+747, LacedChocolateCake, 0, 550, 125, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 11, 0, 1;}, {}
+748, LacedOrangeCupcake, 0, 90, 45, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+750, SlowPoisonPotion, 0, 500, 200, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 5, 0, 1;sc_start sc_slowpoison, 180000, 180;}, {}
+784, ZombieNachos, 0, 100, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 60, 0, 1;}, {}
+785, LadyFingers, 0, 70, 25, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 40, 0, 1;}, {}
+786, JellAhh, 0, 80, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
+787, Snapple, 0, 110, 55, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 70, 0, 1;}, {}
+788, BeetleJuice, 0, 80, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
+789, GutBuster, 0, 100, 30, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 60, 0, 1;}, {}
+790, BloodWine, 0, 150, 50, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
+808, HitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "HitchhikersTowel"; callfunc "WarpTowel";}, {}
+809, WhiteHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "WhiteHitchhikersTowel"; callfunc "WarpTowel";}, {}
+810, RedHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "RedHitchhikersTowel"; callfunc "WarpTowel";}, {}
+811, GreenHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "GreenHitchhikersTowel"; callfunc "WarpTowel";}, {}
+812, BlueHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "BlueHitchhikersTowel"; callfunc "WarpTowel";}, {}
+813, YellowHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "YellowHitchhikersTowel"; callfunc "WarpTowel";}, {}
+814, PurpleHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "PurpleHitchhikersTowel"; callfunc "WarpTowel";}, {}
+815, OrangeHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "OrangeHitchhikersTowel"; callfunc "WarpTowel";}, {}
+816, PinkHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "PinkHitchhikersTowel"; callfunc "WarpTowel";}, {}
+817, TealHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "TealHitchhikersTowel"; callfunc "WarpTowel";}, {}
+818, LimeHitchhikersTowel, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {set @warpTowelName$, "LimeHitchhikersTowel"; callfunc "WarpTowel";}, {}
+825, TinyManaElixir, 0, 100, 10, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 25, 1;}, {}
+826, SmallManaElixir, 0, 200, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 50, 1;}, {}
+827, MediumManaElixir, 0, 400, 40, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 100, 1;}, {}
+828, LargeManaElixir, 0, 800, 80, 25, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 0, 250, 1;}, {}
+838, CranberryLollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 750, 0, 1;}, {}
+839, GrapeLollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 750, 0, 1;}, {}
+840, OrangeLollipop, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 750, 0, 1;}, {}
+1189, PollettEgg, 0, 250, 25, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 75, 10, 1;}, {}
+1229, CaramelApple, 0, 500, 75, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 1000, 0, 1;}, {}
+1230, LollipopColor1, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
+1231, LollipopColor2, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
+1232, LollipopColor3, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 800, 0, 1;}, {}
+1248, Blueberries, 0, 50, 25, 6, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 0, 1;}, {}
+1250, Pear, 0, 50, 25, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 150, 0, 1;}, {}
+1251, Plum, 0, 50, 25, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 100, 0, 1;}, {}
+1252, Cherry, 0, 50, 25, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1;}, {}
+1253, GoldenDeliciousApple, 0, 1000, 500, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 200, 0, 1;}, {}
+1258, Honey, 0, 100, 80, 20, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 45, 0, 1;}, {}
+1280, Scissors, 0, 1000, 500, 120, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useScissors";}, {}
+1281, ShockSweet, 0, 1000, 500, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "useShockSweet";}, {}
+3001, RubberBat, 0, 200, 100, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {misceffect 403;getitem 3001,1;}, {}
+3006, TonoriDelight, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 2, 1;}, {}
+3007, Marshmallow, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
+3009, JellySkull, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
+3010, CandyPumpkin, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
+4035, PickledBeets, 0, 100, 50, 150, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1; setlook LOOK_HAIR_COLOR, HC_PURPLE;}, {}
+4036, RoastedAcorn, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 15, 0, 1;}, {}
+5126, MTJarofOwnBlood, 0, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {heal -250, 0;getitem 5127, 1;}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
diff --git a/world/map/db/item_db_weapon.txt b/world/map/db/item_db_weapon.txt
index 0a36f27d..471fa3d3 100644
--- a/world/map/db/item_db_weapon.txt
+++ b/world/map/db/item_db_weapon.txt
@@ -1,63 +1,63 @@
// Name and Label MUST NOT exceed 23 characters (as marked)
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-521, Dagger, Dagger, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
-522, SharpKnife, Sharp Knife, 4, 100, 50, 150, 10, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
-529, IronArrow, Iron Arrow, 10, 4, 2, 1, 40, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
-530, ShortBow, Short Bow, 4, 2000, 2000, 600, 50, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
-536, ShortSword, Short Sword, 4, 8000, 4000, 2000, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
-545, ForestBow, Forest Bow, 4, 20000, 5000, 1200, 70, 0, 5, 0, 0, 2, 34, 1, 0, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
-547, Bardiche, Bardiche, 4, 20, 10, 10, 0, 100, 1, -200, 0, 2, 2, 0, 0, 1, {}, {callfunc "UnreleasedItem";}
-548, Halberd, Halberd, 4, 20, 10, 1400, 100, 0, 1, 0, 0, 2, 2, 1, 0, 1, {}, {callfunc "UnreleasedItem";}
-549, Axe, Axe, 4, 20, 10, 1200, 100, 0, 1, 0, 0, 2, 2, 1, 0, 1, {}, {callfunc "UnreleasedItem";}
-550, BlacksmithsAxe, Blacksmith's Axe, 4, 20, 10, 1200, 100, 0, 1, 0, 0, 2, 2, 1, 0, 1, {}, {callfunc "UnreleasedItem";}
-561, Sabre, Sabre, 4, 10000, 5000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
-570, BoneKnife, Bone Knife, 4, 10000, 6000, 450, 115, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
-571, Setzer, Setzer, 4, 20000, 8000, 900, 110, 0, 1, 0, 0, 2, 2, 1, 1, 3, {}, {}
-572, Scimitar, Scimitar, 4, 8000, 4000, 200, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-573, Falchion, Falchion, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-574, Scorpion, Scorpion, 4, 8000, 4000, 600, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-575, DesertBow, Desert Bow, 4, 8000, 4000, 1200, 100, 0, 1, 0, 0, 2, 34, 1, 1, 11, {}, {callfunc "UnreleasedItem";set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
-576, Beheader, Beheader, 4, 8000, 4000, 2000, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-577, BoneDarts, Bone Darts, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem"; }
-578, SandCutter, Sand Cutter, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-579, RockKnife, Rock Knife, 4, 15000, 7500, 500, 110, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {bonus bVit, 3;}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-580, StaffOfLife, Staff of Life, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-581, CrescentRod, Crescent Rod, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-582, StaffOfFire, Staff of Fire, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-583, StaffOfIce, Staff of Ice, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-584, Jackal, Jackal, 4, 8000, 4000, 100, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-587, Sword, Sword, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-588, BastardSword, BastardSword, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-//589, RESERVED, BroadSword, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//590, RESERVED, Baselard, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-591, LongSword, LongSword, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-//592, RESERVED, Stiletto, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//593, RESERVED, Rapier, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-594, Spear, Spear, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-//595, RESERVED, HeavySpear, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//596, RESERVED, Pike, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//597, RESERVED, HeavyPike, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//598, RESERVED, DualSpear, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//599, RESERVED, FireSword, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-//605, RESERVED, MeatCleaver, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//606, RESERVED, Hatchet, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//607, RESERVED, Trident, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//608, RESERVED, BladeShield, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-//609, RESERVED, Club, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
-623, Scythe, Scythe, 4, 100, 50, 1200, 75, 0, 1, 0, 0, 2, 34, 1, 1, 3, {}, {}
-758, WoodenStaff, Wooden Staff, 4, 4000, 2000, 1000, 50, 0, 1, 10, 0, 2, 34, 1, 1, 10, {}, {set @bStat, bInt;set @minbStatVal, 60;callfunc "RequireStat";}
-//ID, Name___________________, Label__________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
-1171, Wand, Wand, 4, 400, 200, 100, 1, 0, 1, 5, 0, 2, 2, 1, 1, 1, {}, {set @bStat, bInt;set @minbStatVal, 5;callfunc "RequireStat";}
-762, TerraniteArrow, Terranite Arrow, 10, 80, 20, 1, 50, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 10;set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
-867, IceGladius, Ice Gladius, 4, 2000, 1000, 1000, 110, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {bonus bLuk, 1;}
-878, BansheeBow, Banshee Bow, 4, 101000, 40000, 900, 90, 0, 6, 0, 0, 2, 34, 1, 90, 11, {}, {set @bStat, bDex;set @minbStatVal, 80;callfunc "RequireStat"; bonus2 bHPDrainRate, 100, -4; bonus bAspdRate, 20; bonus bCritical, 70; bonus bMaxHP, -150; bonus bDefRate, -40; bonus bDef2Rate, -35;set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
-903, SlingShot, Sling Shot, 4, 500, 50, 10, 5, 0, 3, 0, 0, 2, 34, 1, 1, 11, {}, {set @LauncherType, AMMO_SLING; callfunc "CheckLauncher";}
-904, SlingBullet, Sling Bullet, 10, 1, 0, 1, 3, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_SLING; callfunc "CheckAmmo";}
-906, KidBook, Kid Book, 4, 10000, 5000, 100, 1, 0, 3, 0, 0, 2, 34, 1, 1, 1, {}, {}
-1199, Arrow, Arrow, 10, 1, 1, 1, 20, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
-1200, Bow, Bow, 4, 1000, 500, 20, 20, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
-1201, Knife, Knife, 4, 50, 25, 120, 5, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
-1215, ToySabre, Toy Sabre, 4, 2000000, 25, 1, 1, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
-1282, BoneArrows, Bone Arrows, 10, 50, 20, 0, 55, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 1;set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+521, Dagger, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
+522, SharpKnife, 4, 100, 50, 150, 10, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
+529, IronArrow, 10, 4, 2, 1, 40, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
+530, ShortBow, 4, 2000, 2000, 600, 50, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
+536, ShortSword, 4, 8000, 4000, 2000, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
+545, ForestBow, 4, 20000, 5000, 1200, 70, 0, 5, 0, 0, 2, 34, 1, 0, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
+547, Bardiche, 4, 20, 10, 10, 0, 100, 1, -200, 0, 2, 2, 0, 0, 1, {}, {callfunc "UnreleasedItem";}
+548, Halberd, 4, 20, 10, 1400, 100, 0, 1, 0, 0, 2, 2, 1, 0, 1, {}, {callfunc "UnreleasedItem";}
+549, Axe, 4, 20, 10, 1200, 100, 0, 1, 0, 0, 2, 2, 1, 0, 1, {}, {callfunc "UnreleasedItem";}
+550, BlacksmithsAxe, 4, 20, 10, 1200, 100, 0, 1, 0, 0, 2, 2, 1, 0, 1, {}, {callfunc "UnreleasedItem";}
+561, Sabre, 4, 10000, 5000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
+570, BoneKnife, 4, 10000, 6000, 450, 115, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
+571, Setzer, 4, 20000, 8000, 900, 110, 0, 1, 0, 0, 2, 2, 1, 1, 3, {}, {}
+572, Scimitar, 4, 8000, 4000, 200, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+573, Falchion, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+574, Scorpion, 4, 8000, 4000, 600, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+575, DesertBow, 4, 8000, 4000, 1200, 100, 0, 1, 0, 0, 2, 34, 1, 1, 11, {}, {callfunc "UnreleasedItem";set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
+576, Beheader, 4, 8000, 4000, 2000, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+577, BoneDarts, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem"; }
+578, SandCutter, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+579, RockKnife, 4, 15000, 7500, 500, 110, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {bonus bVit, 3;}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+580, StaffOfLife, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+581, CrescentRod, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+582, StaffOfFire, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+583, StaffOfIce, 4, 8000, 4000, 1500, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+584, Jackal, 4, 8000, 4000, 100, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+587, Sword, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+588, BastardSword, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+//589, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//590, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+591, LongSword, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+//592, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//593, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+594, Spear, 4, 1000, 500, 200, 15, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+//595, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//596, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//597, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//598, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//599, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+//605, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//606, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//607, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//608, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+//609, RESERVED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}
+623, Scythe, 4, 100, 50, 1200, 75, 0, 1, 0, 0, 2, 34, 1, 1, 3, {}, {}
+758, WoodenStaff, 4, 4000, 2000, 1000, 50, 0, 1, 10, 0, 2, 34, 1, 1, 10, {}, {set @bStat, Int;set @minbStatVal, 60;callfunc "RequireStat";}
+//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
+1171, Wand, 4, 400, 200, 100, 1, 0, 1, 5, 0, 2, 2, 1, 1, 1, {}, {set @bStat, Int;set @minbStatVal, 5;callfunc "RequireStat";}
+762, TerraniteArrow, 10, 80, 20, 1, 50, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 10;set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
+867, IceGladius, 4, 2000, 1000, 1000, 110, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {bonus bLuk, 1;}
+878, BansheeBow, 4, 101000, 40000, 900, 90, 0, 6, 0, 0, 2, 34, 1, 90, 11, {}, {set @bStat, Dex;set @minbStatVal, 80;callfunc "RequireStat"; bonus2 bHPDrainRate, 100, -4; bonus bAspdRate, 20; bonus bCritical, 70; bonus bMaxHP, -150; bonus bDefRate, -40; bonus bDef2Rate, -35;set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
+903, SlingShot, 4, 500, 50, 10, 5, 0, 3, 0, 0, 2, 34, 1, 1, 11, {}, {set @LauncherType, AMMO_SLING; callfunc "CheckLauncher";}
+904, SlingBullet, 10, 1, 0, 1, 3, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_SLING; callfunc "CheckAmmo";}
+906, KidBook, 4, 10000, 5000, 100, 1, 0, 3, 0, 0, 2, 34, 1, 1, 1, {}, {}
+1199, Arrow, 10, 1, 1, 1, 20, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
+1200, Bow, 4, 1000, 500, 20, 20, 0, 5, 0, 0, 2, 34, 1, 4, 11, {}, {set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
+1201, Knife, 4, 50, 25, 120, 5, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
+1215, ToySabre, 4, 2000000, 25, 1, 1, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
+1282, BoneArrows, 10, 50, 20, 0, 55, 0, 0, 0, 0, 2, 32768, 0, 0, 0, {}, {bonus bCritical, 1;set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";}
diff --git a/world/map/db/mob_db_20_39.txt b/world/map/db/mob_db_20_39.txt
index 096b1b21..7fe8ca4d 100644
--- a/world/map/db/mob_db_20_39.txt
+++ b/world/map/db/mob_db_20_39.txt
@@ -6,10 +6,10 @@
1019, SpikyMushroom, SpikyMushroom, 30, 300, 0, 0, 5, 1, 10, 13, 0, 5, 1, 1, 1, 0, 10, 10, 1, 1, 1, 3, 20, 129, 800, 1872, 672, 480, 567, 800, 501, 150, 518, 50, 613, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40
1020, Fluffy, Fluffy, 30, 500, 0, 0, 7, 1, 6, 10, 1, 5, 1, 2, 1, 0, 20, 25, 1, 1, 1, 3, 20, 129, 800, 1600, 672, 480, 611, 800, 527, 150, 535, 400, 752, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40
1021, CaveSnake, CaveSnake, 30, 800, 0, 0, 13, 1, 20, 15, 1, 5, 10, 1, 1, 0, 5, 20, 1, 1, 1, 3, 20, 129, 800, 1872, 672, 480, 612, 1000, 610, 40, 713, 500, 717, 400, 717, 400, 641, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50
-1025, LogHead, LogHead, 30, 500, 0, 0, 5, 1, 7, 20, 50, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 22, 129, 800, 1872, 672, 480, 569, 2000, 740, 2500, 743, 3000, 569, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 50
+1025, LogHead, LogHead, 30, 500, 0, 0, 5, 1, 10, 20, 50, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 22, 129, 800, 1872, 672, 480, 569, 2000, 740, 2500, 743, 3000, 569, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 50
1027, EasterFluffy, EasterFluffy, 30, 500, 0, 0, 7, 1, 10, 12, 0, 5, 1, 1, 1, 0, 20, 25, 1, 1, 1, 3, 20, 129, 800, 1872, 672, 480, 1208, 2000, 1209, 2000, 1210, 2000, 1211, 1000, 1212, 1000, 1213, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40
1035, Silkworm, Silkworm, 20, 1, 0, 0, 1, 1, 0, 0, 2, 10, 20, 11, 10, 10, 40, 10, 1, 1, 1, 0, 20, 129, 1300, 1100, 672, 480, 718, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40
-1041, Snail, Snail, 30, 900, 0, 0, 18, 1, 60, 65, 20, 15, 10, 1, 25, 0, 20, 10, 1, 1, 1, 0, 20, 129, 1800, 2500, 672, 480, 719, 500, 806, 400, 1250, 1000, 1251, 1500, 1248, 500, 1252, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40
+1041, Snail, Snail, 30, 900, 0, 0, 18, 1, 50, 65, 20, 15, 10, 1, 25, 0, 20, 10, 1, 1, 1, 0, 20, 129, 1800, 2500, 672, 480, 719, 500, 806, 400, 1250, 1000, 1251, 1500, 1248, 500, 1252, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40
1049, Bee, Bee, 30, 600, 0, 0, 32, 1, 5, 90, 12, 4, 15, 25, 20, 3, 40, 30, 1, 1, 1, 0, 25, 137, 380, 1500, 300, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30
1055, Butterfly, Butterfly, 25, 250, 0, 0, 11, 2, 10, 40, 3, 5, 10, 45, 10, 15, 35, 40, 1, 1, 1, 3, 44, 129, 350, 780, 300, 800, 718, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 60
1057, AngryScorpion, AngryScorpion, 20, 200, 0, 0, 5, 1, 15, 15, 0, 5, 5, 5, 1, 0, 15, 5, 1, 1, 1, 3, 20, 133, 1000, 1872, 672, 480, 4000, 700, 510, 100, 509, 50, 518, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
diff --git a/world/map/db/quest-log.txt b/world/map/db/quest-log.txt
new file mode 100644
index 00000000..eac7f1a1
--- /dev/null
+++ b/world/map/db/quest-log.txt
@@ -0,0 +1,23 @@
+//Quest Log
+//Quest ID: var id used by client
+//CommonVar: Used in getq & to set
+//ServerVar: Server Varaible value is stored
+//SHIFT: Posistion shifted. (SHIFT * MASK)
+//MASK: Size of shift to make. ((1 << MASK) - 1) << (SHIFT * MASK)
+//Quest ID,CommonVar,ServerVar,SHIFT,MASK
+//
+// CANDOR
+//
+1,QL_BEGIN,STARTAREA,0,4
+2,QL_VALON,STARTAREA,1,4
+3,QL_MORGAN,STARTAREA,3,4
+4,QL_ZEGAS,STARTAREA,4,4
+5,QL_VINCENT,QUEST_SouthTulimshar,4,2
+6,QL_HIDENSEEK,QUEST_NorthTulimshar,0,8
+//
+// KAIZEI
+//
+7,QL_WELL,QUEST_Nivalis_state,4,4
+8,QL_CINDY,QUEST_Nivalis_state,5,4
+9,QL_BAKTAR,QUEST_Nivalis_state,0,8
+10,QL_BSAGE_INVESTIGATE,QUEST_BlueSage,3,4
diff --git a/world/map/news.d/48-v2015.05.04.txt b/world/map/news.d/48-v2015.05.04.txt
new file mode 100644
index 00000000..4fb1744d
--- /dev/null
+++ b/world/map/news.d/48-v2015.05.04.txt
@@ -0,0 +1,38 @@
+{title:Double Header}
+{date:2015-05-04}
+
+This update includes bug fixes, quest logs for Candor,
+and a new constable in Hurnscald. Characters can also now
+use @pvp to toggle their PvP status on any map – at any time.
+
+Release Notes v15.4.20
+{ul}
+{li} Spam warnings will now appear in General chat tab{/li}
+{li} Players can now use @pvp to enter pvp mode which
+allows to attack other players in pvp mode. Basically
+it's pvp from any map with anyone (if they have it enabled)
+at any time.{/li}
+{li} The gm commands @killer and @killable have been removed
+ in favor of @charpvp{/li}
+{li} GMs can now increase and decrease the rate at which
+ exp is obtained{/li}
+{li} The chest in the Illia quest now displays the correct
+ item. (a bug previously made it always display bull helm){/li}
+{li} Log Heads, Snails, Pinkies, Butterflies,
+ House Maggots and Squirrels are (a little) more balanced{/li}
+{li} The fight club is now fixed{/li}
+{li} The well in Nivalis has been revamped{/li}
+{/ul}
+
+Release Notes v15.5.04
+{ul}
+{li} Various updates to the dialog of, well, various npcs.{/li}
+{li} Quest log for candor island quests{/li}
+{li} New gm command @npc{/li}
+{li} Sex can now be changed without being disconnected{/li}
+{li} New constable in Hurnscald{/li}
+{/ul}
+
+Read More: {link:http://ow.ly/Ms3eG}
+
+{author:TMW Development Team}
diff --git a/world/map/news.d/49-v2015.05.18.txt b/world/map/news.d/49-v2015.05.18.txt
new file mode 100644
index 00000000..0b491842
--- /dev/null
+++ b/world/map/news.d/49-v2015.05.18.txt
@@ -0,0 +1,34 @@
+{title:Candor is open}
+{date:2015-05-18}
+
+This update mainly includes bug fixes.
+
+Release Notes v15.5.26
+{ul}
+{li}Fixed Unequip Script{/li}
+{/ul}
+
+Release Notes v15.5.23.x
+{ul}
+{li}Fixed Unequip Script{/li}
+{li}Fixed Brodomir Crash{/li}
+{li}Fixed Starting Area Crash{/li}
+{li}Added better debug on crashes{/li}
+{/ul}
+
+Release Notes v15.5.18
+{ul}
+{li}Candor is fixed{/li}
+{li}Quest log entries for some quests in Kaizei.{/li}
+{li}The GM Lounge is now more cozy{/li}
+{li}Fixed typo in constable bob's dialog{/li}
+{li}Some syntactical modifications to the game rules{/li}
+{li}Chinese, Russian and French translation updates to game rules{/li}
+{li}Fixed the bug that displayed @@ in some npcs{/li}
+{li}Deprecate the debug npcs in favor of the #debug spell{/li}
+{li}The MOTD is now sent to the General chat tab{/li}
+{/ul}
+
+Read More: {link:http://ow.ly/N7fps}
+
+{author:TMW Development Team}
diff --git a/world/map/npc/001-1/_mobs.txt b/world/map/npc/001-1/_mobs.txt
index 92c57e45..6fc46da5 100644
--- a/world/map/npc/001-1/_mobs.txt
+++ b/world/map/npc/001-1/_mobs.txt
@@ -8,7 +8,7 @@
001-1,86,84,65,55|monster|SeaSlime|1033,8,100000ms,30000ms,Mob001-1::On1033
-001-1,0,0,0|script|Mob001-1|-1
+001-1,0,0,0|script|Mob001-1|32767
{
end;
diff --git a/world/map/npc/001-1/adrian.txt b/world/map/npc/001-1/adrian.txt
index dba78c21..de2966b5 100644
--- a/world/map/npc/001-1/adrian.txt
+++ b/world/map/npc/001-1/adrian.txt
@@ -10,29 +10,31 @@
set @state, ((QUEST_NorthTulimshar & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT);
mes "[Adrian]";
- mes "\"Hello. Are you here to get the luggage for some of our passengers?\"";
+ mes "\"Hello. Are you here to pick up some luggage?\"";
if (@state == 1)
menu
- "Yes, Kylian sent me to get his luggage.",L_Get,
+ "Yes. Kylian sent me to get his luggage.",L_Get,
"No.",L_No;
menu
"No.",L_No;
L_No:
+ next;
mes "[Adrian]";
- mes "\"Too bad. I want to go and drink a beer, but I have to wait here until all the luggage is picked up.\"";
+ mes "\"Too bad. I'd like to go get a beer, but I have to wait here until all the luggage is picked up.\"";
mes "He sighs.";
goto L_Close;
L_Get:
+ next;
mes "[Adrian]";
- mes "\"Wonderful! Show me the ticket.\"";
- mes "He checks the paper Kylian gave you and then takes a critical look at you.";
+ mes "\"Wonderful! Please show me your ticket.\"";
+ mes "He checks the paper Kylian gave you and then gives you a critical look.";
next;
getinventorylist;
if ((checkweight("LeatherSuitcase", 1) == 0) || (@inventorylist_count == 100))
goto L_Inventory;
mes "[Adrian]";
- mes "\"Alright, here it is.\"";
+ mes "\"Alright. Here it is. Good luck carrying that thing.\"";
mes "Adrain hands you a very heavy suitcase.";
getitem "LeatherSuitcase", 1;
set @state, 2;
@@ -41,8 +43,8 @@ L_Get:
L_Inventory:
mes "[Adrian]";
- mes "\"The suitcase is rather heavy. You doesn't look as if you can handle that.";
- mes "Maybe if you get rid of some of the other stuff you're carrying.\"";
+ mes "\"The suitcase is rather heavy. No offense, but you don't look like you can carry it.\"";
+ mes "Maybe you should get rid of some of the other stuff you're carrying.\"";
goto L_Close;
L_Close:
diff --git a/world/map/npc/001-1/ched.txt b/world/map/npc/001-1/ched.txt
index b6159583..ddfddd95 100644
--- a/world/map/npc/001-1/ched.txt
+++ b/world/map/npc/001-1/ched.txt
@@ -3,21 +3,21 @@
001-1,43,48,0|script|Ched|113
{
mes "[Ched]";
- mes "\"I'm trying to get a spell to work. It's supposed to combine two potions, but I can't seem to figure out which two those are...\"";
+ mes "\"I'm trying to get a spell to work, but I'm having some trouble.\"";
+ mes "\"It's supposed to combine two potions, but I can't seem to figure out which two to combine...\"";
next;
menu
- "Well, good luck with that!", L_Done,
- "What spell is that?", L_Next;
+ "Good luck with that.", L_Done,
+ "What spell is it?", L_Next;
L_Next:
+ mes "";
mes "[Ched]";
- mes "\"Well, I don't know what it's called... I took it out of `Timbleweed's Advanced Transmutations.' It seems awfully hard to cast, somehow.\"";
+ mes "\"Well, I don't remember what it's called... I took it out of 'Timbleweed's Advanced Transmutations,' but it seems awfully hard to cast.\"";
next;
- mes "[Ched]";
- mes "\"Well, the invocation is `" + getspellinvocation("merge-concentration-potions") + "'. You're supposed to just hold up the potions and cast it, and then they're supposed to merge.\"";
+ mes "\"If you want to try it, the invocation is '" + getspellinvocation("merge-concentration-potions") + ".' I just can't get the hang of it though.\"";
next;
- mes "[Ched]";
- mes "\"Maybe I should go back to `detect magic' until I can cast that one properly.\"";
+ mes "\"Maybe I should go back to practicing '" + getspellinvocation("detect-magic") + "' until I can cast it properly.\" %%6";
goto L_Done;
L_Done:
diff --git a/world/map/npc/001-1/children.txt b/world/map/npc/001-1/children.txt
index 6749f0e3..5ad738a9 100644
--- a/world/map/npc/001-1/children.txt
+++ b/world/map/npc/001-1/children.txt
@@ -16,7 +16,7 @@
L_1:
mes "[Aisha]";
- mes "\"Maggots are soo slimey!\"";
+ mes "\"Maggots are so slimey!\" %%^";
goto L_Close;
L_2:
@@ -26,12 +26,12 @@ L_2:
L_3:
mes "[Aisha]";
- mes "\"There are so many monsters; I hate scorpions!\"";
+ mes "\"There are so many monsters! I hate scorpions!\" %%3";
goto L_Close;
L_4:
mes "[Aisha]";
- mes "\"When I grow up, I want to be strong enough to kill a scorpion!\"";
+ mes "\"When I grow up, I want to be strong enough to kill a scorpion!\" %%=";
goto L_Close;
L_5:
@@ -41,7 +41,7 @@ L_5:
L_6:
mes "[Aisha]";
- mes "\"Have you tried to eat a roasted maggot? They are sooo yummy! And you feel much healthier afterwards, too!\"";
+ mes "\"Have you tried to eat a roasted maggot? They're sooo yummy! Mommy says they're healthy too!\" %%8";
goto L_Close;
L_7:
@@ -51,23 +51,23 @@ L_7:
L_8:
mes "[Aisha]";
- mes "\"That volcano was sooo scary! The earth was shaking and everything was breaking down... but now they have rebuilt everything.\"";
+ mes "\"That earthquake was sooo scary! The earth was shaking and everything was breaking down... but now they've rebuilt everything.\"";
goto L_Close;
L_9:
- mes "\"I know a very bad word. But I must not say it, because monsters will come and get me if I do!\"";
+ mes "\"I know a very bad word. But I can't say it because monsters will come and get me if I do!\"";
next;
menu
"A bad word?", L_tell,
- "Oh, you better keep it for yourself then.", L_Close;
+ "Oh. You better keep it to yourself then.", L_Close;
L_tell:
mes "[Aisha]";
- mes "\"Yes, I heard my mother say it once. And she made me promise her to never say it. Never.\"";
+ mes "\"I heard my mother say it once, and she made me promise her to never say it. ##BNever##b!\"";
next;
menu
"If I promise to never tell anyone, can you tell me the word?", L_keepword,
- "I understand, you do not need to tell me...", L_giveword,
+ "I understand. You don't need to tell me...", L_giveword,
"Goodbye!", L_Close;
L_keepword:
@@ -77,13 +77,13 @@ L_keepword:
L_giveword:
mes "[Aisha]";
- mes "Aisha looks around as she hushes you to silence. After a few seconds, she whispers to you.";
- mes "\"I like you! So I will tell you the bad word. But you can't tell anyone else about it! The bad word is '" + getspellinvocation("aggravate") + "'.\"";
+ mes "Aisha looks around as she leans in and hushes you to silence. After a few seconds, she whispers to you:";
+ mes "\"I like you, so I'll tell you the bad word. But you can't tell anyone else about it! The bad word is '" + getspellinvocation("aggravate") + ".'\"";
next;
mes "[Aisha]";
mes "Terrified, she looks around once more.";
- mes "\"But you mustn't tell anyone!\"";
+ mes "\"But you can't tell anyone!\" %%>";
goto L_Close;
L_Close:
diff --git a/world/map/npc/001-1/constable.txt b/world/map/npc/001-1/constable.txt
index 73a74a2f..ecc8a0d4 100644
--- a/world/map/npc/001-1/constable.txt
+++ b/world/map/npc/001-1/constable.txt
@@ -3,7 +3,7 @@
001-1,50,74,0|script|Constable Perry Graf|150
{
mes "[Constable Perry Graf]";
- mes "\"Hello, make sure the rules are followed.\"";
+ mes "\"Hello. Make sure to follow the rules!\"";
callfunc "GameRules";
close;
}
diff --git a/world/map/npc/001-1/eomie.txt b/world/map/npc/001-1/eomie.txt
index 6528ddbe..99085bcf 100644
--- a/world/map/npc/001-1/eomie.txt
+++ b/world/map/npc/001-1/eomie.txt
@@ -33,20 +33,20 @@
if (@state == 8) goto L_GetStuff;
mes "[Eomie]";
- mes "\"I maintain this little spot of grass in the desert.\"";
+ mes "\"I maintain this little oasis in the desert.\"";
if (@state != 7)
goto L_Close;
menu
- "I have this magic fertilizer from Tinris and need a spell cast on it.",L_Next;
+ "I need to learn a spell to use Tinris' magic fertilizer. Can you help me out?",L_Next;
L_Next:
mes "[Eomie]";
- mes "\"Oh? I see, that's a difficult task.";
- mes "I'd be glad to help you, but unfortunately I can't interrupt the magic I use to keep this spot of grass alive.\"";
+ mes "\"Oh? Well, that's a rather difficult task.";
+ mes "I'd be glad to help you, but unfortunately, I can't. If I were to interrupt the magic I use to keep this alive, it would die.\"";
next;
- mes "\"It's unusually hot at the moment, even for this desert area. It might have something to do with the aftereffects of the earthquake.\"";
+ mes "\"It's unusually hot at the moment – even for this desert area – so it's really out of the question.\"";
menu
- "Isn't there any possibility?",L_Continue;
+ "Is there any chance you could help me?",L_Continue;
L_Continue:
mes "She hesitates.";
@@ -57,13 +57,13 @@ L_Continue:
L_GetStuff:
// @state == 8
mes "[Eomie]";
- mes "\"I could try to interrupt my spells to be able to cast the spell on the fertilizer, but then I need to prepare the grass for this.";
- mes "Bring me " + @grass_amount + " Grass Seeds, " + @water_amount + " Bottles of Water and " + @ice_amount + " Ice Cubes.\"";
+ mes "\"I could try to briefly interrupt my magic and then cast the spell on the fertilizer, but I would need to prepare the grass beforehand.";
+ mes "Bring me " + @grass_amount + " " + getitemlink("GrassSeed") + ", " + @water_amount + " " + getitemlink("BottleOfWater") + ", and " + @ice_amount + " " + getitemlink("IceCube") + ".\"";
menu
- "I have it.",L_More,
+ "I've got everything.",L_More,
"Where can I get Grass Seeds?",L_Hurnscald,
- "How can I get Ice Cubes? We're in the desert!",L_Mine,
- "Ok, I'll go and get it.",L_Close;
+ "How can I get Ice Cubes? We're in the middle of the desert!",L_Mine,
+ "Ok. I'll go and get them.",L_Close;
L_More:
if ((countitem("GrassSeed") < @grass_amount) || (countitem("BottleOfWater") < @water_amount) || (countitem("IceCube") < @ice_amount))
goto L_NoItem;
@@ -74,38 +74,37 @@ L_More:
set @state, 9;
callsub S_Update_Mask;
mes "[Eomie]";
- mes "\"Very good.\"";
- mes "She takes the things you brought her and uses them to create a bubble of coolness around the spot of grass.";
+ mes "\"Very good!\"";
+ mes "She takes the ingredients you brought her and uses them to cast a cool mist into the air.";
misceffect sfx_magic_nature;
next;
mes "[Eomie]";
- mes "\"This should last long enough to keep the spot of grass alive until I cast the spell on the fertilizer. And if some of it shrivels I still have the seeds you brought me which I can use to recover it.\"";
+ mes "\"That should last long enough to keep the plants alive while I cast the spell on the fertilizer. Besides, I can replant anything that dies with the seeds you brought me.\"";
next;
- mes "She takes the fertilizer and casts some invocations. After a while she's done and gives it back to you with a smile.";
- misceffect sfx_magic_nature;
+ mes "She takes the fertilizer and casts some invocations. After a minute, she hands the now-glowing substance back to you.";
mes "[Eomie]";
- mes "\"This should help you. I'm glad you're taking care of the plants. Not enough people do that nowadays.\"";
+ mes "\"That should work now. I'm glad you're taking care of the plants! Not enough people do that nowadays.\" %%1";
goto L_Close;
L_Hurnscald: // player asked how to get Grass Seeds
mes "[Eomie]";
- mes "\"Squirrels tend to pick up Grass Seeds as they gather food. You can find them around Hurnscald. To get there you will have to take the ferry in the harbor district.\"";
+ mes "\"Squirrels tend to pick up " + getitemlink("GrassSeed") + " as they gather food. You can find them around Hurnscald if you ride the ferry over.\"";
goto L_Close;
L_Mine: // player asked how to get Ice Cubes
mes "[Eomie]";
- mes "\"Hm, that's a difficult task, indeed. Naturally you will find them on the continent of Kaizei, which is high up in the north and covered with snow most time of the year. But it might be difficult to get there.\"";
+ mes "\"Quite the quandary – isn't it? Naturally, you can easily find them on the continent of Kaizei, which is far up north and covered with snow most time of the year. But it might be a bit difficult to get there.\"";
next;
- mes "\"I heard that Ice Goblins were seen in the caves that are around Nivalis. Maybe you can find Ice Cubes in there.\"";
+ mes "\"I heard that Ice Goblins were seen in the caves surrounding Nivalis. Maybe you can find " + getitemlink("IceCube") + " there.\"";
goto L_Close;
L_CastedSpell: // @state >= 9 but below 14
mes "[Eomie]";
- mes "\"The grass wasn't damaged due to the interruption. I hope the magic fertilizer is useful for Anwar.\"";
+ mes "\"Thankfully, the grass wasn't damaged. I hope Anwar finds the magic fertilizer to be useful.\"";
if (@state != 13)
goto L_Close;
menu
- "It was and he created this Silk Headband as a present for you.",L_Present,
+ "It was. He even created this Silk Headband as a present for you!",L_Present,
"(Mumble something and leave)",L_Close;
L_Present:
@@ -116,18 +115,18 @@ L_Present:
set @state, 14;
callsub S_Update_Mask;
mes "[Eomie]";
- mes "\"Oh, this is very friendly! Please tell him I'm very happy about it.\"";
+ mes "\"Oh, that's so nice of him! Please tell him that I really like it!\"";
mes "She smiles.";
goto L_Close;
L_Done: // @state >= 14
mes "[Eomie]";
- mes "\"Hello. I'm happy to see someone like you being dedicated to the needs of plants and people.\"";
+ mes "\"Hello! I'm happy to see someone like you so dedicated to the environment.\" %%8";
goto L_Close;
L_NoItem:
mes "[Eomie]";
- mes "\"Where is it?\"";
+ mes "\"Where is it?\" %%3";
goto L_Close;
L_Close:
diff --git a/world/map/npc/001-1/ferry_master.txt b/world/map/npc/001-1/ferry_master.txt
index 9cfb1e74..c1e6cbb6 100644
--- a/world/map/npc/001-1/ferry_master.txt
+++ b/world/map/npc/001-1/ferry_master.txt
@@ -9,7 +9,7 @@
L_Main:
menu
"How do I use the ferry?", L_Explain,
- "Nothing I guess", L_Close;
+ "Nothing, I guess.", L_Close;
L_Explain:
mes "[Ferry Master]";
diff --git a/world/map/npc/001-1/gate_guards.txt b/world/map/npc/001-1/gate_guards.txt
index dea801ef..4370036d 100644
--- a/world/map/npc/001-1/gate_guards.txt
+++ b/world/map/npc/001-1/gate_guards.txt
@@ -2,25 +2,25 @@
001-1,39,33,0|script|Guard#school|104
{
mes "[Guard]";
- mes "\"I'm just here to provide a presence for the guards at this gate. The mages here can defend themselves without problem.\"";
+ mes "\"My presence here is just a formality. The mages inside can easily defend themselves.\"";
close;
}
001-1,56,47,0|script|Guard#castle|104
{
mes "[Guard]";
- mes "\"The volcano and earthquake did a lot of damage, but the citizens of Tulimshar sure did a good job of cleaning up.\"";
+ mes "\"Tulimshar is a resilient city; its citizens have made quite a comeback after the earthquake.\"";
close;
}
001-1,61,99,0|script|Guard#east3|104
{
mes "[Guard]";
- mes "\"The Palace is North of here. That is where you will find the Council of Wizards.\"";
+ mes "\"Just north of here is a palace where you can find both the Council of Wizards and the Magic Institute of Tulimshar.\"";
close;
}
001-1,53,72,0|script|Guard#govt_out|123
{
mes "[Guard]";
- mes "\"This is a government building. They have some clerical and tax offices in here. There is also a jail in the subbasement.\"";
+ mes "\"There are government officials inside who can help you form a party, obtain a trade license, or even get married.\"";
close;
}
diff --git a/world/map/npc/001-1/gossip.txt b/world/map/npc/001-1/gossip.txt
index 283de9d7..a2266498 100644
--- a/world/map/npc/001-1/gossip.txt
+++ b/world/map/npc/001-1/gossip.txt
@@ -2,53 +2,56 @@
001-1,66,104,0|script|Gladys|154
{
- mes "[Gladys, Town Gossip]";
- mes "\"Hello deary! I hear some of the most fascinating rumors and bits of news. I just heard a bit more today!\"";
+ mes "[Gladys]";
+ mes "\"Hello deary! I hear some of the most fascinating rumors!\"";
+ next;
mes "\"Would you like me to let you in on the good stuff?\"";
menu
- "Lt. Dausen", L_Intro,
- "Fieri", L_Cook,
- "Sarah", L_Sarah,
- "Sandra", L_Sandra,
- "Desert Mine", L_Desert,
- "Ferry", L_Ferry,
+ "Tell me about Lt. Dausen.", L_Intro,
+ "Tell me about Fieri.", L_Cook,
+ "Tell me about Sarah.", L_Sarah,
+ "Tell me about Sandra.", L_Sandra,
+ "Tell me about the Desert Mine.", L_Desert,
+ "Tell me about the Ferry.", L_Ferry,
"No thanks.", L_No;
L_No:
- mes "[Gladys, Town Gossip]";
- mes "\"Very well. Come back whenever you like. I am always getting juicy bits of news!\"";
+ mes "[Gladys]";
+ mes "\"Very well. Come back later if you want to hear some juicy news!\"";
goto L_Close;
L_Intro:
- mes "[Gladys, Town Gossip]";
- mes "\"Have you met our lovely guard captain yet? He usually keeps a post just outside the gates where he can keep an eye on things. He likes to talk to new adventurers too.\"";
+ mes "[Gladys]";
+ mes "\"Have you met our lovely guard captain yet? He usually keeps post just outside the gates to keep an eye on things. He likes to talk to new adventurers too.\"";
goto L_Close;
L_Cook:
- mes "[Gladys, Town Gossip]";
- mes "\"I hear the kitchen at the Magic Insitute of Tulimshar needs help.\"";
+ mes "[Gladys]";
+ mes "\"I hear the kitchen at the Magic Institute of Tulimshar is in need of some help.\"";
next;
- mes "\"The only thing bigger then a wizard's ego is their waistline. Hehe.\"";
+ mes "\"The only thing bigger then a wizard's ego is their waistline. Hehe.\" %%8";
goto L_Close;
L_Sarah:
- mes "[Gladys, Town Gossip]";
- mes "\"Do you believe what parents will let their kids do these days?! I heard about this girl in the south east side of town who does nothing but eat sweets all day! Honestly, what is the world coming to?\"";
+ mes "[Gladys]";
+ mes "\"Do you believe what parents will let their kids do these days?! I heard about this girl in the southeast side of town who does nothing but eat sweets all day! Honestly, what is this world coming to?\"";
goto L_Close;
L_Sandra:
- mes "[Gladys, Town Gossip]";
- mes "\"The students and wizards at the Magic Institute of Tulimshar are always looking for people to gather reagents for spells as they are far too busy studing.\"";
+ mes "[Gladys]";
+ mes "\"The students and wizards at the Magic Institute of Tulimshar are always looking for people to gather the reagents they need for spells as they are far too busy studying to gather the materials themselves.\"";
goto L_Close;
L_Desert:
- mes "[Gladys, Town Gossip]";
- mes "\"If you're still looking for adventure, I would suggest talking to some of the guards. I hear there is a monster threat outside the city walls!\"";
+ mes "[Gladys]";
+ mes "\"If you're still looking for adventure, I would suggest talking to some of the guards. I hear there's a sizable monster threat outside the city walls!\"";
goto L_Close;
L_Ferry:
- mes "[Gladys, Town Gossip]";
- mes "I heard that there is a ferry in the north of town that will take people to exotic new places!\"";
+ mes "[Gladys]";
+ mes "\"There's a ferry in the northern part of town that takes travelers to exotic new places!\"";
+ next;
+ mes "\"I haven't been on it myself, but I hear it travels all over the world!\"";
goto L_Close;
L_Close:
diff --git a/world/map/npc/001-1/stat_reset.txt b/world/map/npc/001-1/stat_reset.txt
index 1ad2bc4e..e8c61ca3 100644
--- a/world/map/npc/001-1/stat_reset.txt
+++ b/world/map/npc/001-1/stat_reset.txt
@@ -2,7 +2,7 @@
001-1,117,105,0|script|Malivox|103
{
- set @NpcName$, "Malivox";
+ set @npcname$, "Malivox";
callfunc "StatReset";
close;
}
diff --git a/world/map/npc/001-1/tombstones.txt b/world/map/npc/001-1/tombstones.txt
index 39c98ade..e064a60d 100644
--- a/world/map/npc/001-1/tombstones.txt
+++ b/world/map/npc/001-1/tombstones.txt
@@ -4,7 +4,7 @@
{
mes "~ wushin ~";
- mes "Tonori swallowed him whole.";
+ mes "\"Tonori swallowed him whole.\"";
close;
}
@@ -12,7 +12,7 @@
{
mes "~ Nard ~";
- mes "Crushed by a loom.";
+ mes "\"Crushed by a loom.\"";
close;
}
@@ -20,7 +20,7 @@
{
mes "~ tux9th ~";
- mes "Eaten by bugs.";
+ mes "\"Eaten by bugs.\"";
close;
}
@@ -28,7 +28,7 @@
{
mes "~ o11c ~";
- mes "He asked for it. So they gave it to him.";
+ mes "\"He asked for it, so they gave it to him.\"";
close;
}
@@ -36,41 +36,41 @@
{
mes "~ " + strcharinfo(0) + " ~";
- mes "The tombstone is blank and the grave freshly dug.";
+ mes "The epitath is blank and the grave freshly dug.";
close;
}
001-1,56,106,0|script|RIP#6|400
{
mes "~ Cassy ~";
- mes "Eaten by trolls.";
+ mes "\"Eaten by trolls.\"";
close;
}
001-1,57,106,0|script|RIP#7|400
{
mes "~ George ~";
- mes "Eaten by Snakes.";
+ mes "\"Eaten by snakes.\"";
close;
}
001-1,58,106,0|script|RIP#8|400
{
mes "~ Kieron ~";
- mes "He was right, monsters were in the cave.";
+ mes "\"He was right; monsters were in the cave.\"";
close;
}
001-1,59,106,0|script|RIP#9|400
{
mes "~ William ~";
- mes "Kieron was definitely right.";
+ mes "\"Kieron was definitely right.\"";
close;
}
001-1,60,106,0|script|RIP#10|400
{
mes "~ Tyer ~";
- mes "An experiement went wrong.";
+ mes "\"An experiement went wrong.\"";
close;
}
diff --git a/world/map/npc/001-1/weellos.txt b/world/map/npc/001-1/weellos.txt
index ae5604f5..e49c6814 100644
--- a/world/map/npc/001-1/weellos.txt
+++ b/world/map/npc/001-1/weellos.txt
@@ -12,26 +12,24 @@
if (isin("001-1", 48, 20, 61, 28)) goto L_In;
mes "[Weellos]";
- mes "\"This is a very historic building. One of the oldest in the area.\"";
+ mes "\"This is a very historic building – in fact, it's one of the oldest in the area.\"";
next;
- mes "\"It's the current seat of the council of wizards.\"";
+ mes "\"It's also the current seat of both the Council of Wizards and the Magic Institute of Tulimshar.\"";
next;
- mes "\"It's also holds the Magic Institute of Tulimshar.\"";
- next;
- mes "\"Part of It's been turned into a museum as well\"";
+ mes "\"Due to its historical significance, part of it has been turned into a museum.\"";
goto L_BeforeClose;
// If the player is inside the fence with Weellos
L_In:
mes "[Weellos]";
- mes "\"What did you think of the historic building?\"";
+ mes "\"What did you think? Isn't the building intriguing?\"";
goto L_BeforeClose;
L_BeforeClose:
if (@kylian != 4)
goto L_Close;
next;
- mes "You wonder if Kylian would be interested to see this building.";
+ mes "You wonder if Kylian would be interested in seeing this historic landmark...";
goto L_Close;
L_Close:
diff --git a/world/map/npc/001-2/_mobs.txt b/world/map/npc/001-2/_mobs.txt
index 507c59c5..167e1f2e 100644
--- a/world/map/npc/001-2/_mobs.txt
+++ b/world/map/npc/001-2/_mobs.txt
@@ -3,7 +3,7 @@
-001-2,0,0,0|script|Mob001-2|-1
+001-2,0,0,0|script|Mob001-2|32767
{
end;
}
diff --git a/world/map/npc/001-2/government_building.txt b/world/map/npc/001-2/government_building.txt
index d62159cb..51b43a8c 100644
--- a/world/map/npc/001-2/government_building.txt
+++ b/world/map/npc/001-2/government_building.txt
@@ -1,22 +1,22 @@
-// The government builing in the south west
+// The government building in the south west
// A clerk
001-2,25,21,0|script|Estard|107
{
mes "[Estard]";
- mes "\"Hello what can I do for you?\"";
+ mes "\"Hello. What can I do for you?\"";
next;
if (getpartnerid2())
goto L_main_married;
menu
- "I'm looking at getting married.", L_marry,
- "Nothing, I guess.", L_Close;
+ "I'd like to get married.", L_marry,
+ "Never mind.", L_Close;
L_main_married:
menu
- "I'd like a divorce.", L_divorce,
- "Nothing, I guess.", L_Close;
+ "I'd like to file for divorce.", L_divorce,
+ "Never mind.", L_Close;
L_marry:
if (BaseLevel < WEDDING_MIN_LEVEL)
@@ -24,51 +24,56 @@ L_marry:
if (Zeny < WEDDING_FEE)
goto L_marry_too_poor;
+ mes "";
mes "[Estard]";
- mes "\"Are you sure you want to get married? It'll cost " + WEDDING_FEE + " GP.\"";
+ mes "\"Are you sure that you want to get married? It'll cost you ##B" + WEDDING_FEE + " GP##b.\"";
menu
- "Yes", L_marry_do,
- "No", L_Close;
+ "Yes!", L_marry_do,
+ "I'm having second thoughts...", L_Close;
L_marry_do:
callsub S_give_rings;
-
+ mes "";
mes "[Estard]";
- mes "\"Here are your rings. You can get married by standing in one of the designated places (like that small rug over there) with your partner, give them their ring, and say 'marry (their name here)'. You both need to have your rings on.\"";
+ mes "\"Here are your rings. In order to marry each other, you both must stand within one of the designated areas (like that small rug over there in the corner), wear your rings, and say 'marry (your partner's name).'\"";
close;
L_marry_too_young:
+ mes "";
mes "[Estard]";
- mes "\"I'm sorry, but you are too young to get married. You must be atleast " + WEDDING_MIN_LEVEL + " levels old.\"";
+ mes "\"I'm sorry, but you are too young to get married. You must be at least " + WEDDING_MIN_LEVEL + " levels old.\"";
next;
menu
- "Can I at least get wedding rings?", L_get_rings,
+ "Can I at least get the wedding rings now?", L_get_rings,
"Thanks anyways.", L_Close;
L_marry_too_poor:
+ mes "";
mes "[Estard]";
- mes "\"You need " + WEDDING_FEE + " GP to get married. That covers all administrative fees for the marriage and provides two wedding rings.\"";
+ mes "\"It costs ##B" + WEDDING_FEE + " GP##b to get married. That covers all the processing fees for the marriage and provides you with two wedding rings.\"";
close;
L_get_rings:
+ mes "";
mes "[Estard]";
- mes "\"Yes. They are " + WEDDING_FEE + " GP. That covers all administrative fees for the marriage.\"";
+ mes "\"Yes! You certainly can. They're ##B" + WEDDING_FEE + " GP##b. That covers all the processing fees for the marriage and provides you with two wedding rings.\"";
if (Zeny < WEDDING_FEE)
menu
- "Thanks anyways. I don't have enough with me.", L_Close;
+ "Thanks, but I don't have enough with me right now.", L_Close;
if (Zeny >= WEDDING_FEE)
menu
- "I'll buy a pair.", L_get_rings_pay,
- "Thanks anyways.", L_Close;
+ "Sounds great!", L_get_rings_pay,
+ "No thanks.", L_Close;
goto L_get_rings_pay;
L_get_rings_pay:
callsub S_give_rings;
+ mes "";
mes "[Estard]";
- mes "\"There you go. Come again.\"";
+ mes "\"There you go! %%1\"";
close;
L_divorce:
@@ -78,11 +83,11 @@ L_divorce:
goto L_divorce_not_enough;
mes "[Estard]";
- mes "\"If you're sure you want a divorce, it'll cost you " + @divorce_cost + " GP.\"";
+ mes "\"I'm sorry to hear that. If you're sure you want a divorce, it'll cost you %%B" + @divorce_cost + " GP%%b.\"";
next;
menu
- "I am sure I want it.", L_do_divorce,
- "I don't want it.", L_Close;
+ "I'm sure.", L_do_divorce,
+ "I'm having second thoughts...", L_Close;
L_do_divorce:
if (Zeny < @divorce_cost)
@@ -91,35 +96,45 @@ L_do_divorce:
if (divorce())
goto L_divorce_done;
+ mes "";
mes "[Estard]";
- mes "\"I'm having trouble finding the record. \"";
+ mes "\"I'm having trouble finding your documents. Please come back later.\"";
+ mes "";
mes "[Server]";
- mes "Try again when your partner is online too.";
+ mes "There was an unexpected error when processing your divorce. Please report this to the developers.";
close;
L_divorce_done:
set Zeny, Zeny - @divorce_cost;
+ mes "";
mes "[Estard]";
- mes "\"You have been divorced. Come again.\"";
+ mes "\"You have now officially divorced your spouse.\"";
close;
L_divorce_not_enough:
+ mes "";
mes "[Estard]";
- mes "\"I'm sorry , but you don't have enough money to get a divorce. You need " + @divorce_cost + " GP.\"";
+ mes "\"I'm sorry, but you don't have enough money to get a divorce. You need ##B" + @divorce_cost + " GP##b.\"";
close;
L_not_enough_money:
+ mes "";
mes "[Estard]";
- mes "\"Seems you don't have enough money.\"";
+ mes "\"I'm sorry, but it seems as though you don't have enough money.\"";
close;
L_no_room_for_rings:
+ mes "";
mes "[Estard]";
- mes "\"You don't have enough room to carry these rings.\"";
+ mes "\"Hm... it doesn't look like you have enough room to carry these rings.";
+ mes "Free up some space, and then I'd be happy to give them to you.\"";
close;
L_Close:
+ mes "";
+ mes "[Estard]";
+ mes "\"OK. Just come back whenever you're ready.\"";
close;
S_give_rings:
@@ -139,6 +154,6 @@ S_give_rings:
001-2,22,21,0|script|Guard#govt_in|123
{
mes "[Guard]";
- mes "\"You can't come back here.\"";
+ mes "\"You're not allowed back here.\"";
close;
}
diff --git a/world/map/npc/001-2/heathin.txt b/world/map/npc/001-2/heathin.txt
index 0bcb0294..05044812 100644
--- a/world/map/npc/001-2/heathin.txt
+++ b/world/map/npc/001-2/heathin.txt
@@ -312,10 +312,13 @@ L_Arrows_Trade_Yes:
delitem "Coal", @TARROW_REQ_COAL;
delitem "TerraniteOre", @TARROW_REQ_TERRA_ORE;
set Zeny, Zeny - @TARROW_REQ_GP;
- set @lucky, 5 * rand(readparam(bLuk));
+ set @lucky, 5 * rand(Luk);
+ set @lucky$, "";
getitem "TerraniteArrow", 1000 + @lucky;
mes "[Heathin]";
- mes "\"Here you go! You are lucky, I could forge "+@lucky+" more arrows than expected. Come back again if you want more Terranite Arrows.\"";
+ if(@lucky>0)
+ set @lucky$, " You are lucky, I could forge "+@lucky+" more arrows than expected.";
+ mes "Here you go!" + @lucky$ + " Come back again if you want more Terranite Arrows.\"";
close;
L_Arrows_Trade_Wait:
diff --git a/world/map/npc/001-2/manakins.txt b/world/map/npc/001-2/manakins.txt
index dabe7fc5..ef1e2982 100644
--- a/world/map/npc/001-2/manakins.txt
+++ b/world/map/npc/001-2/manakins.txt
@@ -3,19 +3,27 @@
// Forge
001-2,29,57,0|script|Terranite Armor#Female|401
{
- mes "Terranite Armor complete set, made to order, inquire with Heathin";
+ mes "A complete set of female Terranite armor stands on display. These appear to be made to order.";
+ next;
+ mes "An inscription on the helmet reads \"Made by Heathin.\"";
close;
}
001-2,34,57,0|script|Terranite Armor#Male|402
{
- mes "Terranite Armor complete set, made to order, inquire with Heathin";
+ mes "A complete set of male Terranite armor stands on display. These appear to be made to order.";
+ next;
+ mes "An inscription on the helmet reads \"Made by Heathin.\"";
close;
}
001-2,34,62,0|script|Terranite|403
{
- mes "Ahhh! A Terranite! Wait it appears to just be a display model.";
+ mes "Ahhh! A Terranite!";
+ next;
+ mes "Wait a minute...";
+ next;
+ mes "It appears to just be a display model.";
close;
}
@@ -23,25 +31,25 @@
001-2,91,39,0|script|Talponian#Female|404
{
- mes "A Female Talponian.";
+ mes "A female Talponian manakin stands on display.";
close;
}
001-2,91,44,0|script|Talponian#Male|405
{
- mes "A Male Talponian.";
+ mes "A male Talponian manakin stands on display.";
close;
}
001-2,118,39,0|script|Gispaan#Female|406
{
- mes "A Female Gispaan.";
+ mes "A female Gispaan manakin stands on display.";
close;
}
001-2,118,44,0|script|Gispaan#Male|407
{
- mes "A Male Gispaan.";
+ mes "A male Gispaan manakin stands on display.";
close;
}
diff --git a/world/map/npc/001-2/sandra.txt b/world/map/npc/001-2/sandra.txt
index 3eceeff6..a94d10a3 100644
--- a/world/map/npc/001-2/sandra.txt
+++ b/world/map/npc/001-2/sandra.txt
@@ -2,9 +2,6 @@
001-2,98,88,0|script|Sandra|114
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (@state >= 2) goto L_Done;
diff --git a/world/map/npc/001-2/wizards.txt b/world/map/npc/001-2/wizards.txt
index 4f88c58b..37efa8bd 100644
--- a/world/map/npc/001-2/wizards.txt
+++ b/world/map/npc/001-2/wizards.txt
@@ -3,58 +3,88 @@
// manaseed
001-2,104,19,0|script|Desert Mana Seed#_M|166
{
- end;
+ mes "Strangely, you feel nothing – as if its membrane is closed to you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,99,22,0|script|Wizard#1|355
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,92,24,0|script|Wizard#2|356
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,92,30,0|script|Wizard#3|357
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,99,32,0|script|Wizard#4|358
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,110,22,0|script|Wizard#5|359
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,117,24,0|script|Wizard#6|360
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,117,30,0|script|Wizard#7|361
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,110,32,0|script|Wizard#8|362
{
- end;
+ mes "The wizard seems to ignore you.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
//
001-2,104,27,0|script|Arch-Wizard#9|354
{
- end;
+ mes "The arch wizard seems to be busy.";
+ next;
+ mes "Perhaps you should come back later.";
+ close;
}
diff --git a/world/map/npc/001-3/_mobs.txt b/world/map/npc/001-3/_mobs.txt
index 3064369a..1c76eac9 100644
--- a/world/map/npc/001-3/_mobs.txt
+++ b/world/map/npc/001-3/_mobs.txt
@@ -4,7 +4,7 @@
001-3,0,0,0,0|monster|Maggot|1002,10,0ms,0ms,Mob001-3::On1002
-001-3,0,0,0|script|Mob001-3|-1
+001-3,0,0,0|script|Mob001-3|32767
{
end;
diff --git a/world/map/npc/002-1/_mobs.txt b/world/map/npc/002-1/_mobs.txt
index 96070290..19933fab 100644
--- a/world/map/npc/002-1/_mobs.txt
+++ b/world/map/npc/002-1/_mobs.txt
@@ -16,7 +16,7 @@
002-1,73,105,20,21|monster|FireGoblin|1011,6,100000ms,30000ms,Mob002-1::On1011
-002-1,0,0,0|script|Mob002-1|-1
+002-1,0,0,0|script|Mob002-1|32767
{
end;
diff --git a/world/map/npc/002-1/elanore.txt b/world/map/npc/002-1/elanore.txt
index be14c8bc..ea3b78bf 100644
--- a/world/map/npc/002-1/elanore.txt
+++ b/world/map/npc/002-1/elanore.txt
@@ -17,6 +17,27 @@ function|script|ElanoreFix
return;
}
+function|script|elanore_decrease_exp
+{
+ if (attachrid(@killerrid) == 0)
+ goto L_Return;
+ set @Q_heal_exp, MAGIC_EXPERIENCE >> 24;
+ if (@Q_heal_exp < 8) goto L_OnPcKillWipe;
+ set @Q_heal_exp, @Q_heal_exp - 8;
+ goto L_OnPcKillFinish;
+
+L_OnPcKillWipe:
+ set @Q_heal_exp, 0;
+ goto L_OnPcKillFinish;
+
+L_OnPcKillFinish:
+ set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE & ~(255 << 24)) | (@Q_heal_exp << 24);
+ goto L_Return;
+
+L_Return:
+ return;
+}
+
002-1,75,62,0|script|Elanore#_M|108
{
set @has_magic, getskilllv(SKILL_MAGIC);
@@ -155,22 +176,6 @@ L_Main:
"Goodbye!", L_bye;
goto L_Close;
-OnPCKillEvent:
- if (attachrid(@killerrid) == 0)
- end;
- set @Q_heal_exp, MAGIC_EXPERIENCE >> 24;
- if (@Q_heal_exp < 8) goto L_OnPcKillWipe;
- set @Q_heal_exp, @Q_heal_exp - 8;
- goto L_OnPcKillFinish;
-
-L_OnPcKillWipe:
- set @Q_heal_exp, 0;
- goto L_OnPcKillFinish;
-
-L_OnPcKillFinish:
- set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE & ~(255 << 24)) | (@Q_heal_exp << 24);
- goto L_Close;
-
L_Lifestones:
mes "[Elanore the Healer]";
mes "\"I always need components for my own healing spells. If you bring me ten gamboge leaves, ten alizarin leaves, ten mauve leaves and ten cobalt leaves, I can make ten lifestones; I will give you half of them.\"";
diff --git a/world/map/npc/002-1/lieutenant_dausen.txt b/world/map/npc/002-1/lieutenant_dausen.txt
index 38ac6b08..2751d49a 100644
--- a/world/map/npc/002-1/lieutenant_dausen.txt
+++ b/world/map/npc/002-1/lieutenant_dausen.txt
@@ -3,9 +3,6 @@
002-1,63,67,0|script|Lieutenant Dausen|122
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state == 21) goto L_LD_Key;
diff --git a/world/map/npc/002-1/mine_debug.txt b/world/map/npc/002-1/mine_debug.txt
index 0fdcb9b3..eb01dc81 100644
--- a/world/map/npc/002-1/mine_debug.txt
+++ b/world/map/npc/002-1/mine_debug.txt
@@ -33,7 +33,7 @@ L_Show:
L_Close:
set @state, 0;
- close;
+ return;
S_Update_Var:
set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(BYTE_2_MASK) | (@state << BYTE_2_SHIFT));
@@ -42,7 +42,7 @@ S_Update_Var:
002-1,61,69,0|script|Mine Debug#1|122
{
callfunc "DesertMineDebug";
- end;
+ close;
OnInit:
if (!debug)
@@ -52,7 +52,7 @@ OnInit:
002-3,45,49,6|script|Mine Debug#2|109
{
callfunc "DesertMineDebug";
- end;
+ close;
OnInit:
if (!debug)
@@ -62,7 +62,7 @@ OnInit:
002-4,88,99,6|script|Mine Debug#3|109
{
callfunc "DesertMineDebug";
- end;
+ close;
OnInit:
if (!debug)
@@ -72,7 +72,7 @@ OnInit:
002-5,43,96,6|script|Mine Debug#4|340
{
callfunc "DesertMineDebug";
- end;
+ close;
OnInit:
if (!debug)
diff --git a/world/map/npc/002-1/nickos.txt b/world/map/npc/002-1/nickos.txt
index 91abe6db..99f17b5c 100644
--- a/world/map/npc/002-1/nickos.txt
+++ b/world/map/npc/002-1/nickos.txt
@@ -3,9 +3,6 @@
002-1,46,108,0|script|Nickos|123
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state == 20) goto L_UGQ;
diff --git a/world/map/npc/002-1/sarah.txt b/world/map/npc/002-1/sarah.txt
index 83fc6558..3b7a7232 100644
--- a/world/map/npc/002-1/sarah.txt
+++ b/world/map/npc/002-1/sarah.txt
@@ -2,9 +2,6 @@
002-1,93,43,0|script|Sarah|106
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT);
if (@state >= 2) goto L_Done;
@@ -51,14 +48,15 @@ L_Progress:
mes "\"Whee!\"";
next;
mes "You brought me Cherry Cake! Here is your new hat, as promised.\"";
- emotion EMOTE_TONGUE;
getinventorylist;
if ((@inventorylist_count - (countitem("CherryCake") == 1)) > 99) goto L_TooMany;
delitem "CherryCake", 1;
getitem "SerfHat", 1;
set @state, 2;
callsub S_Update_Var;
- goto L_Close;
+ close2;
+ emotion EMOTE_TONGUE, strcharinfo(0);
+ end;
L_NotEnough:
mes "[Sarah]";
@@ -68,8 +66,9 @@ L_NotEnough:
L_Done:
mes "[Sarah]";
mes "\"It was so tasty, I can't eat anything more... Thank you!\"";
- emotion EMOTE_TONGUE;
- goto L_Close;
+ close2;
+ emotion EMOTE_TONGUE, strcharinfo(0);
+ end;
L_Close:
set @TEMP, 0;
diff --git a/world/map/npc/002-1/soul-menhir.txt b/world/map/npc/002-1/soul-menhir.txt
index 3260e511..fa2a4508 100644
--- a/world/map/npc/002-1/soul-menhir.txt
+++ b/world/map/npc/002-1/soul-menhir.txt
@@ -2,7 +2,6 @@
002-1,58,60,0|script|Soul Menhir#tulimshar|345
{
- callfunc "ClearVariables";
set @map$, "001-1";
setarray @Xs, 57, 58, 59, 57, 59, 57, 59;
setarray @Ys, 59, 59, 59, 60, 60, 61, 61;
diff --git a/world/map/npc/002-1/stewen.txt b/world/map/npc/002-1/stewen.txt
index 4368f590..63808935 100644
--- a/world/map/npc/002-1/stewen.txt
+++ b/world/map/npc/002-1/stewen.txt
@@ -3,9 +3,6 @@
002-1,116,93,0|script|Stewen|123
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state == 4) goto L_TMW_Quest_Received;
diff --git a/world/map/npc/002-1/traveler.txt b/world/map/npc/002-1/traveler.txt
index 0645cce2..975786ae 100644
--- a/world/map/npc/002-1/traveler.txt
+++ b/world/map/npc/002-1/traveler.txt
@@ -4,7 +4,7 @@
002-1,60,41,0|script|Nina the Traveler|103
{
- set @NpcName$, "Nina";
+ set @npcname$, "Nina";
set @NpcTravelBit, $@tulimshar_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/002-2/_mobs.txt b/world/map/npc/002-2/_mobs.txt
index c099a80f..aad2a871 100644
--- a/world/map/npc/002-2/_mobs.txt
+++ b/world/map/npc/002-2/_mobs.txt
@@ -3,7 +3,7 @@
-002-2,0,0,0|script|Mob002-2|-1
+002-2,0,0,0|script|Mob002-2|32767
{
end;
}
diff --git a/world/map/npc/002-2/bakery.txt b/world/map/npc/002-2/bakery.txt
index 5a21678a..28a16b3a 100644
--- a/world/map/npc/002-2/bakery.txt
+++ b/world/map/npc/002-2/bakery.txt
@@ -16,10 +16,9 @@
&& (countitem ("MopoxCurePotion") > 0))
goto L_lace_cupcake;
- mes "\"Would you mind bringing me 6 acorns please? I need them to make flour for the chocolate cakes. I will be so delicious!\"";
+ mes "\"Would you mind bringing me ##B6 acorns##b please? I need them to make flour so I can bake some chocolate cakes. I will be so delicious!\"";
next;
- mes "\"Um, I mean, the cakes will be delicious...\"";
- emotion EMOTE_BLUSH;
+ mes "\"Uh... I mean... the cakes will be delicious...\" %%;";
next;
set @dq_level, 15;
@@ -33,28 +32,28 @@
callfunc "DailyQuest";
next;
- mes "\"And don't forget, our bakery is the best!\"";
+ mes "\"Don't forget: our bakery is the best!\"";
close;
L_lace_chococake:
next;
menu
- "Thanks! Let me have a look around...", L_End,
+ "Thanks! Let me have a look around...", L_End,
"Can you put this potion into a Chocolate Cake?", L_Next,
"Goodbye!", L_End;
L_Next:
mes "[Riskim]";
mes "";
- mes "As you show Riskim the potion, he leans back, away from it.";
- mes "\"Ooooh, I remember that smell...\"";
- mes "\"Elanore's Mopox potion, right? She made me drink that, too...\"";
+ mes "You take the potion out and attempt to show it to Riskim, but he takes a step back.";
+ mes "\"Oh! I remember that smell...\"";
+ mes "\"Elanore's Mopox potion, right? She made me drink that too...\"";
mes "He chuckles.";
- mes "\"Yes, well, you do want to hide that somehow.\"";
+ mes "\"Yes. Well, you definitely want to hide that somehow.\"";
next;
mes "[Riskim]";
mes "";
- mes "\"We'll need extra chocolate for that one. If you can give me ten pieces of chocolate and that potion, plus 400 GP, I will bake you a special Chocolate Cake that hides the taste.\"";
+ mes "\"We'll need extra chocolate for that one. If you can give me ten pieces of chocolate, the Mopox potion, and a payment of 400 GP, I'll bake you a special Chocolate Cake that hides the taste.\"";
next;
menu
"I will get them for you.", L_End,
@@ -76,42 +75,42 @@ L_Continue:
mes "[Riskim]";
mes "";
mes "\"Please have a seat!\"";
- mes "You watch as Riskim melts the chocolate and stirs in the potion, then glazes a cake with the mixture.";
- mes "\"It's a bit more chocolatey than your average chocolate cake, of course...\"";
+ mes "You watch as Riskim melts the chocolate, stirs in the potion, and then glazes a cake with the mixture.";
+ mes "\"It's a bit more chocolaty than your average chocolate cake, so it should help mask that awful taste.\"";
next;
mes "[Riskim]";
mes "";
mes "Riskim hands you the cake.";
- mes "\"Here you are. I hope that this works.\"";
+ mes "\"Here you are! I hope this helps.\"";
close;
L_lacking_Zeny:
mes "[Riskim]";
mes "";
- mes "\"I'm sorry, but I have to charge 400 GP.\"";
+ mes "\"I'm sorry, but I have to charge 400 GP. I've got to make a living somehow.\"";
close;
L_lacking_ingredients:
mes "[Riskim]";
mes "";
- mes "\"Sorry, but I need ten Chocolate Bars AND your cure potion for this. Please come back later when you have everything.\"";
+ mes "\"Sorry, but I need both the ten Chocolate Bars and your potion for this. Please come back later when you have everything.\"";
close;
L_lace_cupcake:
next;
menu
- "Thanks! Let me have a look around...", L_End,
- "Can you put this potion into an Orange Cupcake?", L_More,
+ "Thanks! Let me have a look around...", L_End,
+ "Can mix a potion into an Orange Cupcake?", L_More,
"Goodbye!", L_End;
L_More:
mes "[Riskim]";
mes "";
- mes "\"Orange Cupcakes? Oh dear... I'm sorry, but I have a very bad orange allergy.\"";
+ mes "\"Orange Cupcakes? Oh dear... I'm sorry, but I have a very bad allergy to oranges.\"";
next;
mes "[Riskim]";
mes "";
- mes "\"Perhaps the Chef at Dimond's Cove can help you? We get all our cupcakes from him.\"";
+ mes "\"Perhaps the Chef at Dimond's Cove can help you. We get all of our cupcakes from him.\"";
next;
goto L_End;
@@ -125,6 +124,8 @@ L_End:
mes "[Sara]";
mes "";
mes "\"Hello!\"";
+ mes "\"If you'd like to buy something, just ask Drabur.\"";
+ mes "\"If you need something made-to-order, talk to Riskim.\"";
close;
}
@@ -136,7 +137,7 @@ L_End:
{
mes "[Iormo]";
mes "";
- mes "\"This room can get messy.\"";
+ mes "\"The cake sure is good, but this room can get messy with all the flour.\"";
close;
}
@@ -153,6 +154,6 @@ L_End:
{
mes "[Ontas]";
mes "";
- mes "\"We come here every week. This place has some of the best bread I've ever eaten!\"";
+ mes "\"We come here almost every week! This place has some of the best bread I've ever eaten!\"";
close;
}
diff --git a/world/map/npc/002-2/barber.txt b/world/map/npc/002-2/barber.txt
index 076dbfab..0ed69626 100644
--- a/world/map/npc/002-2/barber.txt
+++ b/world/map/npc/002-2/barber.txt
@@ -2,7 +2,7 @@
002-2,117,30,0|script|Issay|156
{
mes "[Issay the Barber]";
- mes "\"Do you need a change of style?\"";
+ mes "\"Want to change your hairstyle?\"";
next;
callfunc "Barber";
mes "[Issay the Barber]";
diff --git a/world/map/npc/002-2/bleacher.txt b/world/map/npc/002-2/bleacher.txt
index 2853bb73..3935fe24 100644
--- a/world/map/npc/002-2/bleacher.txt
+++ b/world/map/npc/002-2/bleacher.txt
@@ -94,7 +94,7 @@ L_MenuItems:
if (Zeny < 5000) goto L_no_money;
set @m, @menu - 2;
set @it$, $@DYE_colors$[@CANDIDE_color[@m]] + $@DYE_items$[@CANDIDE_items[@m]];
- if(getitemname(@it$) == "Unknown Item") mapexit;
+ if(getitemlink(@it$) == "Unknown Item") mapexit;
delitem @it$, 1;
delitem "PileOfAsh", 3;
set Zeny, Zeny - 5000;
@@ -127,6 +127,6 @@ L_Close:
mes "[Candide]";
mes "\"Come again.\"";
close2;
- emotion EMOTE_GRIN;
+ emotion EMOTE_GRIN, strcharinfo(0);
end;
}
diff --git a/world/map/npc/002-2/casino.txt b/world/map/npc/002-2/casino.txt
index 14ac5226..b99f6911 100644
--- a/world/map/npc/002-2/casino.txt
+++ b/world/map/npc/002-2/casino.txt
@@ -7,7 +7,7 @@
set @kylian, ((QUEST_NorthTulimshar & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT);
if (@kylian != 6)
goto L_End;
- message strcharinfo(0), "You wonder if Kylian would like to visit the casino in the evening.";
+ message strcharinfo(0), "You wonder if Kylian would be interested in visiting the Casino.";
goto L_End;
L_End:
@@ -18,7 +18,7 @@ L_End:
002-2,86,29,0|script|Valdo|117
{
mes "[Valdo the Worker]";
- mes "\"Please let me work. I'm really in a hurry!\"";
+ mes "\"Please let me work. I've got a lot to do and not enough time to do it!\"";
close;
}
@@ -49,8 +49,8 @@ L_End:
mes "You will need 15 casino coins.\"";
next;
menu
- "Yes", L_Begin,
- "No", L_Close;
+ "Sure.", L_Begin,
+ "Not now.", L_Close;
L_Begin:
if(countitem("CasinoCoins") < 15) goto L_NoCoin;
@@ -58,13 +58,12 @@ L_Begin:
set @croupier, rand(0, 4);
set @croupier, @croupier + 17;
set @player, rand(4, 21);
- mes "\"You got " + @player + " with your cards.";
+ mes "Your cards are worth " + @player + " points.";
if(@player == 21) goto L_End;
mes "Do you want another card?\"";
- next;
menu
- "Yes", L_Another,
- "No", L_End;
+ "Yes.", L_Another,
+ "No.", L_End;
L_Another:
set @tempace, rand(2, 11);
@@ -72,29 +71,29 @@ L_Another:
set @player, @player + @tempace;
if (@player > 21) goto L_Lost;
if (@player == 21) goto L_End;
- mes "\"You got " + @player + " with your cards.";
+ mes "Your cards are worth " + @player + " points.";
mes "Do you want another card?\"";
- next;
menu
- "Yes", L_Another,
- "No", L_End;
+ "Yes.", L_Another,
+ "No.", L_End;
L_End:
if (@player <= @croupier) goto L_Lost;
- mes "\"Congratulations, you won!";
- mes "I had " + @croupier + ".";
- mes "You get 45 casino coins.\"";
+ mes "Your cards are worth " + @player + " points.";
+ mes "\"I have " + @croupier + " points.";
+ mes "Congratulations! You won!";
+ mes "You get 45 casino coins!\"";
getitem "CasinoCoins", 45;
goto L_Close;
L_NoCoin:
- mes "\"You need at least 15 coins.\"";
+ mes "\"Sorry, but you need at least 15 coins to play.\"";
goto L_Close;
L_Lost:
- mes "\"I'm sorry but you lost.";
- mes "You got " + @player + " with your cards.";
- mes "I had " + @croupier + ".\"";
+ mes "\"I'm sorry, but you lost.";
+ mes "Your cards are worth " + @player + " points.";
+ mes "I have " + @croupier + " points.\"";
goto L_Close;
L_Ace:
@@ -102,15 +101,14 @@ L_Ace:
if (@player > 21) set @player, @player - 10;
if (@player > 21) goto L_Lost;
if (@player == 21) goto L_End;
- mes "You got " + @player + " with your cards.";
- mes "Do you want another card?";
- next;
+ mes "Your cards are worth " + @player + " points.";
+ mes "Do you want to take another card?";
menu
"Yes", L_Another,
"No", L_End;
L_Close:
- mes "\"As you wish.\"";
+ mes "\"Be sure to come back again.\"";
set @croupier, 0;
set @player, 0;
set @tempace, 0;
@@ -129,7 +127,7 @@ L_Close:
"10 coins", L_b10,
"50 coins", L_b50,
"100 coins", L_b100,
- "Maybe I'll play later", L_Close;
+ "Maybe I'll play later.", L_Close;
L_b1:
set @bet, 1;
@@ -154,13 +152,13 @@ L_b100:
L_Check:
if(countitem("CasinoCoins") < @bet) goto L_NoCoin;
menu
- "Choose a color", L_PickColor,
- "Choose a number", L_Number;
+ "Choose a color...", L_PickColor,
+ "Choose a number...", L_Number;
L_PickColor:
menu
- "Black", L_Color,
- "Red", L_Color;
+ "Black.", L_Color,
+ "Red.", L_Color;
L_Color:
delitem "CasinoCoins", @bet;
@@ -184,23 +182,23 @@ L_Menuitems:
if (@menu >= 3) set @number, @menu - 2;
set @roulette, rand(38);
- if (@roulette == 37) mes "The ball stopped on 00";
- if (@roulette < 37) mes "The ball stopped on " + @roulette;
+ if (@roulette == 37) mes "The ball stopped on 00.";
+ if (@roulette < 37) mes "The ball stopped on " + @roulette + ".";
if (@number != @roulette) goto L_Lost;
mes "\"You won!\"";
getitem "CasinoCoins", @bet * 10;
goto L_Close;
L_NoCoin:
- mes "\"You don't have enough coins.\"";
+ mes "\"You don't have enough coins to play.\"";
goto L_Close;
L_Lost:
- mes "\"I'm sorry, you lost.\"";
+ mes "\"I'm sorry, but you lost.\"";
goto L_Close;
L_Close:
- mes "Come again.";
+ mes "Come again!";
set @number, 0;
set @roulette, 0;
set @color, 0;
diff --git a/world/map/npc/002-2/eurni.txt b/world/map/npc/002-2/eurni.txt
index c63a71eb..f965b84b 100644
--- a/world/map/npc/002-2/eurni.txt
+++ b/world/map/npc/002-2/eurni.txt
@@ -2,32 +2,30 @@
002-2,22,77,0|script|Eurni|136
{
+ set @SERVICES_ZENY, 10000;
+
set @halloween_npc_id, $@halloween_npc_eurni;
callfunc "TrickOrTreat";
if (BaseLevel < 10) goto L_TooYoung;
- if (Zeny < 10000) goto L_NoMoney;
+ if (Zeny < @SERVICES_ZENY) goto L_NoMoney;
mes "[Eurni the Surgeon]";
- mes "\"Are you tired of being what you are?\"";
+ mes "\"Are you tired of who you are?\"";
next;
-
- mes "[Eurni the Surgeon]";
- mes "\"Would you maybe be interested in a sex change?\"";
+ mes "\"Would you be interested in changing your sex?";
+ mes "It'll cost ##B" + @SERVICES_ZENY + " GP##b.\"";
next;
- mes "[Server]";
- mes "Warning: All characters under this login will be changed. Once it's done, you will be kicked from the server. Don't panic, as everything is fine.";
- next;
menu
- "Please do, my dear...", L_Change,
- "Leave alone my family treasure!", L_Close;
+ "Please do.", L_Change,
+ "Leave my family treasures alone!", L_Close;
L_Change:
- if (Zeny < 10000)
+ if (Zeny < @SERVICES_ZENY)
goto L_NoMoney;
- set Zeny, Zeny - 10000;
- changesex;
+ set Zeny, Zeny - @SERVICES_ZENY;
+ set Sex, !Sex;
close;
L_TooYoung:
@@ -37,7 +35,7 @@ L_TooYoung:
L_NoMoney:
mes "[Eurni the Surgeon]";
- mes "\"You don't have enough to pay for my services.\"";
+ mes "\"You don't have the kind of money to pay for my services.\"";
close;
L_Close:
diff --git a/world/map/npc/002-2/hetchel.txt b/world/map/npc/002-2/hetchel.txt
index 15fc61f9..f6910149 100644
--- a/world/map/npc/002-2/hetchel.txt
+++ b/world/map/npc/002-2/hetchel.txt
@@ -330,7 +330,7 @@ L_Next1:
mes "";
mes "\"Thank you, I hope the sheets will fit your needs.";
mes "Please greet Lora for me when you see her.\"";
- emotion EMOTE_HAPPY;
+ emotion EMOTE_HAPPY, strcharinfo(0);
goto L_Close;
L_sheet_missing_cocoons:
diff --git a/world/map/npc/002-2/imec.txt b/world/map/npc/002-2/imec.txt
index 59966ff0..b8f63e4d 100644
--- a/world/map/npc/002-2/imec.txt
+++ b/world/map/npc/002-2/imec.txt
@@ -7,82 +7,98 @@
set @state, ((QUEST_NorthTulimshar & TWOBIT_4_MASK) >> TWOBIT_4_SHIFT);
set @EXP, 90;
set @money, 500;
+ set @lvl, 10;
if (@state >= 3) goto L_Stingers;
if (@state == 2) goto L_Return;
if (@state == 1) goto L_Bring;
mes "[Imec]";
+ mes "%%9";
mes "\"The Wizard's Council shut down my shop!";
- mes "They said I was selling illegal things, but what's so illegal about poison?\"";
+ mes "Why'd they have to make such a fuss over a little poison?\"";
+ next;
+ mes "\"Someday, I'm going to get my permit back from those self-righteous snobs!\"";
next;
- mes "\"Anyway, I hope to get a merchant's permit again... One of these days...\"";
mes "He looks at you.";
next;
mes "[Imec]";
- mes "\"You can do an errand for me. I just finished writing a petition to the Council about my shop.";
- mes "If you bring it to the government building near the docks, I'll give you a small reward.\"";
+ mes "%%D";
+ mes "\"Hey... I've got an idea!";
+ next;
+ mes "I just finished writing an appeal to the Council. If you bring it to the government building near the docks, they might be less... closed-minded.\"";
goto L_Offer;
L_Offer:
menu
- "Where are the docks and what is the government building?",L_Explain,
- "Ok, sounds good.",L_Next,
- "No!",L_Close;
+ "Just tell me how to get there.",L_Explain,
+ "I'll do it.",L_Next,
+ "No way!",L_Close;
L_Next:
+ mes "";
mes "[Imec]";
- mes "\"Very good. Here is the paper.\"";
- mes "Imec gives you a sealed letter. You put it away in a pocket separated from your inventory, so it won't get lost.";
+ mes "\"Great! Here's the appeal.\"";
+ mes "Imec gives you a sealed letter, which you store in a safe pocket outside of your inventory.";
set @state, 1;
callsub S_Update_Mask;
goto L_Close;
L_Explain:
+ mes "";
mes "[Imec]";
- mes "\"Follow the road to the north through the gate, then go west when you reach the docks. It's right before the castle mount.\"";
+ mes "\"Head north until you get to the docks – it's just west of the ferry.\"";
next;
- mes "\"In the building there are several offices. If you want to join or form a party, you have to pay your taxes there first.\"";
+ mes "\"There are a couple of other offices inside. You can form a party if you want, but don't take too long.\"";
+ if (BaseLevel < WEDDING_MIN_LEVEL) mes "\"Once you're older, you can even get married there.\"";
next;
- mes "\"So, will you bring my petition to the office in that building?\"";
+ mes "\"So... will you submit my appeal for me?\"";
if (@state == 0)
goto L_Offer;
goto L_Close;
L_Bring:
mes "[Imec]";
- mes "\"What are you waiting for? Bring my petition to the government building.\"";
+ mes "\"What are you waiting for? I'm not paying you till after the job is done!\"";
menu
"Where is it again?",L_Explain,
"I'm on my way.",L_Close;
L_Return:
mes "[Imec]";
- mes "\"Ah, you're back.\"";
- mes "You hand the letter of acknowledgement over to Imec.";
+ mes "\"Ah! You're back! How'd it go?\"";
+ mes "You hand the letter of acknowledgment over to Imec.";
next;
mes "[Imec]";
- mes "\"Very well. I'm sure I'll be able to open my shop again soon.\"";
+ mes "\"Great! I'm sure I'll be able to open my shop again soon.\"";
next;
- mes "It seems Imec doesn't notice you anymore.";
+ mes "It seems as though Imec has lost interest in you already.";
menu
- "You mentioned a reward.",L_Next1;
+ "You mentioned a reward...",L_Next1;
L_Next1:
+ mes "";
mes "[Imec]";
- mes "\"What? Ah, right. Here, have this.\"";
+ mes "\"What? Oh, right. Here, have this.\"";
getexp @EXP, 0;
set Zeny, Zeny + @money;
set @state, 3;
callsub S_Update_Mask;
next;
- mes "\"Actually, you could be of further help to me.\"";
+ if (BaseLevel >= @lvl)
+ goto L_Transition_Stingers;
+ if (BaseLevel < @lvl)
+ mes "\"Come back to see me once you grow stronger; I might have a job for you later on.\"";
+ goto L_Close;
+
+L_Transition_Stingers:
+ mes "\"Actually, you could be of further use to me.\"";
next;
goto L_Stingers;
L_Stingers:
mes "[Imec]";
- set @dq_level, 10;
+ set @dq_level, @lvl;
set @dq_cost, 3;
set @dq_count, 3;
set @dq_name$, "ScorpionStinger";
diff --git a/world/map/npc/002-2/kps.txt b/world/map/npc/002-2/kps.txt
index 558166ec..73b40466 100644
--- a/world/map/npc/002-2/kps.txt
+++ b/world/map/npc/002-2/kps.txt
@@ -25,23 +25,25 @@
L_Default:
mes "[KPS Manager]";
- mes "\"Kylian staying at the Inn bought this shop recently.\"";
- mes "\"I'm waiting for him to open the shop.\"";
+ mes "\"A rich salesman named Kylian bought this shop recently.\"";
+ mes "\"I'm waiting for him to give the go-ahead on opening it up, but I haven't heard from him in a while.\"";
next;
- mes "\"I wonder if he needs any help?\"";
+ mes "\"I wonder if he needs any help...\"";
+ next;
+ mes "\"If you could go over and check on him in the inn while I tend to the store, I'd really appreciate it.\"";
goto L_Close;
L_OfferJob:
mes "[KPS Manager]";
- mes "\"Hello and what how can I help you today?\"";
+ mes "\"Hello! How can I help you today?\"";
menu
- "My name is " + strcharinfo(0), L_MyName,
+ "My name is " + strcharinfo(0) + ".", L_MyName,
"Nothing.", L_Close;
L_MyName:
set @state, 11;
callfunc "SetKylianQuest";
- mes "\"Ahhh, Kylian said you would be dropping by.\"";
+ mes "\"Ah. Kylian said you would be dropping by.\"";
next;
mes "\"I assume you are looking for some work?\"";
menu
@@ -84,10 +86,10 @@ L_RandJob:
goto L_JobInfo;
L_JobInfo:
- mes "\"We have a delivery for:* " + $@random_quests$[@rand_quest] + "\"";
+ mes "\"We have a delivery for ##B" + $@random_quests$[@rand_quest] + "##b.\"";
menu
- "Take It.", L_StartRun,
- "Anything Else?", L_RandJob,
+ "I'll take it.", L_StartRun,
+ "Anything else?", L_RandJob,
"I need a break.", L_Close;
L_StartRun:
@@ -99,7 +101,7 @@ L_StartRun:
goto L_Close;
L_RunStarted:
- mes "Deliver this package to:* " + $@random_quests$[@run] + "\"";
+ mes "Deliver this package to ##B" + $@random_quests$[@run] + "##b.\"";
goto L_Close;
L_RunComplete:
@@ -118,7 +120,7 @@ L_SeeKylian:
goto L_Close;
L_Failed:
- mes "\"You need to be faster next time to earn a bonus.\"";
+ mes "\"If you're faster next time, you can earn a bonus.\"";
next;
goto L_RunAgain;
@@ -131,7 +133,7 @@ L_KylianReward:
mes "[" + $@delivery_money + " money]";
mes "[" + ($@delivery_exp_mod * BaseLevel) + " experience points]";
next;
- mes "\"I have a message Kylian wants me to send you over right away.\"";
+ mes "\"I've got news for you! Kylian wants me to send you over right away.\"";
goto L_Close;
L_RunAgain:
@@ -141,12 +143,13 @@ L_RunAgain:
mes "[" + $@delivery_money + " money]";
mes "[" + ($@delivery_exp_mod * BaseLevel) + " experience points]";
next;
- mes "\"Good job, keep up the nice work and I'm sure the bonus will give you a bonus.\"";
+ mes "\"Good job! Keep up the nice work, and I'm sure the boss will give you a bonus.\"";
next;
goto L_StartJobAgain;
L_NoPackages:
- mes "\"Come back tomorrow, maybe we will have some more work.\"";
+ mes "\"Sorry, but we don't have any more jobs open right now.\"";
+ mes "\"Come back tomorrow; maybe we will have some more work then.\"";
goto L_Close;
L_Close:
diff --git a/world/map/npc/002-2/kylian.txt b/world/map/npc/002-2/kylian.txt
index b1dadac2..dcd94548 100644
--- a/world/map/npc/002-2/kylian.txt
+++ b/world/map/npc/002-2/kylian.txt
@@ -26,11 +26,11 @@
// state 8: Kylian was in the casino and gives a desert hat as reward
// state 9: Shop approved, go talk Kylian's shopkeeper if you are looking for work.
// state 10: Meet Shop keeper
-// state 11: Start Time Trial
+// state 11: Start Time Trial
// state 12: Return
// state 13: Start Daily Timed
// state 14: Return
-// state 15: Completed
+// state 15: Completed
// Kylian_Timer is used to denote start time.
// temporary variables used to check if the player logged out or left the building in the meanwhile
@@ -39,7 +39,7 @@
// @KylianNTSightSeeing
// @KylianNTCasino
--|script|#businessmanNTconfig|-1
+-|script|#businessmanNTconfig|32767
{
end;
@@ -82,8 +82,6 @@ OnInit:
set @fun_money, 50;
set @fun_exp, 20;
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
set @fieri, ((QUEST_SouthTulimshar & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT);
if (@state == 15) goto L_Done;
@@ -102,62 +100,65 @@ OnInit:
if (@state >= 1) goto L_Suitcase;
mes "[Kylian]";
- mes "\"Ah, are you the room service? I've some requests.\"";
+ mes "\"Ah! Are you the room service? I've some requests.\"";
menu
- "Sure, what can I do for you?",L_Luggage,
- "No, I'm not!",L_Next;
+ "Sure... What can I do for you?",L_Luggage,
+ "No I'm not!",L_Next;
L_Next:
mes "[Kylian]";
mes "\"Too bad. Would you be interested in earning some quick money with some errands regardless?\"";
menu
- "I'm a great adventurer! I don't do errands.",L_Close,
- "No, I'm busy.",L_Close,
- "Mh, ok.",L_Luggage;
+ "I'm a great adventurer! I don't do petty errands.",L_Close,
+ "No. I'm busy.",L_Close,
+ "Well... OK.",L_Luggage;
L_Luggage:
mes "[Kylian]";
- mes "\"I need someone to get my luggage from the docks. Show this paper to the sailor who's watching the luggage.\"";
- mes "He gives you his ticket which you store in your pocket, separated from your inventory.";
+ mes "\"I need you to get my luggage from the docks. Just show this paper to the sailor who's watching the luggage.\"";
+ mes "He gives you his ticket, which you promptly store in a safe pocket outside of your inventory.";
set @state, 1;
callfunc "SetKylianQuest";
goto L_Close;
L_Suitcase: // @state >= 1, but below 3
mes "[Kylian]";
- mes "\"Did you already get my luggage from the docks?\"";
+ mes "\"Did you get my luggage from the docks?\"";
if (@state != 2)
goto L_Close;
menu
"Here it is.",L_Continue,
- "I'm on my way, don't worry.",L_Close;
+ "Don't worry; I'm on my way.",L_Close;
L_Continue:
if (countitem("LeatherSuitcase") < 1)
goto L_NoItem;
delitem "LeatherSuitcase", 1;
set Zeny, Zeny + @suitcase_money;
+ getitem "Acorn", @acorn_amount;
getexp @suitcase_exp, 0;
set @state, 3;
callfunc "SetKylianQuest";
+ next;
mes "[Kylian]";
- mes "\"Ah, very good. I really need to have a look at some of my papers in there.\"";
+ mes "\"Ah! Very good. I have some urgent paperwork that I've been needing to attend to.\"";
mes "He gives you some money.";
next;
mes "[Kylian]";
- mes "\"Oh, and I have some acorns left, I had them with me as travelling fare. You can have them, they're tasty.";
- mes "In case you don't like them, you could also bring them to the Tulimshar bakery. I heard they use them to make some special flour.\"";
- getitem "Acorn", @acorn_amount;
+ mes "\"Before you go, I also happen to have some acorns left over from my trip.\"";
+ mes "\"You can have them if you wish; they're rather tasty.\"";
+ mes "If, however, you don't like them, you could take them to the Tulimshar bakery. I heard they use them to make a special kind of flour.\"";
next;
goto L_ShopLicense;
L_ShopLicense: // @state == 3
mes "[Kylian]";
- mes "\"I'm a salesman and came to Tulimshar because I'm thinking about establishing a shop here. While I'm going through my papers, could you find out who I have to talk to about opening a shop in this city?\"";
+ mes "\"I'm a salesman and came to Tulimshar because I'm thinking about establishing a shop here.\"";
+ mes "\"While I'm going through my papers, could you find out whom I have to talk to about opening up a shop in this city?\"";
if (!(QUEST_NorthTulimshar & $@knowYanisNT))
goto L_Close;
menu
- "You need to talk to Yanis in the government building.",L_GovBuild,
+ "You need to go and talk to Yanis in the government building.",L_GovBuild,
"I'll see what I can do.",L_Close;
L_GovBuild:
@@ -167,24 +168,24 @@ L_GovBuild:
callfunc "SetKylianQuest";
set @KylianNTLicense, 1;
mes "[Kylian]";
- mes "\"Ah, excellent. That's very helpful. Could you tell me how to get to that building?\"";
- mes "You explain the way to the building.";
+ mes "\"Ah... excellent! That's very helpful. Could you tell me how to get to that building?\"";
+ mes "You give him directions to the building.";
next;
goto L_LicenseDone;
L_LicenseDone: // the player didn't log out yet after telling about Yanis
mes "[Kylian]";
- mes "\"I need to prepare my papers now. I might have some more questions later.\"";
+ mes "\"I need to prepare my papers now. I might have some more questions later on though.\"";
goto L_Close;
L_SightSeeing: // @state == 4 and logged out sometime between getting to that state and now
mes "[Kylian]";
- mes "\"You just came here the right moment. I have finished my business affairs. I think I should use my time here to also get a bit of cultural knowledge about the area. Can you tell me if there are any historical places to visit?\"";
+ mes "\"You came here at just the right moment! I have finished my business affairs, and I think I should use my time here to learn a bit about the culture in the area. Can you tell me if there are any historical places or landmarks to visit?\"";
if (!(QUEST_NorthTulimshar & $@knowWeellosNT))
goto L_Close;
menu
- "There is a very old historic building not far from here.",L_HistBuild,
- "I don't know, but will have a look around.",L_Close;
+ "There's a very old building not far from here.",L_HistBuild,
+ "I don't know, but I'll have a look around.",L_Close;
L_HistBuild:
set Zeny, Zeny + @sightseeing_money;
@@ -199,12 +200,12 @@ L_HistBuild:
L_Food: // @state == 5
mes "[Kylian]";
- mes "\"While I'm out, I could also get something to eat. Maybe some typical dish for this region. Do you have a good suggestion for that?\"";
+ mes "\"While I'm out, I could also get something to eat. Do you have any suggestions for local cuisine?\"";
if (@fieri < 4) // didn't yet help Fieri make Tonori Delight
goto L_Close;
menu
- "Fieri at the castle makes great Tonori Delight.",L_SoupBer,
- "No idea, I'll try to find out.",L_Close;
+ "A man named Fieri makes a tasty Tonori Delight over at the castle.",L_SoupBer,
+ "No idea. I'll try to find out.",L_Close;
L_SoupBer:
set Zeny, Zeny + @food_money;
@@ -216,14 +217,14 @@ L_SoupBer:
L_SightSeeingDone:
mes "[Kylian]";
- mes "\"I'm going to see the historic building you told me about and try this local food at the castle. Thank you for the suggestions.\"";
+ mes "\"I'm going to see the historic building you told me about and try the local food at the castle. Thank you for the suggestions.\"";
goto L_Close;
L_Casino: // @state == 6 and logged out sometime between getting to that state and now
mes "[Kylian]";
- mes "\"Hello. I just came back from my sight-seeing tour. And this Tonori Delight really was delicious. I wonder what it's made of...\"";
+ mes "\"Hello. I just came back from my sight-seeing tour, and this Tonori Delight really was delicious. I wonder what it's made of...\"";
next;
- mes "\"However, I was wondering if you know about a good place to spend the evening? Some place to have fun?\"";
+ mes "\"However, I was wondering if you know about some evening attractions. Maybe somewhere to have fun?\"";
if (!(QUEST_NorthTulimshar & $@knowCasinoNT))
goto L_Close;
menu
@@ -236,19 +237,19 @@ L_CasinoFound:
set @state, 7;
callfunc "SetKylianQuest";
mes "[Kylian]";
- mes "\"Oh, there's a casino in this city? That's a wonderful thing. Where can I find it?\"";
+ mes "\"Oh! There's a casino in this city? That's wonderful! Where can I find it?\"";
mes "You explain how to get to the casino.";
next;
goto L_Clothes;
L_Clothes: // @state == 7
mes "[Kylian]";
- mes "\"I should get proper clothing before I go to the casino tonight. Do you know a reputable shop where clothing of high quality is sold?\"";
+ mes "\"I should acquire proper clothing before I go to the casino tonight. Do you know a reputable shop where high-quality clothing is sold?\"";
if (!(QUEST_NorthTulimshar & $@knowLatoyNT))
goto L_Close;
menu
- "Latoy's shop. On the west side of Tulimshar.",L_HarborDistrict,
- "Mh, I don't know.",L_Close;
+ "Latoy's shop. It's on the west side of Tulimshar.",L_HarborDistrict,
+ "Hmmm... I don't know.",L_Close;
L_HarborDistrict:
set Zeny, Zeny + @clothes_money;
@@ -256,23 +257,25 @@ L_HarborDistrict:
set @state, 8;
callfunc "SetKylianQuest";
set @KylianNTCasino, 1;
- mes "You explain about Latoy and the high quality shop.";
+ mes "You explain about Latoy and the quality of his shop.";
+ next;
mes "[Kylian]";
mes "\"This seems to be exactly what I need. Thanks a lot.\"";
goto L_Close;
L_CasinoDone:
mes "[Kylian]";
- mes "\"I'm looking forward to going to the casino tonight. See me tomorrow.\"";
+ mes "\"I'm looking forward to going to the casino tonight. See me tomorrow, and I might have more requests.\"";
goto L_Close;
L_DesertHat: // @state == 8
mes "Kylian looks a bit tired.";
+ next;
mes "[Kylian]";
mes "\"That was an interesting night. Thanks for your suggestion to visit the casino.\"";
next;
getinventorylist;
- mes "\"You helped me a lot, so I bought a souvenir for you while I was shopping.\"";
+ mes "\"You helped me out a lot, so I bought a souvenir for you while I was out shopping.\"";
if ((checkweight("DesertHat", 1) == 0) || (@inventorylist_count == 100))
goto L_Inventory;
getitem "DesertHat", 1;
@@ -284,33 +287,33 @@ L_DesertHat: // @state == 8
L_Shop:
mes "[Kylian]";
mes "\"The Council of Wizards approved my shop license!\"";
- mes "\"I purchased a store just acorss the way from the hotel exit.\"";
+ mes "\"I purchased a store just across the way from the inn.\"";
next;
- mes "\"If you are looking for work, go see the shop keeper I have working for me.\"";
- mes "\"Mention your name and he will know I sent you.\"";
+ mes "\"If you are looking for work, go see the shop keeper I have working for me there.\"";
+ mes "\"Mention your name, and he will know I sent you.\"";
set @state, 10;
callfunc "SetKylianQuest";
goto L_Close;
L_OfferedJob:
mes "[Kylian]";
- mes "\"I spoke with the shopkeeper, They said you haven't stopped in yet.\"";
+ mes "\"I spoke with the shopkeeper, and he said you haven't stopped in yet.\"";
next;
- mes "\"I wish you would consider working for KPS.\"";
+ mes "\"I wish you would consider working for me.\"";
next;
- mes "\"KPS needs a well-traveled go getter like you.\"";
+ mes "\"KPS needs a determined, experienced adventurer like you.\"";
goto L_Close;
L_Helping:
mes "[Kylian]";
- mes "\"I've heard you decided to come work for me. That is great news.\"";
- mes "\"Keep up the good work and I might have something a little extra for you.\"";
+ mes "\"I've heard you decided to come work for me. That's great news!\"";
+ mes "\"Keep up the good work, and I might have something a little extra for you.\"";
goto L_Close;
L_Done:
mes "[Kylian]";
- mes "\"Thanks a bunch, buisness is booming!\"";
- mes "\"For your hard work take this.\"";
+ mes "\"Thanks a bunch, business is booming!\"";
+ mes "\"Please, take this for all your hard work.\"";
next;
set Zeny, Zeny + $@delivery_money;
getexp ($@delivery_exp_mod * BaseLevel), 0;
@@ -325,12 +328,12 @@ L_Done:
L_Inventory:
mes "[Kylian]";
- mes "\"Oh, you're carrying a lot of things. Come back when you have more room.\"";
+ mes "\"Oh my. You're carrying quite a lot. Come back when you have more room.\"";
goto L_Close;
L_NoItem:
mes "[Kylian]";
- mes "\"I don't see it! Are you trying to tease me? This is not funny!\"";
+ mes "\"I don't see it! Are you trying to tease me? This isn't funny!\"";
goto L_Close;
L_Close:
@@ -361,7 +364,6 @@ function|script|SetKylianQuest
function|script|KylianDebug
{
set @state, ((QUEST_NorthTulimshar & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT);
- callfunc "ClearVarTMW_Quest";
set @fieri, ((QUEST_SouthTulimshar & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
set @run, ((QUEST_NorthTulimshar & TWOBIT_8_MASK) >> TWOBIT_8_SHIFT);
set @run_cnt, ((QUEST_NorthTulimshar & TWOBIT_9_MASK) >> TWOBIT_9_SHIFT);
@@ -372,8 +374,8 @@ L_Menu:
menu
"Show Quest State", L_ShowState,
"Set Quest State", L_SetState,
- "Reset Timer to now", L_WorkTimer,
- "Reset Timer + 24 hours", L_MoreWorkTimer,
+ "Reset Timer to Now", L_WorkTimer,
+ "Reset Timer + 24 Hours", L_MoreWorkTimer,
"Close.", L_Close;
L_ShowState:
@@ -402,12 +404,12 @@ L_MoreWorkTimer:
goto L_Menu;
L_Close:
- close;
+ return;
}
002-2,40,101,0|script|KylianDebug#1|193
{
callfunc "KylianDebug";
- end;
+ close;
OnInit:
if (!debug)
disablenpc "KylianDebug#1";
@@ -416,7 +418,7 @@ OnInit:
002-2,118,89,0|script|KylianDebug#2|193
{
callfunc "KylianDebug";
- end;
+ close;
OnInit:
if (!debug)
disablenpc "KylianDebug#2";
diff --git a/world/map/npc/002-2/troupe_leader.txt b/world/map/npc/002-2/troupe_leader.txt
index de8517c5..79c85dc6 100644
--- a/world/map/npc/002-2/troupe_leader.txt
+++ b/world/map/npc/002-2/troupe_leader.txt
@@ -2,8 +2,6 @@
002-2,81,21,0|script|Troupe Leader|165
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (@inspector == 4) goto L_NohMask_Troupe;
diff --git a/world/map/npc/002-3/_mobs.txt b/world/map/npc/002-3/_mobs.txt
index 3d0486b8..963b8e36 100644
--- a/world/map/npc/002-3/_mobs.txt
+++ b/world/map/npc/002-3/_mobs.txt
@@ -3,7 +3,7 @@
-002-3,0,0,0|script|Mob002-3|-1
+002-3,0,0,0|script|Mob002-3|32767
{
end;
}
diff --git a/world/map/npc/002-3/mining_camp_barrier.txt b/world/map/npc/002-3/mining_camp_barrier.txt
index 029722a1..a6550990 100644
--- a/world/map/npc/002-3/mining_camp_barrier.txt
+++ b/world/map/npc/002-3/mining_camp_barrier.txt
@@ -2,9 +2,6 @@
002-3,82,32,0|script|#Sandstorm_Mine_Barrier|45,0,0
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state >= 8) goto L_Barrier_Open;
diff --git a/world/map/npc/002-3/nathan.txt b/world/map/npc/002-3/nathan.txt
index 9661fc18..125c6a01 100644
--- a/world/map/npc/002-3/nathan.txt
+++ b/world/map/npc/002-3/nathan.txt
@@ -2,9 +2,6 @@
002-3,42,45,6|script|Nathan|109
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state >= 20) goto L_Nathan_Complete;
diff --git a/world/map/npc/002-3/traveler.txt b/world/map/npc/002-3/traveler.txt
index a1fd4f6f..48175be8 100644
--- a/world/map/npc/002-3/traveler.txt
+++ b/world/map/npc/002-3/traveler.txt
@@ -4,7 +4,7 @@
002-3,25,28,0|script|Jena the Traveler|103
{
- set @NpcName$, "Jena";
+ set @npcname$, "Jena";
set @NpcTravelBit, $@tul_mine_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/002-4/_mobs.txt b/world/map/npc/002-4/_mobs.txt
index c497e831..0a461429 100644
--- a/world/map/npc/002-4/_mobs.txt
+++ b/world/map/npc/002-4/_mobs.txt
@@ -17,7 +17,7 @@
002-4,63,100,2,5|monster|AngryScorpion|1057,3,100000ms,30000ms,Mob002-4::On1057
-002-4,0,0,0|script|Mob002-4|-1
+002-4,0,0,0|script|Mob002-4|32767
{
end;
diff --git a/world/map/npc/002-4/mine_triggerone.txt b/world/map/npc/002-4/mine_triggerone.txt
index 03cee2da..ef8a75cb 100644
--- a/world/map/npc/002-4/mine_triggerone.txt
+++ b/world/map/npc/002-4/mine_triggerone.txt
@@ -3,9 +3,6 @@
002-4,30,47,0|script|Button#mine-1|400,0,0
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state == 24) goto L_Trigger_Wrong_1;
diff --git a/world/map/npc/002-4/mine_triggerthree.txt b/world/map/npc/002-4/mine_triggerthree.txt
index fe9fe672..707329da 100644
--- a/world/map/npc/002-4/mine_triggerthree.txt
+++ b/world/map/npc/002-4/mine_triggerthree.txt
@@ -3,9 +3,6 @@
002-4,91,99,0|script|Button#mine-3|400,0,0
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state == 24) goto L_Trigger_Wrong_3;
diff --git a/world/map/npc/002-4/mine_triggertwo.txt b/world/map/npc/002-4/mine_triggertwo.txt
index ec181596..5ec5b659 100644
--- a/world/map/npc/002-4/mine_triggertwo.txt
+++ b/world/map/npc/002-4/mine_triggertwo.txt
@@ -5,9 +5,6 @@
002-4,100,37,0|script|Button#mine-2|400,0,0
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state == 24) goto L_Trigger_2;
diff --git a/world/map/npc/002-4/naem.txt b/world/map/npc/002-4/naem.txt
index 9c2c1f65..34e43b49 100644
--- a/world/map/npc/002-4/naem.txt
+++ b/world/map/npc/002-4/naem.txt
@@ -4,9 +4,6 @@
002-4,91,96,6|script|Naem|109
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (FLAGS & FLAG_GOT_NAEM_GLOVES) goto L_Naem_Complete;
diff --git a/world/map/npc/002-4/underground_palace_barrier.txt b/world/map/npc/002-4/underground_palace_barrier.txt
index 3ed1a0a9..6c9d096a 100644
--- a/world/map/npc/002-4/underground_palace_barrier.txt
+++ b/world/map/npc/002-4/underground_palace_barrier.txt
@@ -2,9 +2,6 @@
002-4,68,98,0|script|#UGP_Barrier|45,0,0
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state >= 25) goto L_Barrier_Open;
diff --git a/world/map/npc/002-5/_mobs.txt b/world/map/npc/002-5/_mobs.txt
index 535198fd..c6894850 100644
--- a/world/map/npc/002-5/_mobs.txt
+++ b/world/map/npc/002-5/_mobs.txt
@@ -20,7 +20,7 @@
002-5,62,62,5,43|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-5::On1108
-002-5,0,0,0|script|Mob002-5|-1
+002-5,0,0,0|script|Mob002-5|32767
{
end;
diff --git a/world/map/npc/002-5/chest.txt b/world/map/npc/002-5/chest.txt
index fe0c2448..2cdda691 100644
--- a/world/map/npc/002-5/chest.txt
+++ b/world/map/npc/002-5/chest.txt
@@ -2,9 +2,6 @@
002-5,93,37,0|script|Supply Chest|378
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state >= 26) goto L_Finished;
diff --git a/world/map/npc/002-5/sema.txt b/world/map/npc/002-5/sema.txt
index 57ac1790..c80e9660 100644
--- a/world/map/npc/002-5/sema.txt
+++ b/world/map/npc/002-5/sema.txt
@@ -2,9 +2,6 @@
002-5,43,91,6|script|Sema|340
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & BYTE_2_MASK) >> BYTE_2_SHIFT);
if (@state >= 28) goto L_Sema_Done;
diff --git a/world/map/npc/004-3/_mobs.txt b/world/map/npc/004-3/_mobs.txt
index 5fb9ed43..dce2ec02 100644
--- a/world/map/npc/004-3/_mobs.txt
+++ b/world/map/npc/004-3/_mobs.txt
@@ -10,7 +10,7 @@
004-3,71,63,7,8|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-3::On1121
-004-3,0,0,0|script|Mob004-3|-1
+004-3,0,0,0|script|Mob004-3|32767
{
end;
diff --git a/world/map/npc/004-4/_mobs.txt b/world/map/npc/004-4/_mobs.txt
index 113c204f..525a7215 100644
--- a/world/map/npc/004-4/_mobs.txt
+++ b/world/map/npc/004-4/_mobs.txt
@@ -12,7 +12,7 @@
004-4,34,88,10,4|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-4::On1121
-004-4,0,0,0|script|Mob004-4|-1
+004-4,0,0,0|script|Mob004-4|32767
{
end;
diff --git a/world/map/npc/004-5/_mobs.txt b/world/map/npc/004-5/_mobs.txt
index 808b2608..2d3acc7e 100644
--- a/world/map/npc/004-5/_mobs.txt
+++ b/world/map/npc/004-5/_mobs.txt
@@ -15,7 +15,7 @@
004-5,81,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120
-004-5,0,0,0|script|Mob004-5|-1
+004-5,0,0,0|script|Mob004-5|32767
{
end;
diff --git a/world/map/npc/004-5/chest.txt b/world/map/npc/004-5/chest.txt
index a54739fc..92b55e6c 100644
--- a/world/map/npc/004-5/chest.txt
+++ b/world/map/npc/004-5/chest.txt
@@ -1,8 +1,8 @@
004-5,89,67,0|script|Old Chest#crastur|111
{
- setarray @npc_loc, 89, 67, 1;
+ set @npc_distance, 1;
callfunc "PCtoNPCRange";
- if(@npc_check == 1) goto L_Closer;
+ if(@npc_check) end;
set @spants_state, ((QUEST_WG_state & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
if(@spants_state > 5) goto L_Looted;
if(@spants_state != 5) goto L_Unknown;
@@ -22,10 +22,6 @@ L_Unknown:
mes "You have no idea how to open this chest.";
goto L_Close;
-L_Closer:
- mes "You need to move closer to open the chest.";
- goto L_Close;
-
L_Close:
close;
}
diff --git a/world/map/npc/005-3/_mobs.txt b/world/map/npc/005-3/_mobs.txt
index 0cc8da62..63e58847 100644
--- a/world/map/npc/005-3/_mobs.txt
+++ b/world/map/npc/005-3/_mobs.txt
@@ -6,7 +6,7 @@
005-3,58,57,62,57|monster|GiantMaggot|1006,20,100000ms,30000ms,Mob005-3::On1006
-005-3,0,0,0|script|Mob005-3|-1
+005-3,0,0,0|script|Mob005-3|32767
{
end;
diff --git a/world/map/npc/006-1/_mobs.txt b/world/map/npc/006-1/_mobs.txt
index d2a6f7f0..2288ec92 100644
--- a/world/map/npc/006-1/_mobs.txt
+++ b/world/map/npc/006-1/_mobs.txt
@@ -24,7 +24,7 @@
006-1,100,36,38,24|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010
-006-1,0,0,0|script|Mob006-1|-1
+006-1,0,0,0|script|Mob006-1|32767
{
end;
diff --git a/world/map/npc/006-1/miriam.txt b/world/map/npc/006-1/miriam.txt
index 6580664f..edcb5b63 100644
--- a/world/map/npc/006-1/miriam.txt
+++ b/world/map/npc/006-1/miriam.txt
@@ -20,10 +20,9 @@
006-1,115,111,0|script|Miriam|175
{
- setarray @npc_loc, 115, 111, 2;
+ set @npc_distance, 2;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
+ if(@npc_check) end;
if (getskilllv(SKILL_SPEED)) goto L_fast;
if (getequipid(equip_torso) < 0) goto L_naked;
@@ -161,12 +160,11 @@ L_teach:
"I am already fast.", L_notfast;
L_Prepared:
- set @agi, readparam(bAgi);
- set @torso$, getitemname(getequipid(equip_torso));
+ set @torso$, getitemlink(getequipid(equip_torso));
set @weight, MaxWeight/Weight;
if (@weight < 3)
goto L_heavyweight;
- if (@agi < 60)
+ if (Agi < 60)
goto L_slow;
if (BaseLevel < 60)
goto L_lowlevel;
@@ -197,7 +195,7 @@ L_heavymetal:
L_slow:
mes "[Miriam]";
- mes "Oh, wait, wait... " +@agi+ " Agility? Are you serious? What do you do with all your Character points? Put them all to 'Strength'? Really... I don't even want to know... Come back here when you have a decent character points distribution!\"";
+ mes "Oh, wait, wait... " +Agi+ " Agility? Are you serious? What do you do with all your Character points? Put them all to 'Strength'? Really... I don't even want to know... Come back here when you have a decent character points distribution!\"";
close;
L_lowlevel:
@@ -212,11 +210,11 @@ L_offer:
if (!(getskilllv(SKILL_POOL)))
goto L_noskill;
menu
- "Yes, I look really good in this " +@torso$+ ".",L_TorsoNext;
+ "Yes, I look really good in this.",L_TorsoNext;
L_TorsoNext:
mes "[Miriam]";
- mes "\"I see. I like the way you distributed your Character Points too... " +@agi+ " points to Agility! You really know how to prepare yourself for a good fight!\"";
+ mes "\"I see. I like the way you distributed your Character Points too... " +Agi+ " points to Agility! You really know how to prepare yourself for a good fight!\"";
next;
mes "\"Well... Even if you have a potential to be a good fighter, moving the way you do will not help. You need to be fast to avoid the monsters. \"";
next;
diff --git a/world/map/npc/006-1/pachua.txt b/world/map/npc/006-1/pachua.txt
index 7b39dce7..f0230a7a 100644
--- a/world/map/npc/006-1/pachua.txt
+++ b/world/map/npc/006-1/pachua.txt
@@ -1,9 +1,7 @@
006-1,24,113,0|script|Pachua|143
{
- setarray @npc_loc, 24, 113, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
+ if(@npc_check) end;
set @halloween_npc_id, $@halloween_npc_pachua;
callfunc "TrickOrTreat";
diff --git a/world/map/npc/006-1/spirit.txt b/world/map/npc/006-1/spirit.txt
index ef88d7d7..ecf3a4b1 100644
--- a/world/map/npc/006-1/spirit.txt
+++ b/world/map/npc/006-1/spirit.txt
@@ -4,7 +4,7 @@ function|script|EarthImpTouch
mes "[Well]";
mes "You hear noises from within the well.";
- close;
+ return;
L_message:
set @Q_MASK, NIBBLE_0_MASK;
@@ -279,7 +279,7 @@ L_Close:
set @Q_STATUS_STUDENT2, 0;
set @Q_STATUS_STUDENT3, 0;
set @s$, "";
- close;
+ return;
S_update_var:
set QUEST_MAGIC2, (QUEST_MAGIC2 & ~(@Q_MASK) | (@Q_status << @Q_SHIFT));
@@ -289,11 +289,11 @@ S_update_var:
006-1,63,79,0|script|#EarthImp0#_M|400
{
callfunc "EarthImpTouch";
- end;
+ close;
}
006-1,64,79,0|script|#EarthImp1#_M|400
{
callfunc "EarthImpTouch";
- end;
+ close;
}
diff --git a/world/map/npc/006-1/traveler.txt b/world/map/npc/006-1/traveler.txt
index f87cf083..7c84e040 100644
--- a/world/map/npc/006-1/traveler.txt
+++ b/world/map/npc/006-1/traveler.txt
@@ -4,7 +4,7 @@
006-1,25,95,0|script|Rhutan the Traveler|103
{
- set @NpcName$, "Rhutan";
+ set @npcname$, "Rhutan";
set @NpcTravelBit, $@pachua_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/006-1/tree.txt b/world/map/npc/006-1/tree.txt
index ecbc3584..6740312e 100644
--- a/world/map/npc/006-1/tree.txt
+++ b/world/map/npc/006-1/tree.txt
@@ -39,7 +39,7 @@ L_Close:
set @Q_status_lower, 0;
set @Q_wr_status, 0;
set @value, 0;
- close;
+ return;
S_update_var:
set @Q_wr_status, (@Q_status << 2) | @Q_status_lower;
@@ -151,18 +151,18 @@ L_Close:
set @Q_MASK, 0;
set @Q_SHIFT, 0;
set @Q_status, 0;
- close;
+ return;
}
006-1,82,59,0|script|#DruidTree0#_M|400
{
callfunc "QuestTreeTouch";
- end;
+ close;
}
006-1,83,59,0|script|#DruidTree1#_M|400
{
callfunc "QuestTreeTouch";
- end;
+ close;
}
diff --git a/world/map/npc/006-2/_mobs.txt b/world/map/npc/006-2/_mobs.txt
index 25ccb409..13ee9057 100644
--- a/world/map/npc/006-2/_mobs.txt
+++ b/world/map/npc/006-2/_mobs.txt
@@ -3,7 +3,7 @@
-006-2,0,0,0|script|Mob006-2|-1
+006-2,0,0,0|script|Mob006-2|32767
{
end;
}
diff --git a/world/map/npc/006-3/_mobs.txt b/world/map/npc/006-3/_mobs.txt
index db817544..3fa25c29 100644
--- a/world/map/npc/006-3/_mobs.txt
+++ b/world/map/npc/006-3/_mobs.txt
@@ -29,7 +29,7 @@
006-3,83,107,13,14|monster|YellowSlime|1007,6,90000ms,30000ms,Mob006-3::On1007
-006-3,0,0,0|script|Mob006-3|-1
+006-3,0,0,0|script|Mob006-3|32767
{
end;
diff --git a/world/map/npc/007-1/_mobs.txt b/world/map/npc/007-1/_mobs.txt
index b1fedba0..846c9fc5 100644
--- a/world/map/npc/007-1/_mobs.txt
+++ b/world/map/npc/007-1/_mobs.txt
@@ -12,7 +12,7 @@
007-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob007-1::On1055
-007-1,0,0,0|script|Mob007-1|-1
+007-1,0,0,0|script|Mob007-1|32767
{
end;
diff --git a/world/map/npc/007-1/voltain.txt b/world/map/npc/007-1/voltain.txt
index 9c51fe3f..0366ea5c 100644
--- a/world/map/npc/007-1/voltain.txt
+++ b/world/map/npc/007-1/voltain.txt
@@ -357,7 +357,7 @@ L_Next14:
set Zeny, Zeny + @CHOCOLATECAKE_REWARD_GOLD;
set $@VOLTAIN_state, 0;
mes "\"I love chocolate cakes. I wonder, if I can use my ven- \"";
- emotion EMOTE_EVIL;
+ emotion EMOTE_EVIL, strcharinfo(0);
goto L_Close;
L_NOHELP:
diff --git a/world/map/npc/008-1/_mobs.txt b/world/map/npc/008-1/_mobs.txt
index 6f5e65be..33a425e3 100644
--- a/world/map/npc/008-1/_mobs.txt
+++ b/world/map/npc/008-1/_mobs.txt
@@ -12,7 +12,7 @@
008-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob008-1::On1055
-008-1,0,0,0|script|Mob008-1|-1
+008-1,0,0,0|script|Mob008-1|32767
{
end;
diff --git a/world/map/npc/008-1/annualeaster.txt b/world/map/npc/008-1/annualeaster.txt
index 51c901a3..d0898823 100644
--- a/world/map/npc/008-1/annualeaster.txt
+++ b/world/map/npc/008-1/annualeaster.txt
@@ -135,7 +135,7 @@ L_End1:
}
-008-1,59,38,0|script|#AnnualEaster|-1
+008-1,59,38,0|script|#AnnualEaster|32767
{
end;
@@ -225,14 +225,14 @@ S_disableEggs:
S_relocateEasterEgg:
if ($@peopleFoundEggs[$@EggID] < $@AEASTER_mapcount)
- goto L_Return;
+ goto S_Return;
set $@peopleFoundEggs[$@EggID], 0;
set $@eastereggPos, rand(getarraysize($@easteregg_posx));
npcwarp $@easteregg_posx[$@eastereggPos], $@easteregg_posy[$@eastereggPos], "#TestEgg" + $@EggID;
- goto L_Return;
+ goto S_Return;
-L_Return:
+S_Return:
return;
}
diff --git a/world/map/npc/008-1/diryn.txt b/world/map/npc/008-1/diryn.txt
index dae18c13..6570f1d8 100644
--- a/world/map/npc/008-1/diryn.txt
+++ b/world/map/npc/008-1/diryn.txt
@@ -4,7 +4,7 @@
008-1,81,82,0|script|Diryn the Traveler|103
{
- set @NpcName$, "Diryn";
+ set @npcname$, "Diryn";
set @NpcTravelBit, $@hurnscald_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/008-1/hinnak.txt b/world/map/npc/008-1/hinnak.txt
index 0213c3cc..c2360141 100644
--- a/world/map/npc/008-1/hinnak.txt
+++ b/world/map/npc/008-1/hinnak.txt
@@ -7,8 +7,6 @@
008-1,101,30,0|script|Hinnak|142
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (@inspector == 10) goto L_NohMask;
diff --git a/world/map/npc/008-1/mikhail.txt b/world/map/npc/008-1/mikhail.txt
index bf804796..98a58d12 100644
--- a/world/map/npc/008-1/mikhail.txt
+++ b/world/map/npc/008-1/mikhail.txt
@@ -2,9 +2,6 @@
008-1,135,25,0|script|Mikhail|120
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
if (@state >= 6) goto L_Done;
diff --git a/world/map/npc/009-1/_import.txt b/world/map/npc/009-1/_import.txt
index 32014688..4c902627 100644
--- a/world/map/npc/009-1/_import.txt
+++ b/world/map/npc/009-1/_import.txt
@@ -3,6 +3,7 @@
map: 009-1
npc: npc/009-1/_mobs.txt
npc: npc/009-1/_warps.txt
+npc: npc/009-1/constable.txt
npc: npc/009-1/dock.txt
npc: npc/009-1/guide.txt
npc: npc/009-1/jack.txt
diff --git a/world/map/npc/009-1/_mobs.txt b/world/map/npc/009-1/_mobs.txt
index bab67b1b..247a3797 100644
--- a/world/map/npc/009-1/_mobs.txt
+++ b/world/map/npc/009-1/_mobs.txt
@@ -8,7 +8,7 @@
009-1,0,0,0,0|monster|Butterfly|1055,5,30ms,20ms,Mob009-1::On1055
-009-1,0,0,0|script|Mob009-1|-1
+009-1,0,0,0|script|Mob009-1|32767
{
end;
diff --git a/world/map/npc/009-1/constable.txt b/world/map/npc/009-1/constable.txt
new file mode 100644
index 00000000..23dd01da
--- /dev/null
+++ b/world/map/npc/009-1/constable.txt
@@ -0,0 +1,11 @@
+//
+
+009-1,52,33,0|script|Constable Bob|419
+{
+ mes "[Constable Bob]";
+ mes "\"Hello.\"";
+ mes "\"I've been getting complaints of lawlessness in Hurnscald recently, so I thought I'd come down here myself and explain the rules.\"";
+ mes "\"Please make sure that you follow them!\"";
+ callfunc "GameRules";
+ close;
+}
diff --git a/world/map/npc/009-1/jack.txt b/world/map/npc/009-1/jack.txt
index 3446c191..05c9f8c5 100644
--- a/world/map/npc/009-1/jack.txt
+++ b/world/map/npc/009-1/jack.txt
@@ -16,8 +16,6 @@
// Lumberjack
009-1,40,45,0|script|Jack|141
{
- callfunc "ClearVariables";
-
set @RAWLOGS_AMOUNT, 40;
set @SHIELD_COST, 5000;
set @QUEST_SHIELD_EXP, 2500;
@@ -259,7 +257,6 @@ L_NohMask_Answer:
goto L_Close;
L_Made_Shield:
- next;
mes "[Jack Lumber]";
mes "\"Speaking of that shield...\"";
mes "\"It has put me behind on all these new Nivalis orders, now that the ship is running there.\"";
diff --git a/world/map/npc/009-1/milly.txt b/world/map/npc/009-1/milly.txt
index 3e389d27..a32f7617 100644
--- a/world/map/npc/009-1/milly.txt
+++ b/world/map/npc/009-1/milly.txt
@@ -8,14 +8,12 @@
009-1,81,41,0|script|Milly|114
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
set @got_boneknife, ((QUEST_Forestbow_state & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT) >= 4;
set @got_setzer, ((QUEST_Forestbow_state & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT) >= 8;
set @saved_rossy, (FLAGS & FLAG_ROSSI_COMPLETED);
- set @saved_cindy, ((QUEST_Nivalis_state & NIBBLE_5_MASK) >> NIBBLE_5_SHIFT) >= 4;
+ set @saved_cindy, QL_CINDY == 4;
if (FLAGS & FLAG_GOT_BEANIEHAT) goto L_FinishedGood;
if (FLAGS & FLAG_DECLINED_BEANIEHAT) goto L_FinishedBad;
@@ -418,7 +416,7 @@ L_DRossy:
close;
L_DCindy:
- set QUEST_Nivalis_state, (QUEST_Nivalis_state & ~(NIBBLE_5_MASK)) | (4 << NIBBLE_5_SHIFT);
+ set QL_CINDY, 4;
mes "Cindy quest set to completed.";
close;
@@ -444,7 +442,7 @@ L_NRossy:
close;
L_NCindy:
- set QUEST_Nivalis_state, (QUEST_Nivalis_state & ~(NIBBLE_5_MASK)) | (0 << NIBBLE_5_SHIFT);
+ set QL_CINDY, 0;
mes "Cindy quest set to not completed.";
close;
diff --git a/world/map/npc/009-1/old_man.txt b/world/map/npc/009-1/old_man.txt
index ca3999ee..4abf906e 100644
--- a/world/map/npc/009-1/old_man.txt
+++ b/world/map/npc/009-1/old_man.txt
@@ -2,8 +2,6 @@
009-1,85,51,0|script|Old Man|159
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
mes "[Old Man]";
diff --git a/world/map/npc/009-1/old_woman.txt b/world/map/npc/009-1/old_woman.txt
index 83e59eaa..d3b26e7e 100644
--- a/world/map/npc/009-1/old_woman.txt
+++ b/world/map/npc/009-1/old_woman.txt
@@ -2,29 +2,25 @@
009-1,29,43,0|script|Old Woman|154
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (BaseLevel < 40) goto L_Lower;
mes "[Old Woman]";
mes "\"Hello deary.\"";
- next;
- goto L_Continue;
+ if ((@inspector >= 1 && @inspector <= 7) || @inspector == 9)
+ goto L_NohMask;
+ close;
L_Lower:
mes "[Old Woman]";
mes "\"Watch out for these flowers. They don't like to be messed with.\"";
- next;
- goto L_Continue;
-
-L_Continue:
if ((@inspector >= 1 && @inspector <= 7) || @inspector == 9)
goto L_NohMask;
- goto L_Close;
+ close;
L_NohMask:
+ next;
if (@inspector == 7)
goto L_NohMask_Alibi;
callfunc "ProcessEquip";
diff --git a/world/map/npc/009-1/sabine.txt b/world/map/npc/009-1/sabine.txt
index 348e28c4..2f960f75 100644
--- a/world/map/npc/009-1/sabine.txt
+++ b/world/map/npc/009-1/sabine.txt
@@ -2,8 +2,6 @@
009-1,88,27,0|script|Sabine|106
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
mes "[Sabine]";
diff --git a/world/map/npc/009-1/soul-menhir.txt b/world/map/npc/009-1/soul-menhir.txt
index 855eddf1..3b8c5cee 100644
--- a/world/map/npc/009-1/soul-menhir.txt
+++ b/world/map/npc/009-1/soul-menhir.txt
@@ -2,7 +2,6 @@
009-1,53,40,0|script|Soul Menhir#hurnscald|344
{
- callfunc "ClearVariables";
set @map$, "009-1";
setarray @Xs, 52, 53, 54, 52, 54, 52, 54;
setarray @Ys, 39, 39, 39, 40, 40, 41, 41;
diff --git a/world/map/npc/009-2/_mobs.txt b/world/map/npc/009-2/_mobs.txt
index 22518d34..e0b8a1a0 100644
--- a/world/map/npc/009-2/_mobs.txt
+++ b/world/map/npc/009-2/_mobs.txt
@@ -3,7 +3,7 @@
-009-2,0,0,0|script|Mob009-2|-1
+009-2,0,0,0|script|Mob009-2|32767
{
end;
}
diff --git a/world/map/npc/009-2/airlia.txt b/world/map/npc/009-2/airlia.txt
index 62c76e38..71726331 100644
--- a/world/map/npc/009-2/airlia.txt
+++ b/world/map/npc/009-2/airlia.txt
@@ -163,7 +163,7 @@ L_Next2:
L_intro_proof:
mes "[Airlia]";
- mes "\"Let's say " + @FETCH_AMOUNT_INITIAL + " " + getitemname(@FETCH_LABEL_INITIAL$) + "s. You don't know how much this means to me, thank you.\"";
+ mes "\"Let's say " + @FETCH_AMOUNT_INITIAL + " " + getitemlink(@FETCH_LABEL_INITIAL$) + "s. You don't know how much this means to me, thank you.\"";
set QUEST_Airlia, @Q_STATUS_HELP_AIRLIA;
close;
@@ -171,6 +171,7 @@ L_Fetch:
mes "[Airlia]";
mes "\"Thank you for helping my father.\"";
next;
+ mes "\"Have you collected the " + @FETCH_AMOUNT_INITIAL + " " + getitemlink(@FETCH_LABEL_INITIAL$) + "?\"";
// Make sure to check if the player has a letter to deliver.
// If the check is not made then there is a bug, where the player
@@ -179,13 +180,13 @@ L_Fetch:
if (QUEST_Graveyard_Caretaker < @Q_STATUS_HAS_NEW_LETTER)
menu
- "You are welcome.", L_Close,
- "I have collected the " + @FETCH_AMOUNT_INITIAL + " " + getitemname(@FETCH_LABEL_INITIAL$) + "s.", L_Fetch_initial_reward;
+ "Yes.", L_Fetch_initial_reward,
+ "No.", L_Close;
if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER)
menu
- "You are welcome.", L_Close,
"I have another letter from your father.", L_later_rewards,
- "I have collected the " + @FETCH_AMOUNT_INITIAL + " " + getitemname(@FETCH_LABEL_INITIAL$) + "s.", L_Fetch_initial_reward;
+ "Yes.", L_Fetch_initial_reward,
+ "No.", L_Close;
goto L_Close;
L_Fetch_initial_reward:
@@ -230,15 +231,16 @@ L_Rewarded:
mes "[Airlia]";
mes "\"Thank you for your help.\"";
next;
+ mes "\"Have you collected the " + @FETCH_AMOUNT + " " + getitemlink(@FETCH_LABEL$) + "s?\"";
if (QUEST_Graveyard_Caretaker < @Q_STATUS_HAS_NEW_LETTER)
menu
- "You are welcome.", L_Close,
- "I have collected the " + @FETCH_AMOUNT + " " + getitemname(@FETCH_LABEL$) + "s.", L_Fetch_later_rewards;
+ "Yes.", L_Fetch_later_rewards,
+ "No.", L_Close;
if (QUEST_Graveyard_Caretaker == @Q_STATUS_HAS_NEW_LETTER)
menu
- "You are welcome.", L_Close,
"I have another letter from your father.", L_later_rewards,
- "I have collected the " + @FETCH_AMOUNT + " " + getitemname(@FETCH_LABEL$) + "s.", L_Fetch_later_rewards;
+ "Yes.", L_Fetch_later_rewards,
+ "No.", L_Close;
goto L_Close;
L_Close:
diff --git a/world/map/npc/009-2/alan.txt b/world/map/npc/009-2/alan.txt
index 412b5823..6e0e6f21 100644
--- a/world/map/npc/009-2/alan.txt
+++ b/world/map/npc/009-2/alan.txt
@@ -10,8 +10,6 @@
// Archer Shop Master
009-2,99,23,0|script|Alan|125
{
- callfunc "ClearVariables";
-
set @Q_MASK, NIBBLE_0_MASK;
set @Q_SHIFT, NIBBLE_0_SHIFT;
diff --git a/world/map/npc/009-2/bernard.txt b/world/map/npc/009-2/bernard.txt
index f0c03fbc..1d6b4229 100644
--- a/world/map/npc/009-2/bernard.txt
+++ b/world/map/npc/009-2/bernard.txt
@@ -2,9 +2,6 @@
009-2,67,79,0|script|Bernard|117
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_SouthTulimshar & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
if (@state >= 6) goto L_Done3;
diff --git a/world/map/npc/009-2/doctor.txt b/world/map/npc/009-2/doctor.txt
index 9137d8d4..f44cda64 100644
--- a/world/map/npc/009-2/doctor.txt
+++ b/world/map/npc/009-2/doctor.txt
@@ -2,8 +2,6 @@
009-2,148,25,0|script|Doctor|107
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (getequipid(equip_head) == 616) goto L_Axe;
diff --git a/world/map/npc/009-2/inspector.txt b/world/map/npc/009-2/inspector.txt
index 966fe45e..d61fc708 100644
--- a/world/map/npc/009-2/inspector.txt
+++ b/world/map/npc/009-2/inspector.txt
@@ -2,8 +2,6 @@
009-2,24,99,0|script|Inspector#Hurnscald|150
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (@inspector == 0 && BaseLevel >= 30) goto L_Start;
diff --git a/world/map/npc/009-2/kfahr.txt b/world/map/npc/009-2/kfahr.txt
index d5da641a..8b6cb37d 100644
--- a/world/map/npc/009-2/kfahr.txt
+++ b/world/map/npc/009-2/kfahr.txt
@@ -920,9 +920,9 @@ L_gs_wrestle:
set @KFAHR_AGI, 60 - @beer_count * 5;
set @kfahr_stamina, 120;
- set @PC_STR, readparam(bStr);
- set @PC_AGI, readparam(bAgi);
- set @PC_MAX_STAMINA, readparam(bVit) + 20;
+ set @PC_STR, Str;
+ set @PC_AGI, Agi;
+ set @PC_MAX_STAMINA, Vit + 20;
set @pc_stamina, @PC_MAX_STAMINA;
setarray @positions$,
diff --git a/world/map/npc/009-2/lena.txt b/world/map/npc/009-2/lena.txt
index e151736b..6f22030a 100644
--- a/world/map/npc/009-2/lena.txt
+++ b/world/map/npc/009-2/lena.txt
@@ -3,9 +3,6 @@
009-2,146,43,0|script|Lena|182
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_Hurnscald & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
if (@state >= 6) goto L_Lena_Done;
diff --git a/world/map/npc/009-2/nurse.txt b/world/map/npc/009-2/nurse.txt
index fa1ee5d2..8a5b3862 100644
--- a/world/map/npc/009-2/nurse.txt
+++ b/world/map/npc/009-2/nurse.txt
@@ -24,7 +24,6 @@
//######################################################################################
009-2,147,65,0|script|Nurse|119
{
- callfunc "ClearVariables";
set @halloween_npc_id, $@halloween_npc_nurse;
callfunc "TrickOrTreat";
diff --git a/world/map/npc/009-2/richard.txt b/world/map/npc/009-2/richard.txt
index b39a7969..11c180d4 100644
--- a/world/map/npc/009-2/richard.txt
+++ b/world/map/npc/009-2/richard.txt
@@ -2,7 +2,6 @@
009-2,20,99,0|script|Richard|161
{
- callfunc "ClearVariables";
set @npcname$, "Richard";
callfunc "Banker";
close;
diff --git a/world/map/npc/009-2/selim.txt b/world/map/npc/009-2/selim.txt
index 80abfdcc..474dec3c 100644
--- a/world/map/npc/009-2/selim.txt
+++ b/world/map/npc/009-2/selim.txt
@@ -140,7 +140,7 @@ L_explain_dye:
goto L_Close;
L_finish:
- if(getitemname($@DYE_colors$[@colour] + @item_del$) == "Unknown Item") mapexit;
+ if(getitemlink($@DYE_colors$[@colour] + @item_del$) == "Unknown Item") mapexit;
if(countitem(@item_del$) < 1) goto L_havenone;
delitem @item$, 1;
delitem @item_del$, 1;
@@ -159,6 +159,6 @@ L_havenone:
L_Close:
mes "\"Farewell and good luck in your journeys!\"";
close2;
- emotion EMOTE_WINK;
+ emotion EMOTE_WINK, strcharinfo(0);
end;
}
diff --git a/world/map/npc/009-2/trader.txt b/world/map/npc/009-2/trader.txt
index aaba3afb..46ccafac 100644
--- a/world/map/npc/009-2/trader.txt
+++ b/world/map/npc/009-2/trader.txt
@@ -34,7 +34,7 @@ L_Except:
"No thank you.", L_Close;
L_Teach:
- if (Zeny < 5) goto L_NotEnoughMoney;
+ if (Zeny < 2) goto L_NotEnoughMoney;
set Zeny, Zeny - 2;
mes "[Trader]";
mes "\"You can initiate trade with someone by right-clicking on them and choosing trade.";
diff --git a/world/map/npc/009-2/wyara.txt b/world/map/npc/009-2/wyara.txt
index 3b14a178..17f6bc61 100644
--- a/world/map/npc/009-2/wyara.txt
+++ b/world/map/npc/009-2/wyara.txt
@@ -63,7 +63,7 @@ L_Shop:
close;
L_StatReset:
- set @NpcName$, "Wyara";
+ set @npcname$, "Wyara";
callfunc "StatReset";
goto L_Close;
diff --git a/world/map/npc/009-3/_mobs.txt b/world/map/npc/009-3/_mobs.txt
index 74852403..ab403a12 100644
--- a/world/map/npc/009-3/_mobs.txt
+++ b/world/map/npc/009-3/_mobs.txt
@@ -7,7 +7,7 @@
009-3,145,75,110,151|monster|CaveMaggot|1056,20,100000ms,30000ms,Mob009-3::On1056
-009-3,0,0,0|script|Mob009-3|-1
+009-3,0,0,0|script|Mob009-3|32767
{
end;
diff --git a/world/map/npc/009-4/_mobs.txt b/world/map/npc/009-4/_mobs.txt
index 64e2c4da..e81f350e 100644
--- a/world/map/npc/009-4/_mobs.txt
+++ b/world/map/npc/009-4/_mobs.txt
@@ -10,7 +10,7 @@
009-4,38,116,24,15|monster|Maggot|1002,3,20000ms,14000ms,Mob009-4::On1002
-009-4,0,0,0|script|Mob009-4|-1
+009-4,0,0,0|script|Mob009-4|32767
{
end;
diff --git a/world/map/npc/009-4/barriers.txt b/world/map/npc/009-4/barriers.txt
index 4a2055fa..f82df12f 100644
--- a/world/map/npc/009-4/barriers.txt
+++ b/world/map/npc/009-4/barriers.txt
@@ -15,7 +15,8 @@ L_GetBarrierColor:
L_Error:
mes "Barrier number is out of range.";
- close;
+ close2;
+ return;
L_Error2:
callfunc "SetUpOrumQuest";
@@ -35,11 +36,13 @@ function|script|SetBarrierColor
L_Error:
mes "Barrier number is out of range.";
- close;
+ close2;
+ return;
L_Error2:
mes "Barrier color is out of range.";
- close;
+ close2;
+ return;
}
@@ -266,12 +269,12 @@ L_Deny_Final_Passage:
L_Allow_Final_Passage:
if (OrumQuest < 11) goto L_Advance_Quest;
- close;
+ end;
L_Advance_Quest:
message strcharinfo(0), "The torches dim as you enter. At last you finally have access!";
set OrumQuest, 11;
- close;
+ end;
}
009-4,48,38,0|script|#OrumCaveEndBarrier|32767,0,0
diff --git a/world/map/npc/009-4/torches.txt b/world/map/npc/009-4/torches.txt
index 4ad0c686..0164acd4 100644
--- a/world/map/npc/009-4/torches.txt
+++ b/world/map/npc/009-4/torches.txt
@@ -10,7 +10,8 @@ function|script|GetTorchColor
L_Error:
mes "Torch number is out of range.";
- close;
+ close2;
+ return;
}
function|script|SetTorchColor
@@ -24,11 +25,13 @@ function|script|SetTorchColor
L_Error:
mes "Torch number is out of range.";
- close;
+ close2;
+ return;
L_Error2:
mes "Torch color is out of range.";
- close;
+ close2;
+ return;
}
function|script|GetTorchIntensity
@@ -42,7 +45,8 @@ function|script|GetTorchIntensity
L_Error:
mes "Torch number is out of range.";
- close;
+ close2;
+ return;
}
function|script|SetTorchIntensity
@@ -56,11 +60,13 @@ function|script|SetTorchIntensity
L_Error:
mes "Torch number is out of range.";
- close;
+ close2;
+ return;
L_Error2:
mes "Torch intensity is out of range.";
- close;
+ close2;
+ return;
}
function|script|DoneWithTorches
@@ -75,44 +81,14 @@ function|script|DoneWithTorches
if (OrumQuest < 8)
mes "Without that powder the note mentions there isn't much you can do with this torch.";
- close;
+ close2;
+ goto L_Return;
L_Different:
mes "The flame on this torch looks different than the rest. You better tell Orum about it before doing anything.";
set OrumQuest, 6;
- close;
-
-L_Return:
- return;
-}
-
-// To make sure in range of torches
-function|script|InRangeTorch1
-{
- if (isin("009-4",67,20,69,25))
- goto L_Return;
- mes "You're too far away to do anything with that torch.";
- close;
-
-L_Return:
- return;
-}
-function|script|InRangeTorch2
-{
- if (isin("009-4",65,41,69,46))
- goto L_Return;
- mes "You're too far away to do anything with that torch.";
- close;
-
-L_Return:
- return;
-}
-function|script|InRangeTorch3
-{
- if (isin("009-4",33,84,37,88))
- goto L_Return;
- mes "You're too far away to do anything with that torch.";
- close;
+ close2;
+ goto L_Return;
L_Return:
return;
@@ -144,7 +120,8 @@ L_Color_Loop:
L_Leave:
mes "The flame flickers as if it's laughing at you.";
- close;
+ close2;
+ return;
L_Use_Red:
if (countitem("RedPowder") < 1)
@@ -228,7 +205,8 @@ L_Use_Blue:
L_No_Powder:
mes "You notice you're all out of that color of powder. Perhaps Orum can make you some more.";
- close;
+ close2;
+ return;
L_Color_Dec:
set @TorchColor, @TorchColor - 1;
@@ -277,13 +255,15 @@ L_Failed:
set @TorchIntensity, 0;
callfunc "SetTorchIntensity";
heal -Hp, 0;
- close;
+ close2;
+ return;
}
// First Torch
009-4,68,21,0|script|Torch#1|400
{
- callfunc "InRangeTorch1";
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
callfunc "DoneWithTorches";
set @Torch, 0;
@@ -295,7 +275,8 @@ L_Failed:
// Second Torch
009-4,67,42,0|script|Torch#2|400
{
- callfunc "InRangeTorch2";
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
callfunc "DoneWithTorches";
set @Torch, 1;
@@ -307,7 +288,8 @@ L_Failed:
// Third Torch
009-4,33,86,0|script|Torch#3|400
{
- callfunc "InRangeTorch3";
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
callfunc "DoneWithTorches";
set @Torch, 2;
diff --git a/world/map/npc/009-5/_mobs.txt b/world/map/npc/009-5/_mobs.txt
index 7ba8106a..78d520be 100644
--- a/world/map/npc/009-5/_mobs.txt
+++ b/world/map/npc/009-5/_mobs.txt
@@ -3,7 +3,7 @@
-009-5,0,0,0|script|Mob009-5|-1
+009-5,0,0,0|script|Mob009-5|32767
{
end;
}
diff --git a/world/map/npc/009-6/_mobs.txt b/world/map/npc/009-6/_mobs.txt
index e0437642..adb1e44e 100644
--- a/world/map/npc/009-6/_mobs.txt
+++ b/world/map/npc/009-6/_mobs.txt
@@ -3,7 +3,7 @@
-009-6,0,0,0|script|Mob009-6|-1
+009-6,0,0,0|script|Mob009-6|32767
{
end;
}
diff --git a/world/map/npc/009-6/brodomir.txt b/world/map/npc/009-6/brodomir.txt
index 63bce759..02704447 100644
--- a/world/map/npc/009-6/brodomir.txt
+++ b/world/map/npc/009-6/brodomir.txt
@@ -26,7 +26,7 @@
if ($@BRODOMIR_PVP_STATUS == 2)
goto L_Alreadystarted;
- if ($@BRODOMIR_PVP_STATUS == 1)
+ if ($@BRODOMIR_PVP_STATUS == 1 && $@BRODOMIR_START_TIME > gettimetick(2))
goto L_Wait;
mes "[Brodomir]";
mes "\"Hi Warrior.\"";
@@ -132,6 +132,7 @@ L_Go:
set $@BRODOMIR_ITEM_AMOUNT, @brodomir_item_amount;
set $@BRODOMIR_MONEY, @brodomir_money;
set $@brodomir_delay_seconds, 600;
+ set $@BRODOMIR_START_TIME, gettimetick(2) + $@brodomir_delay_seconds;
set $@BRODOMIR_PVP_STATUS, 1;
announce "Brodomir : In "+$@brodomir_delay_seconds/60+" minutes, I will start a PvP tournament, if at least 3 fighters are present. Make your way in Hurnscald Underground Caves!", 0;
if ($@BRODOMIR_ITEM_AMOUNT > 0)
@@ -140,13 +141,12 @@ L_Go:
announce "Brodomir : The winner will receive " + $@BRODOMIR_MONEY + "GP and additionally 150GP per fighter.", 0;
mes "[Brodomir]";
mes "\"In "+$@brodomir_delay_seconds/60+" minutes I will bring you all to the PvP cave. If there are less than 3 players here the event will not start and your money will be lost.\"";
- set $@BRODOMIR_START_TIME, gettimetick(2) + $@brodomir_delay_seconds;
set $@brodomir_delay_seconds, 0;
initnpctimer;
goto L_Close;
L_Wait:
- set @ms, ($@BRODOMIR_START_TIME - gettimetick(2)) * 1000;
+ set @seconds, $@BRODOMIR_START_TIME - gettimetick(2);
callfunc "HumanTime";
mes "[Brodomir]";
mes "\"Just a little longer. I will bring you there in " + @time$ + ".\"";
diff --git a/world/map/npc/009-7/_mobs.txt b/world/map/npc/009-7/_mobs.txt
index deae9123..bb641d0c 100644
--- a/world/map/npc/009-7/_mobs.txt
+++ b/world/map/npc/009-7/_mobs.txt
@@ -3,7 +3,7 @@
-009-7,0,0,0|script|Mob009-7|-1
+009-7,0,0,0|script|Mob009-7|32767
{
end;
}
diff --git a/world/map/npc/009-7/battlemaster.txt b/world/map/npc/009-7/battlemaster.txt
index 33eb04d0..c7316913 100644
--- a/world/map/npc/009-7/battlemaster.txt
+++ b/world/map/npc/009-7/battlemaster.txt
@@ -58,7 +58,7 @@ function|script|fightclub_GoBack
L_GoBack:
set DUELS, DUELS &~ $@DuelPvpBit;
warp "009-7", 39, 37;
- gmcommand "@alive";
+ heal MaxHp, MaxSp;
message strcharinfo(0), "Thank you for participating!";
return;
}
diff --git a/world/map/npc/009-7/core.txt b/world/map/npc/009-7/core.txt
index b8439b03..e1f0b58d 100644
--- a/world/map/npc/009-7/core.txt
+++ b/world/map/npc/009-7/core.txt
@@ -58,7 +58,7 @@ L_Proceed:
goto L_Missing;
L_Missing:
- end;
+ return;
L_Proceed2:
set $@fightclub_myself, 0;
@@ -85,11 +85,11 @@ L_Loop:
L_Exists:
mes "This battle is already in the queue.";
- close;
+ return;
L_Full:
mes "There is already " + $@Duel_QueueLimit + " battles in the queue, which is the maximum. Please try again later.";
- close;
+ return;
L_Proceed2:
if(getarraysize($@Duel_Queue_ID) >= ($@Duel_QueueLimit + 1)) goto L_Full;
@@ -235,9 +235,9 @@ function|script|fightclub_Victory
function|script|fightclub_DestroyMe
{
set @Duel_Fighter, 0;
+ setpvpchannel @previous_channel;
sc_end 132; sc_end 14; sc_end 37; sc_end 185; sc_end 194; sc_end 195; sc_end 196; sc_end 197; sc_end 198; sc_end 199; // remove effects
- heal -Hp, 0; // doing @killer is unreliable
- gmcommand "@alive"; // refill hp/mana
+ heal MaxHp, MaxSp; // refill hp/mana
if(getmap() == "009-7") warp "009-7", rand($@fightclub_x1, $@fightclub_x2), rand(($@fightclub_y1 - 2), ($@fightclub_y1 - 3));
return;
}
@@ -303,6 +303,7 @@ function|script|fightclub_StartUp
setarray $@Duel_Queue_Red$, "";
cleararray $@Duel_Queue_Red$, "", ($@Duel_QueueLimit + 1);
set $@Duel_TotalTime, 0;
+ set $@Duel_Channel, 20;
if($fightclub_enabled) set $fightclub_enabled, 0; // this var moved to $SANGUINE
// DUELS flags below
set $@DuelPvpBit, (1 << 1);
@@ -435,7 +436,7 @@ function|script|fightclub_enter
{
set @Duel_Fighter, 1;
warp "009-7", rand($@fightclub_x1,$@fightclub_x2), rand($@fightclub_y1,$@fightclub_y2);
- gmcommand "@alive"; // ensure that you can't duel wih a corpse
+ heal MaxHp, MaxSp; // ensure that you can't duel wih a corpse
sc_end 132; sc_end 14; sc_end 37; sc_end 185; sc_end 194; sc_end 195; sc_end 196; sc_end 197; sc_end 198; sc_end 199; // remove effects
message strcharinfo(0), "Get Ready.";
addtimer ($@Duel_TimeBeforeStart * 1000), "#FightClubUtils::OnBecomeKiller"; // call fightclub_enter_killer in 3 seconds
@@ -445,8 +446,8 @@ function|script|fightclub_enter
// ** called 3 seconds after a player enters the ring
function|script|fightclub_enter_killer
{
- gmcommand "@killable";
- gmcommand "@killer"; // add both killable and killer so if one doesn't kick in, the other (hopefully) will
+ if(getpvpflag(0) != $@Duel_Channel) set @previous_channel, getpvpflag(0);
+ setpvpchannel $@Duel_Channel;
message strcharinfo(0), "GO !";
return;
}
@@ -459,3 +460,36 @@ function|script|fightclub_exit
if(@Duel_HasPendingRequest) message strcharinfo(0), "You have received a new duel request.";
return;
}
+
+
+
+// ** called on OnPCKilledEvent
+function|script|fightclub_event_killed
+{
+ set @duel_killer, 0;
+ if(@Duel_Fighter != 1) goto L_End;
+ if(getmap() != "009-7") goto L_End;
+ set $@duel_loser, getcharid(3); // grab the rid of the victim
+ set $@duel_winner, @killerrid; // grab the rid of the killer
+ set @killerrid, 0; // reset killerid
+ callfunc "fightclub_death";
+ goto L_End;
+L_End:
+ if(getpvpflag(0) == $@Duel_Channel) setpvpflag @previous_channel;
+ return;
+}
+
+// ** called on OnPCDieEvent
+function|script|fightclub_event_die
+{
+ set @duel_killer, 0;
+ if(@Duel_Fighter != 1) goto L_End;
+ if(getmap() != "009-7") goto L_End;
+ set @killerrid, 0; // since the player was not murdered, the killerrid is 0
+ set $@duel_loser, getcharid(3); // grab the rid of the victim
+ callfunc "fightclub_death";
+ goto L_End;
+L_End:
+ if(getpvpflag(0) == $@Duel_Channel) setpvpflag @previous_channel;
+ return;
+}
diff --git a/world/map/npc/009-7/debug.txt b/world/map/npc/009-7/debug.txt
index f5283898..94735b3e 100644
--- a/world/map/npc/009-7/debug.txt
+++ b/world/map/npc/009-7/debug.txt
@@ -19,6 +19,7 @@ L_Menu:
mes "##3$##0Duel_LastDuel: ##7" + $Duel_LastDuel + "##0";
mes "---";
mes "##2@##0Duel_Fighter: ##7" + @Duel_Fighter + "##0";
+ mes "pvp channel: ##7" + getpvpflag(0) + "##0";
next;
menu
"toggle|Toggle $Duel_Enabled", L_DuelEnabled,
@@ -31,20 +32,11 @@ L_Menu:
"edit|Set $@Duel_PlayerQueueLimit", L_PlayerQueueLimit,
"edit|Set $@Duel_PlayerQueueTimeOut", L_PlayerQueueTimeOut,
"edit|Set $Duel_LastDuel", L_LastDuel,
+ "edit|Set pvp channel", L_Channel,
"toggle|Toggle @Duel_Fighter", L_DuelFighter,
- "toggle|Toggle killer state", L_Killer,
- "toggle|Toggle killable state", L_Killable,
"restart|Restart fightclub.", L_Restart,
"quit|Nevermind.", L_End;
-L_Killer:
- gmcommand "@killer";
- goto L_Menu;
-
-L_Killable:
- gmcommand "@killable";
- goto L_Menu;
-
L_DuelEnabled:
if(@due < 1) goto L_DuelEnabled2;
set $SANGUINE, $SANGUINE | $@SV_FCDBit;
@@ -127,6 +119,13 @@ L_LastDuel:
next;
goto L_Restart;
+L_Channel:
+ mes "range: 0~32767";
+ input @chn;
+ if(@last > 32767) goto L_OutOfRange;
+ setpvpchannel @chn;
+ goto L_Menu;
+
L_OutOfRange:
mes "Value out of range or empty.";
goto L_Menu;
diff --git a/world/map/npc/009-7/mapflags.txt b/world/map/npc/009-7/mapflags.txt
index 9fdd3a99..b0589894 100644
--- a/world/map/npc/009-7/mapflags.txt
+++ b/world/map/npc/009-7/mapflags.txt
@@ -1,2 +1,3 @@
009-7|mapflag|noteleport
009-7|mapflag|monster_noteleport
+009-7|mapflag|nopvp
diff --git a/world/map/npc/010-1/_mobs.txt b/world/map/npc/010-1/_mobs.txt
index 2536403e..d73c842f 100644
--- a/world/map/npc/010-1/_mobs.txt
+++ b/world/map/npc/010-1/_mobs.txt
@@ -16,7 +16,7 @@
010-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob010-1::On1055
-010-1,0,0,0|script|Mob010-1|-1
+010-1,0,0,0|script|Mob010-1|32767
{
end;
diff --git a/world/map/npc/010-2/_mobs.txt b/world/map/npc/010-2/_mobs.txt
index 258716f7..3b258bd5 100644
--- a/world/map/npc/010-2/_mobs.txt
+++ b/world/map/npc/010-2/_mobs.txt
@@ -3,7 +3,7 @@
-010-2,0,0,0|script|Mob010-2|-1
+010-2,0,0,0|script|Mob010-2|32767
{
end;
}
diff --git a/world/map/npc/010-2/band.txt b/world/map/npc/010-2/band.txt
index 86fec363..cabc31bc 100644
--- a/world/map/npc/010-2/band.txt
+++ b/world/map/npc/010-2/band.txt
@@ -27,7 +27,7 @@ function|script|DimondBand
L_Return:
return;
}
--|script|#BandConfig|-1
+-|script|#BandConfig|32767
{
end;
diff --git a/world/map/npc/011-1/_mobs.txt b/world/map/npc/011-1/_mobs.txt
index bc35df56..3a0c0ce3 100644
--- a/world/map/npc/011-1/_mobs.txt
+++ b/world/map/npc/011-1/_mobs.txt
@@ -17,7 +17,7 @@
011-1,92,44,35,28|monster|Maggot|1002,10,30ms,0ms,Mob011-1::On1002
-011-1,0,0,0|script|Mob011-1|-1
+011-1,0,0,0|script|Mob011-1|32767
{
end;
diff --git a/world/map/npc/011-1/oscar.txt b/world/map/npc/011-1/oscar.txt
index 157dc0c9..7240f2d0 100644
--- a/world/map/npc/011-1/oscar.txt
+++ b/world/map/npc/011-1/oscar.txt
@@ -31,10 +31,13 @@
function|script|HalloweenQuestWaterPumpkins
{
if (Quest_Halloween != 5 || $@HalloweenQuest_PumpkinHunter$ != "")
- end;
+ goto L_Return;
set $@HalloweenQuest_PumpkinHunter$, strcharinfo(0);
donpcevent "Oscar::OnCommandSpg";
- end;
+ goto L_Return;
+
+L_Return:
+ return;
}
011-1,94,38,0|script|Oscar|142
diff --git a/world/map/npc/011-3/_mobs.txt b/world/map/npc/011-3/_mobs.txt
index 8854cf53..4e4a504e 100644
--- a/world/map/npc/011-3/_mobs.txt
+++ b/world/map/npc/011-3/_mobs.txt
@@ -5,7 +5,7 @@
011-3,0,0,0,0|monster|Silkworm|1035,3,60000ms,30000ms,Mob011-3::On1035
-011-3,0,0,0|script|Mob011-3|-1
+011-3,0,0,0|script|Mob011-3|32767
{
end;
diff --git a/world/map/npc/011-4/_mobs.txt b/world/map/npc/011-4/_mobs.txt
index 3e91f627..81da8edc 100644
--- a/world/map/npc/011-4/_mobs.txt
+++ b/world/map/npc/011-4/_mobs.txt
@@ -10,7 +10,7 @@
011-4,0,0,0,0|monster|Bat|1017,20,180000ms,40000ms,Mob011-4::On1017
-011-4,0,0,0|script|Mob011-4|-1
+011-4,0,0,0|script|Mob011-4|32767
{
end;
diff --git a/world/map/npc/011-6/_mobs.txt b/world/map/npc/011-6/_mobs.txt
index f86fdd66..4ba7f2ee 100644
--- a/world/map/npc/011-6/_mobs.txt
+++ b/world/map/npc/011-6/_mobs.txt
@@ -50,7 +50,7 @@
011-6,263,236,16,5|monster|CaveMaggot|1056,3,30000ms,100000ms,Mob011-6::On1056
-011-6,0,0,0|script|Mob011-6|-1
+011-6,0,0,0|script|Mob011-6|32767
{
end;
diff --git a/world/map/npc/011-6/bryant.txt b/world/map/npc/011-6/bryant.txt
index fae31706..9969b767 100644
--- a/world/map/npc/011-6/bryant.txt
+++ b/world/map/npc/011-6/bryant.txt
@@ -3,9 +3,6 @@
011-6,27,200,0|script|Bryant|126
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
-
set @state, ((QUEST_Hurnscald & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
if (@state >= 5) goto L_Bryant_Quiet;
diff --git a/world/map/npc/011-6/crastur.txt b/world/map/npc/011-6/crastur.txt
index 679a2c9d..bef9f0a7 100644
--- a/world/map/npc/011-6/crastur.txt
+++ b/world/map/npc/011-6/crastur.txt
@@ -16,7 +16,7 @@ L_Ask:
mes "[Crastur]";
mes "";
mes "\"Just look who arrived here\"";
- emotion EMOTE_EVIL;
+ emotion EMOTE_EVIL, strcharinfo(0);
next;
mes "[Crastur]";
mes "";
@@ -128,7 +128,7 @@ L_Wrong_Item:
next;
mes "[Crastur]";
mes "THIS IS NOT FROM THE PIRATES FROM TULIMSHAR, it is a cheap scam.";
- emotion EMOTE_PERTURBED;
+ emotion EMOTE_PERTURBED, strcharinfo(0);
mes "As far as you can tell through his mask he seems very mad";
goto L_Insult;
@@ -150,7 +150,7 @@ L_Regular:
"\"Ugh, no. I have to leave now. Bye.\"", L_Close;
L_Insult:
- mes "Die " + strcharinfo(0) + "!";
+ npctalk "Crastur : Die " + strcharinfo(0) + "!";
heal -10000, 0;
emotion EMOTE_VICIOUS;
mes "[Crastur]";
@@ -188,7 +188,7 @@ L_Personal:
mes "\"Today you have accomplished tasks that are worth " + DailyQuestPoints + " Hours in the Northern Mines\"";
next;
if (BOSS_POINTS < 1000) goto L_Worm;
- emotion EMOTE_DEAD;
+ emotion EMOTE_DEAD, strcharinfo(0);
mes "[Crastur]";
mes "";
mes "\"Also you seem to be quite a hero, it appears you have a record in the Almanach\"";
@@ -198,13 +198,13 @@ L_Personal:
goto L_Close;
L_Worm:
- emotion EMOTE_SUSPICIOUS;
+ emotion EMOTE_SUSPICIOUS, strcharinfo(0);
mes "[Crastur]";
mes "\"Other than that you have not done anything notable for the mana world.\"";
goto L_Close;
L_Hurnscald:
- emotion EMOTE_FACEPALM;
+ emotion EMOTE_FACEPALM, strcharinfo(0);
mes "Crastur makes a barking sound that probably was meant as a laugh.";
mes "[Crastur]";
mes "";
diff --git a/world/map/npc/012-1/_mobs.txt b/world/map/npc/012-1/_mobs.txt
index c8f1303c..cdcc8730 100644
--- a/world/map/npc/012-1/_mobs.txt
+++ b/world/map/npc/012-1/_mobs.txt
@@ -14,7 +14,7 @@
012-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms,Mob012-1::On1055
-012-1,0,0,0|script|Mob012-1|-1
+012-1,0,0,0|script|Mob012-1|32767
{
end;
diff --git a/world/map/npc/012-1/injured-mouboo.txt b/world/map/npc/012-1/injured-mouboo.txt
index 09e27c80..2aefb0f7 100644
--- a/world/map/npc/012-1/injured-mouboo.txt
+++ b/world/map/npc/012-1/injured-mouboo.txt
@@ -29,11 +29,13 @@ function|script|QuestMoubooHeal
next;
set @value, 15;
callfunc "QuestSagathaHappy";
- close;
+ close2;
+ return;
L_nothing:
mes "Your spell has no effect.";
- close;
+ close2;
+ return;
S_update_var:
set @Q_wr_status, @Q_status | @Q_status_upper;
@@ -97,6 +99,7 @@ L_pickup_alive:
L_give:
set @items_nr, 12;
setarray @items$, "CactusDrink", "CactusPotion", "ChocolateBar", "Milk", "OrangeCupcake", "RedApple", "Beer", "BottleOfWater", "TinyHealingPotion", "SmallHealingPotion", "MediumHealingPotion", "LargeHealingPotion";
+ setarray @itemnames$, "Cactus Drink", "Cactus Potion", "Chocolate Bar", "Milk", "Orange Cupcake", "Red Apple", "Beer", "Bottle of Water", "Tiny Healing Potion", "Small Healing Potion", "Medium Healing Potion", "Large Healing Potion";
setarray @itemeat, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0;
setarray @menuItems$, "", "", "", "", "", "", "", "", "", "", "", "", "";
@@ -113,8 +116,7 @@ L_nloop:
if (countitem(@k$) == 0)
goto L_nloop_skip;
- set @name$, getitemname(@k$);
- set @menuItems$[@ct], @name$;
+ set @menuItems$[@ct], @itemnames$[@n];
set @menuNames$[@ct], @k$;
set @choice_eat[@ct], @itemeat[@n];
set @ct, @ct + 1;
@@ -156,7 +158,7 @@ L_MenuItems:
L_consume:
mes "[Injured Mouboo]";
- mes "The mouboo " + @verb$ + " your " + getitemname(@choice$) + ".";
+ mes "The mouboo " + @verb$ + " your " + getitemlink(@choice$) + ".";
delitem @choice$, 1;
next;
if (@choice$ == "LargeHealingPotion")
@@ -168,7 +170,7 @@ L_consume:
L_do_heal:
callfunc "QuestMoubooHeal";
- goto L_kill;
+ end;
L_kill:
mes "[Injured Mouboo]";
diff --git a/world/map/npc/012-3/_mobs.txt b/world/map/npc/012-3/_mobs.txt
index e1208d64..354fc289 100644
--- a/world/map/npc/012-3/_mobs.txt
+++ b/world/map/npc/012-3/_mobs.txt
@@ -19,7 +19,7 @@
012-3,0,0,0,0|monster|CaveSnake|1021,75,0ms,0ms,Mob012-3::On1021
-012-3,0,0,0|script|Mob012-3|-1
+012-3,0,0,0|script|Mob012-3|32767
{
end;
diff --git a/world/map/npc/012-3/traveler.txt b/world/map/npc/012-3/traveler.txt
index aa173080..b3c158ea 100644
--- a/world/map/npc/012-3/traveler.txt
+++ b/world/map/npc/012-3/traveler.txt
@@ -4,7 +4,7 @@
012-3,439,62,0|script|Meridith the Traveler|103
{
- set @NpcName$, "Meridith";
+ set @npcname$, "Meridith";
set @NpcTravelBit, $@terranite_cave_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/012-4/_mobs.txt b/world/map/npc/012-4/_mobs.txt
index 0f61a3cd..e1a4a259 100644
--- a/world/map/npc/012-4/_mobs.txt
+++ b/world/map/npc/012-4/_mobs.txt
@@ -67,7 +67,7 @@
012-4,91,180,23,10|monster|Spider|1012,20,100000ms,30000ms,Mob012-4::On1012
-012-4,0,0,0|script|Mob012-4|-1
+012-4,0,0,0|script|Mob012-4|32767
{
end;
diff --git a/world/map/npc/013-1/_mobs.txt b/world/map/npc/013-1/_mobs.txt
index e3492192..7d2efa88 100644
--- a/world/map/npc/013-1/_mobs.txt
+++ b/world/map/npc/013-1/_mobs.txt
@@ -18,7 +18,7 @@
013-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob013-1::On1055
-013-1,0,0,0|script|Mob013-1|-1
+013-1,0,0,0|script|Mob013-1|32767
{
end;
diff --git a/world/map/npc/013-1/traveler.txt b/world/map/npc/013-1/traveler.txt
index efa6c53a..7439b8d8 100644
--- a/world/map/npc/013-1/traveler.txt
+++ b/world/map/npc/013-1/traveler.txt
@@ -1,6 +1,6 @@
013-1,120,90,0|script|Faris the Traveler|103
{
- set @NpcName$, "Faris";
+ set @npcname$, "Faris";
set @NpcTravelBit, $@magic_house_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/013-2/_mobs.txt b/world/map/npc/013-2/_mobs.txt
index be64f4ab..82f242a0 100644
--- a/world/map/npc/013-2/_mobs.txt
+++ b/world/map/npc/013-2/_mobs.txt
@@ -3,7 +3,7 @@
-013-2,0,0,0|script|Mob013-2|-1
+013-2,0,0,0|script|Mob013-2|32767
{
end;
}
diff --git a/world/map/npc/013-3/_mobs.txt b/world/map/npc/013-3/_mobs.txt
index b0f66b65..088e2c72 100644
--- a/world/map/npc/013-3/_mobs.txt
+++ b/world/map/npc/013-3/_mobs.txt
@@ -31,7 +31,7 @@
013-3,67,46,2,1|monster|FireSkull|1023,1,120000ms,60000ms,Mob013-3::On1023
-013-3,0,0,0|script|Mob013-3|-1
+013-3,0,0,0|script|Mob013-3|32767
{
end;
diff --git a/world/map/npc/013-3/barrier.txt b/world/map/npc/013-3/barrier.txt
index 442870d9..0e00a40c 100644
--- a/world/map/npc/013-3/barrier.txt
+++ b/world/map/npc/013-3/barrier.txt
@@ -2,8 +2,6 @@
013-3,71,21,0|script|#DemonMineBarrier1#_M|45,1,1
{
- callfunc "ClearVariables";
-
set @state, ((QUEST_Hurnscald & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
if (@state >= 2) goto L_End;
diff --git a/world/map/npc/013-3/mask_chest.txt b/world/map/npc/013-3/mask_chest.txt
index 1b62e66c..204eec4c 100644
--- a/world/map/npc/013-3/mask_chest.txt
+++ b/world/map/npc/013-3/mask_chest.txt
@@ -2,8 +2,6 @@
013-3,28,27,0|script|Chest#DemonMask|111
{
- callfunc "ClearVariables";
-
set @state, ((QUEST_Hurnscald & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
if (@state < 2) goto L_This_shouldn_t_happen;
diff --git a/world/map/npc/013-3/sword_chest.txt b/world/map/npc/013-3/sword_chest.txt
index de06261d..503dda7e 100644
--- a/world/map/npc/013-3/sword_chest.txt
+++ b/world/map/npc/013-3/sword_chest.txt
@@ -2,7 +2,6 @@
013-3,177,22,0|script|Chest#sword|111
{
- callfunc "ClearVariables";
if (FLAGS & FLAG_HURNSMINE_CHEST) goto L_Finished;
mes "[Chest]";
diff --git a/world/map/npc/014-1/_mobs.txt b/world/map/npc/014-1/_mobs.txt
index 751a04cf..862d1c19 100644
--- a/world/map/npc/014-1/_mobs.txt
+++ b/world/map/npc/014-1/_mobs.txt
@@ -19,7 +19,7 @@
014-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob014-1::On1055
-014-1,0,0,0|script|Mob014-1|-1
+014-1,0,0,0|script|Mob014-1|32767
{
end;
diff --git a/world/map/npc/014-3/_mobs.txt b/world/map/npc/014-3/_mobs.txt
index cc32d1da..ebadbf58 100644
--- a/world/map/npc/014-3/_mobs.txt
+++ b/world/map/npc/014-3/_mobs.txt
@@ -4,7 +4,7 @@
014-3,0,0,0,0|monster|Bat|1017,50,0ms,0ms,Mob014-3::On1017
-014-3,0,0,0|script|Mob014-3|-1
+014-3,0,0,0|script|Mob014-3|32767
{
end;
diff --git a/world/map/npc/015-1/_mobs.txt b/world/map/npc/015-1/_mobs.txt
index 810a4bd8..cad191f2 100644
--- a/world/map/npc/015-1/_mobs.txt
+++ b/world/map/npc/015-1/_mobs.txt
@@ -13,7 +13,7 @@
015-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms,Mob015-1::On1029
-015-1,0,0,0|script|Mob015-1|-1
+015-1,0,0,0|script|Mob015-1|32767
{
end;
diff --git a/world/map/npc/015-3/_mobs.txt b/world/map/npc/015-3/_mobs.txt
index 03f2627c..1b205735 100644
--- a/world/map/npc/015-3/_mobs.txt
+++ b/world/map/npc/015-3/_mobs.txt
@@ -7,7 +7,7 @@
015-3,40,19,1,1|monster|Spider|1012,1,100000ms,30000ms,Mob015-3::On1012
-015-3,0,0,0|script|Mob015-3|-1
+015-3,0,0,0|script|Mob015-3|32767
{
end;
diff --git a/world/map/npc/016-1/_mobs.txt b/world/map/npc/016-1/_mobs.txt
index 8777b2a4..58b33a9d 100644
--- a/world/map/npc/016-1/_mobs.txt
+++ b/world/map/npc/016-1/_mobs.txt
@@ -13,7 +13,7 @@
016-1,0,0,0,0|monster|Silkworm|1035,7,150000ms,7000ms,Mob016-1::On1035
-016-1,0,0,0|script|Mob016-1|-1
+016-1,0,0,0|script|Mob016-1|32767
{
end;
diff --git a/world/map/npc/016-1/gwendolyn.txt b/world/map/npc/016-1/gwendolyn.txt
index f95336e9..8276de08 100644
--- a/world/map/npc/016-1/gwendolyn.txt
+++ b/world/map/npc/016-1/gwendolyn.txt
@@ -442,7 +442,7 @@ L_target_hit:
next;
mes "\"Let me inspect it...\" She walks to the target.";
next;
- if( rand(500) > (2*readparam(bDex) + readparam(bAgi)))
+ if( rand(500) > (2*Dex + Agi))
goto L_target_nohit;
set @Q_hawkseye, 6;
callsub S_Update_Var;
diff --git a/world/map/npc/017-1/_mobs.txt b/world/map/npc/017-1/_mobs.txt
index 79693ffa..fe1c40b4 100644
--- a/world/map/npc/017-1/_mobs.txt
+++ b/world/map/npc/017-1/_mobs.txt
@@ -21,7 +21,7 @@
017-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms,Mob017-1::On1038
-017-1,0,0,0|script|Mob017-1|-1
+017-1,0,0,0|script|Mob017-1|32767
{
end;
diff --git a/world/map/npc/017-2/_mobs.txt b/world/map/npc/017-2/_mobs.txt
index 6c094aff..7fbf694f 100644
--- a/world/map/npc/017-2/_mobs.txt
+++ b/world/map/npc/017-2/_mobs.txt
@@ -3,7 +3,7 @@
-017-2,0,0,0|script|Mob017-2|-1
+017-2,0,0,0|script|Mob017-2|32767
{
end;
}
diff --git a/world/map/npc/017-3/_mobs.txt b/world/map/npc/017-3/_mobs.txt
index 1dc64829..c498697b 100644
--- a/world/map/npc/017-3/_mobs.txt
+++ b/world/map/npc/017-3/_mobs.txt
@@ -3,7 +3,7 @@
-017-3,0,0,0|script|Mob017-3|-1
+017-3,0,0,0|script|Mob017-3|32767
{
end;
}
diff --git a/world/map/npc/017-4/_mobs.txt b/world/map/npc/017-4/_mobs.txt
index 12f048ec..920a1db5 100644
--- a/world/map/npc/017-4/_mobs.txt
+++ b/world/map/npc/017-4/_mobs.txt
@@ -3,7 +3,7 @@
-017-4,0,0,0|script|Mob017-4|-1
+017-4,0,0,0|script|Mob017-4|32767
{
end;
}
diff --git a/world/map/npc/017-9/_import.txt b/world/map/npc/017-9/_import.txt
index 74718fa7..55b1495e 100644
--- a/world/map/npc/017-9/_import.txt
+++ b/world/map/npc/017-9/_import.txt
@@ -1,8 +1,7 @@
-// Map 017-9: Backstage
+// Map 017-9: GM Lounge
// This file is generated automatically. All manually added changes will be removed when running the Converter.
map: 017-9
npc: npc/017-9/_mobs.txt
npc: npc/017-9/_warps.txt
-npc: npc/017-9/announcements.txt
npc: npc/017-9/mapflags.txt
-npc: npc/017-9/secret.txt
+npc: npc/017-9/npcs.txt
diff --git a/world/map/npc/017-9/_mobs.txt b/world/map/npc/017-9/_mobs.txt
index 13c93b7b..9f351648 100644
--- a/world/map/npc/017-9/_mobs.txt
+++ b/world/map/npc/017-9/_mobs.txt
@@ -1,9 +1,9 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
-// Backstage mobs
+// GM Lounge mobs
-017-9,0,0,0|script|Mob017-9|-1
+017-9,0,0,0|script|Mob017-9|32767
{
end;
}
diff --git a/world/map/npc/017-9/_warps.txt b/world/map/npc/017-9/_warps.txt
index 439dea5e..5c7d4fe1 100644
--- a/world/map/npc/017-9/_warps.txt
+++ b/world/map/npc/017-9/_warps.txt
@@ -1,8 +1,8 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
-// Backstage warps
+// GM Lounge warps
-017-9,22,20|warp|To Nivalis#017-90|-1,-1,020-1,60,75
+017-9,29,20|warp|To Nivalis#017-90|-1,-1,020-1,60,75
017-9,26,21|warp|To Hurnscald#017-91|-1,-1,009-1,43,45
-017-9,30,20|warp|To Tumlishar#017-92|-1,-1,001-1,55,118
-017-9,26,28|warp|To second warpz#017-93|-1,-1,017-2,26,23
-017-9,31,28|warp|To Crypt#017-94|-1,-1,027-2,118,109
+017-9,21,20|warp|To Tumlishar#017-92|-1,-1,001-1,54,118
+017-9,31,20|warp|To Crypt#017-93|-1,-1,027-2,118,109
+017-9,23,20|warp|To Candor#017-94|-1,-1,029-1,34,95
diff --git a/world/map/npc/017-9/npcs.txt b/world/map/npc/017-9/npcs.txt
new file mode 100644
index 00000000..c9f9aedb
--- /dev/null
+++ b/world/map/npc/017-9/npcs.txt
@@ -0,0 +1,45 @@
+009-1,42,43,0|script|#SecretDoor|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ gmlog "@warp 017-9";
+ warp "017-9", 27, 23;
+ end;
+}
+
+020-1,60,76,0|script|#SecretDoor2|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ gmlog "@warp 017-9";
+ warp "017-9", 29, 21;
+ end;
+}
+
+001-1,54,118,0|script|#SecretDoor3|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ gmlog "@warp 017-9";
+ warp "017-9", 21, 21;
+ end;
+}
+
+027-2,118,111,0|script|#SecretDoor4|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ gmlog "@warp 017-9";
+ warp "017-9", 31, 21;
+ end;
+}
+
+029-1,34,96,0|script|#SecretDoor5|32767,0,0
+{
+ if (getgmlevel() < 20 && !debug) end;
+ gmlog "@warp 017-9";
+ warp "017-9", 23, 21;
+ end;
+}
+
+017-9,30,28,0|script|Numa|393
+{
+ callfunc "SuperDebug";
+ end;
+}
diff --git a/world/map/npc/017-9/secret.txt b/world/map/npc/017-9/secret.txt
deleted file mode 100644
index 4c48f0f7..00000000
--- a/world/map/npc/017-9/secret.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-009-1,42,43,0|script|#SecretDoor|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 26, 25;
- goto L_close;
-
-L_close:
- close;
-}
-
-020-1,60,76,0|script|#SecretDoor2|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 22, 22;
- goto L_close;
-
-L_close:
- close;
-}
-
-001-1,54,118,0|script|#SecretDoor3|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 30, 22;
- goto L_close;
-
-L_close:
- close;
-}
-
-027-2,118,111,0|script|#SecretDoor4|32767,0,0
-{
- if (getgmlevel() < 40 && !debug) goto L_close;
- warp "017-9", 30, 29;
- goto L_close;
-
-L_close:
- close;
-}
diff --git a/world/map/npc/018-1/_mobs.txt b/world/map/npc/018-1/_mobs.txt
index 7a5cee1e..942a6d09 100644
--- a/world/map/npc/018-1/_mobs.txt
+++ b/world/map/npc/018-1/_mobs.txt
@@ -30,7 +30,7 @@
018-1,134,80,14,39|monster|Maggot|1002,15,30ms,0ms,Mob018-1::On1002
-018-1,0,0,0|script|Mob018-1|-1
+018-1,0,0,0|script|Mob018-1|32767
{
end;
diff --git a/world/map/npc/018-2/_mobs.txt b/world/map/npc/018-2/_mobs.txt
index 8ff2d064..fb451a92 100644
--- a/world/map/npc/018-2/_mobs.txt
+++ b/world/map/npc/018-2/_mobs.txt
@@ -4,7 +4,7 @@
018-2,114,21,4,3|monster|YellowSlime|1007,1,100000ms,30000ms,Mob018-2::On1007
-018-2,0,0,0|script|Mob018-2|-1
+018-2,0,0,0|script|Mob018-2|32767
{
end;
diff --git a/world/map/npc/018-2/angus.txt b/world/map/npc/018-2/angus.txt
index 5b7dda85..e49d91ae 100644
--- a/world/map/npc/018-2/angus.txt
+++ b/world/map/npc/018-2/angus.txt
@@ -5,8 +5,6 @@
set @honorific$, "lad";
if (Sex == 0) set @honorific$, "lass";
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (@inspector == 10) goto L_NohMask;
diff --git a/world/map/npc/018-2/books.txt b/world/map/npc/018-2/books.txt
index cd8148c0..24624762 100644
--- a/world/map/npc/018-2/books.txt
+++ b/world/map/npc/018-2/books.txt
@@ -2,8 +2,6 @@
018-2,112,19,0|script|#Bookcase38|400,0,1
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (@inspector == 11) goto L_NohMask;
diff --git a/world/map/npc/018-2/caul.txt b/world/map/npc/018-2/caul.txt
index 5d53ba48..4709cfc9 100644
--- a/world/map/npc/018-2/caul.txt
+++ b/world/map/npc/018-2/caul.txt
@@ -9,8 +9,6 @@
018-2,37,22,0|script|Caul|107
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
set @SETZER_INITIAL, 0;
@@ -140,7 +138,7 @@ L_brew:
goto L_CraftLoop;
L_CraftLoop:
- set @throw, rand(readparam(bInt));
+ set @throw, rand(Int);
set @result, 1;
if (@throw >= 5) set @result, 2;
if (@throw >= 15) set @result, 3;
@@ -428,7 +426,7 @@ L_mo_random_1: // mode 1: remove colour
return;
L_mo_pc_bad:
- if (rand(readparam(bInt) + 100) > 60)
+ if (rand(Int + 100) > 60)
goto L_mo_pc_bad_ok;
if (@bubble_mode)
mes "As your leaf dissolves, the intensity of the bubbling increases.";
@@ -448,7 +446,7 @@ L_mo_pc_bad_ok:
L_mo_auto_bad:
if (rand(3) == 0)
goto L_Return;
- if (rand(readparam(bInt) + 100) > 70)
+ if (rand(Int + 100) > 70)
goto L_Return;
mes "The brew begins to bubble more violently.";
set @bubble_mode, @bubble_mode + 1;
@@ -461,11 +459,11 @@ L_mo_auto_bad:
L_mo_explode:
mes "[Exploding monster oil]";
mes "Your brew explodes!";
- if (rand(readparam(bAgi)) > 40)
+ if (rand(Agi) > 40)
goto L_mo_explode_dodge;
mes "The burst of boiling monster brew hits you.";
next;
- heal (15 * rand(readparam(bVit))) - 1500, 0, 1;
+ heal (15 * rand(Vit)) - 1500, 0, 1;
close;
L_mo_explode_dodge:
@@ -715,7 +713,7 @@ L_mopox_failed_hard:
mes "Suddenly, the thick mass bends outwards, a huge bubble bursting open right in your face!";
next;
- if (rand(readparam(bVit)) < 40)
+ if (rand(Vit) < 40)
sc_start sc_poison, 1, 20;
mes "[Brewing Mopox Cure]";
diff --git a/world/map/npc/018-2/miners.txt b/world/map/npc/018-2/miners.txt
index e29f15f6..29192eec 100644
--- a/world/map/npc/018-2/miners.txt
+++ b/world/map/npc/018-2/miners.txt
@@ -3,8 +3,6 @@
018-2,85,23,0|script|Malek|109
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
set @MIN_GEM_AMOUNT, 7;
diff --git a/world/map/npc/018-2/receptionist.txt b/world/map/npc/018-2/receptionist.txt
index 50143f2c..efac07d9 100644
--- a/world/map/npc/018-2/receptionist.txt
+++ b/world/map/npc/018-2/receptionist.txt
@@ -2,8 +2,6 @@
018-2,50,24,0|script|Receptionist#mine|108
{
- callfunc "ClearVariables";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
mes "[Receptionist]";
diff --git a/world/map/npc/018-3/_mobs.txt b/world/map/npc/018-3/_mobs.txt
index 7ad389b1..46457878 100644
--- a/world/map/npc/018-3/_mobs.txt
+++ b/world/map/npc/018-3/_mobs.txt
@@ -26,7 +26,7 @@
018-3,99,99,17,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob018-3::On1056
-018-3,0,0,0|script|Mob018-3|-1
+018-3,0,0,0|script|Mob018-3|32767
{
end;
diff --git a/world/map/npc/018-3/bookcase.txt b/world/map/npc/018-3/bookcase.txt
index a2cf0431..8c5d587f 100644
--- a/world/map/npc/018-3/bookcase.txt
+++ b/world/map/npc/018-3/bookcase.txt
@@ -2,8 +2,6 @@
018-3,75,123,0|script|#DemonMineBookcase1|400
{
- callfunc "ClearVariables";
-
set @state, ((QUEST_Hurnscald & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
if (@state == 0) goto L_Search;
diff --git a/world/map/npc/018-3/evil-obelisk.txt b/world/map/npc/018-3/evil-obelisk.txt
index ac316fd5..4ecc00b3 100644
--- a/world/map/npc/018-3/evil-obelisk.txt
+++ b/world/map/npc/018-3/evil-obelisk.txt
@@ -2,7 +2,6 @@
018-3,67,28,0|script|Evil Obelisk|185
{
- callfunc "ClearVariables";
set @map$, "018-3";
set @x0, 56;
set @y0, 22;
diff --git a/world/map/npc/019-1/_mobs.txt b/world/map/npc/019-1/_mobs.txt
index a21c8473..505d18df 100644
--- a/world/map/npc/019-1/_mobs.txt
+++ b/world/map/npc/019-1/_mobs.txt
@@ -7,7 +7,7 @@
019-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms,Mob019-1::On1112
-019-1,0,0,0|script|Mob019-1|-1
+019-1,0,0,0|script|Mob019-1|32767
{
end;
diff --git a/world/map/npc/019-1/santa_helper.txt b/world/map/npc/019-1/santa_helper.txt
index d5b5d3bc..9d8a21b9 100644
--- a/world/map/npc/019-1/santa_helper.txt
+++ b/world/map/npc/019-1/santa_helper.txt
@@ -4,7 +4,6 @@
019-1,74,75,0|script|Santa's Helper|105
{
- callfunc "ClearVariables";
callfunc "XmasStates";
if (($@xmas_time) && (@xmas_sh_done)) goto L_Done;
diff --git a/world/map/npc/019-1/snowman.txt b/world/map/npc/019-1/snowman.txt
index eb72c74a..893ddce4 100644
--- a/world/map/npc/019-1/snowman.txt
+++ b/world/map/npc/019-1/snowman.txt
@@ -3,7 +3,6 @@
019-1,77,44,0|script|Snowman|129
{
- callfunc "ClearVariables";
if (FLAGS & FLAG_SNOWMAN) goto L_Done;
if (gettime(6) == 12 || gettime(6) == 1 || gettime(6) == 2) goto L_Quest;
diff --git a/world/map/npc/019-3/_mobs.txt b/world/map/npc/019-3/_mobs.txt
index b452a5a5..26a7771a 100644
--- a/world/map/npc/019-3/_mobs.txt
+++ b/world/map/npc/019-3/_mobs.txt
@@ -5,7 +5,7 @@
019-3,0,4,0,0|monster|Bat|1017,50,100000ms,30000ms,Mob019-3::On1017
-019-3,0,0,0|script|Mob019-3|-1
+019-3,0,0,0|script|Mob019-3|32767
{
end;
diff --git a/world/map/npc/019-4/_mobs.txt b/world/map/npc/019-4/_mobs.txt
index f0b58665..43717e0d 100644
--- a/world/map/npc/019-4/_mobs.txt
+++ b/world/map/npc/019-4/_mobs.txt
@@ -7,7 +7,7 @@
019-4,0,0,0,0|monster|BlueSlime|1091,7,45000ms,30000ms,Mob019-4::On1091
-019-4,0,0,0|script|Mob019-4|-1
+019-4,0,0,0|script|Mob019-4|32767
{
end;
diff --git a/world/map/npc/020-1/_mobs.txt b/world/map/npc/020-1/_mobs.txt
index 3f534e8d..da1ffd27 100644
--- a/world/map/npc/020-1/_mobs.txt
+++ b/world/map/npc/020-1/_mobs.txt
@@ -4,7 +4,7 @@
020-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms,Mob020-1::On1095
-020-1,0,0,0|script|Mob020-1|-1
+020-1,0,0,0|script|Mob020-1|32767
{
end;
diff --git a/world/map/npc/020-1/soul-menhir.txt b/world/map/npc/020-1/soul-menhir.txt
index 6066c2ea..c8f7740a 100644
--- a/world/map/npc/020-1/soul-menhir.txt
+++ b/world/map/npc/020-1/soul-menhir.txt
@@ -2,7 +2,6 @@
020-1,63,89,0|script|Soul Menhir#nivalis|346
{
- callfunc "ClearVariables";
set @map$, "020-1";
setarray @Xs, 62, 63, 64, 62, 64, 62, 64;
setarray @Ys, 88, 88, 88, 89, 89, 90, 90;
diff --git a/world/map/npc/020-1/traveler.txt b/world/map/npc/020-1/traveler.txt
index d873a57f..421ed0e7 100644
--- a/world/map/npc/020-1/traveler.txt
+++ b/world/map/npc/020-1/traveler.txt
@@ -1,6 +1,6 @@
020-1,57,123,0|script|Knox the Traveler|103
{
- set @NpcName$, "Knox";
+ set @npcname$, "Knox";
set @NpcTravelBit, $@nivalis_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/020-1/well.txt b/world/map/npc/020-1/well.txt
index a4513536..5c9c9d75 100644
--- a/world/map/npc/020-1/well.txt
+++ b/world/map/npc/020-1/well.txt
@@ -16,11 +16,7 @@
020-1,99,83,0|script|#Well|400
{
- set @Q_MASK, NIBBLE_4_MASK;
- set @Q_SHIFT, NIBBLE_4_SHIFT;
- set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT;
-
- if(@Q_status == 2) goto L_Finished;
+ if(QL_WELL == 2) goto L_Finished;
set @item_ID, 0;
setarray @quote_item$, "Yuck! Who has thrown that on me?","Ouch! Who hurts me?","White powder!? What's going on up there?","Ahw! It's raining ","","","";
@@ -76,8 +72,7 @@ L_MenuItems1:
set @quote$, "";
mes "[Mysterious voice inside the well]";
mes "\" "+ @quote$ +". So if you can call help for me... please do so!\"";
- set @Q_status, 1;
- callsub S_Update_Var;
+ set QL_WELL, 1;
close;
L_NO_ITEM:
@@ -90,24 +85,14 @@ L_Finished:
L_Close:
close;
-
-S_Update_Var:
- set QUEST_Nivalis_state,
- (QUEST_Nivalis_state & ~(@Q_MASK)
- | (@Q_status << @Q_SHIFT));
- return;
}
020-2,100,28,0|script|Miler|100
{
- set @Q_MASK, NIBBLE_4_MASK;
- set @Q_SHIFT, NIBBLE_4_SHIFT;
- set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT;
-
mes "[Miler]";
mes "\"Hello!\"";
- if(@Q_status == 2) close;
- if(@Q_status == 1)
+ if(QL_WELL == 2) close;
+ if(QL_WELL == 1)
menu
"Hello.", L_Close,
"Hello, Can you help me?", L_HELP;
@@ -122,16 +107,9 @@ L_Next:
mes "[Miler]";
mes "\"Ho! I'll help him!\"";
getexp (BaseLevel * 111), 0;
- set @Q_status, 2;
- callsub S_Update_Var;
+ set QL_WELL, 2;
close;
L_Close:
close;
-
-S_Update_Var:
- set QUEST_Nivalis_state,
- (QUEST_Nivalis_state & ~(@Q_MASK)
- | (@Q_status << @Q_SHIFT));
- return;
}
diff --git a/world/map/npc/020-2/_mobs.txt b/world/map/npc/020-2/_mobs.txt
index b0d2646d..62e1f438 100644
--- a/world/map/npc/020-2/_mobs.txt
+++ b/world/map/npc/020-2/_mobs.txt
@@ -3,7 +3,7 @@
-020-2,0,0,0|script|Mob020-2|-1
+020-2,0,0,0|script|Mob020-2|32767
{
end;
}
diff --git a/world/map/npc/020-2/baktar.txt b/world/map/npc/020-2/baktar.txt
index 660ea92d..9f0a878c 100644
--- a/world/map/npc/020-2/baktar.txt
+++ b/world/map/npc/020-2/baktar.txt
@@ -2,15 +2,11 @@
//#== NPC Baktar
//# Authors: Lien, PjotrOrial
//# Review: BigCrunch, Mistakes, Jenalya
-//# This NPC has two stages:
+//# This NPC has one stage:
//#
-//# In the first stage you need to bring 7 different items, but only one of each kind.
+//# you need to bring 7 different items, but only one of each kind.
//#
-//# In the second stage he tells you what hard life he is living. He will be very aggressive telling you some stuff.
-//# He will send you to kill Scroticular. That npc will be located in the labyrinth caves.
-//# (its a mob actually, to be spawned only, if the players knows his name and his location)
-//#
-//# variables used:
+//# variable used:
//# @QUEST_Nivalis_state: NIBBLE0, NIBBLE1, NIBBLE2, NIBBLE3:
//# BYTE0 ( == NIBBLE0 | NIBBLE1) stores in each bit information if that item was already brought.
//# bits:
@@ -22,31 +18,11 @@
//# bit 5 eggs_Item
//# bit 6 skin_Item
//# bit 7 bugleg
-//# NIBBLE2 store the progress after the item collecting stage:
-//# =0 he will thank you for bringing all stuff.
-//# =1 talking about his youth
-//# =2 talking, you get the mission to hunt down Scroticular
-//# =3 you get information where Scroticular can be found.
-//# NIBBLE3 a bitmasking nibble for stage 2 again
-//# bit 0 knows the name/location of the opponent
-//# bit 1 killed the ugly opponent
//#=========================
020-2,70,61,0|script|Baktar|191
{
set @npcname$, "[Baktar]";
- set @Q_MASK, BYTE_0_MASK;
- set @Q_SHIFT, BYTE_0_SHIFT;
- set @Q_status, ((QUEST_Nivalis_state) & @Q_MASK) >> @Q_SHIFT;
-
- set @Q_MASK2, NIBBLE_2_MASK;
- set @Q_SHIFT2, NIBBLE_2_SHIFT;
- set @Q_status2, ((QUEST_Nivalis_state) & @Q_MASK2) >> @Q_SHIFT2;
-
- set @Q_MASK2_BITS, NIBBLE_3_MASK;
- set @Q_SHIFT2_BITS, NIBBLE_3_SHIFT;
- set @Q_status2_bits, ((QUEST_Nivalis_state) & @Q_MASK2_BITS) >> @Q_SHIFT2_BITS;
-
set @BIT_KNOWHIM, 0;
set @BIT_DESERTHAT,1;
@@ -100,7 +76,7 @@ L_Start:
if(!Sex)
set @type$, "woman";
- if(@Q_status & (1<<@BIT_KNOWHIM)) goto L_KnowAlready;
+ if(QL_BAKTAR & (1<<@BIT_KNOWHIM)) goto L_KnowAlready;
mes @npcname$;
mes "\"Hello, " + @type$ + ", did you come from Tulimshar? Because you have a nice tan. \"";
menu
@@ -124,51 +100,50 @@ L_exotic:
L_startitem:
setarray @exotic_item$, "", "", "", "", "", "", "";
set @c, 0;
- set @Q_status, @Q_status | (1<<@BIT_KNOWHIM);
- callsub S_Update_Var;
- if (countitem("DesertHat") < 1 || @Q_status & (1<<@BIT_DESERTHAT) ) goto L_DesertShirt;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_KNOWHIM);
+ if (countitem("DesertHat") < 1 || QL_BAKTAR & (1<<@BIT_DESERTHAT) ) goto L_DesertShirt;
set @exotic_item$[@c], "a Desert Hat ?";
set @menuid[@c], 0;
set @c, @c + 1;
goto L_DesertShirt;
L_DesertShirt:
- if (countitem("DesertShirt") < 1 || @Q_status & (1<<@BIT_DESERTSHIRT) ) goto L_SerfHat;
+ if (countitem("DesertShirt") < 1 || QL_BAKTAR & (1<<@BIT_DESERTSHIRT) ) goto L_SerfHat;
set @exotic_item$[@c], "a Desert Shirt ?";
set @menuid[@c], 1;
set @c, @c + 1;
goto L_SerfHat;
L_SerfHat:
- if (countitem("SerfHat") < 1 || @Q_status & (1<<@BIT_SERFHAT) ) goto L_tongue;
+ if (countitem("SerfHat") < 1 || QL_BAKTAR & (1<<@BIT_SERFHAT) ) goto L_tongue;
set @exotic_item$[@c], "a Serf Hat ?";
set @menuid[@c], 2;
set @c, @c + 1;
goto L_tongue;
L_tongue:
- if (countitem("MountainSnakeTongue") < 1 || @Q_status & (1<<@BIT_MS_TONGUE)) goto L_egg;
+ if (countitem("MountainSnakeTongue") < 1 || QL_BAKTAR & (1<<@BIT_MS_TONGUE)) goto L_egg;
set @exotic_item$[@c], "a Mountain Snake Tongue ?";
set @menuid[@c], 3;
set @c, @c + 1;
goto L_egg;
L_egg:
- if (countitem("MountainSnakeEgg") < 1 || @Q_status & (1<<@BIT_MS_EGG)) goto L_Skin;
+ if (countitem("MountainSnakeEgg") < 1 || QL_BAKTAR & (1<<@BIT_MS_EGG)) goto L_Skin;
set @exotic_item$[@c], "a Mountain Snake Egg?";
set @menuid[@c], 4;
set @c, @c + 1;
goto L_Skin;
L_Skin:
- if (countitem("SnakeSkin") < 1 || @Q_status & (1<<@BIT_SNAKESKIN)) goto L_bugleg;
+ if (countitem("SnakeSkin") < 1 || QL_BAKTAR & (1<<@BIT_SNAKESKIN)) goto L_bugleg;
set @exotic_item$[@c], "a Snake Skin?";
set @menuid[@c], 5;
set @c, @c + 1;
goto L_bugleg;
L_bugleg:
- if (countitem("BugLeg") < 1 || @Q_status & (1<<@BIT_BUGLEG)) goto L_NeverMind;
+ if (countitem("BugLeg") < 1 || QL_BAKTAR & (1<<@BIT_BUGLEG)) goto L_NeverMind;
set @exotic_item$[@c], "a Bug Leg?";
set @menuid[@c], 6;
set @c, @c + 1;
@@ -203,73 +178,66 @@ L_MenuItems:
close;
L_DesertHat_Item:
- if(@Q_status & (1<<@BIT_DESERTHAT)) goto L_havealready;
+ if(QL_BAKTAR & (1<<@BIT_DESERTHAT)) goto L_havealready;
if (countitem("DesertHat") < 1) goto L_Noitem;
delitem "DesertHat", 1;
set Zeny, Zeny + @MONEY_DESERTHAT;
getexp @XP_DESERTHAT,0;
- set @Q_status, @Q_status | (1<<@BIT_DESERTHAT);
- callsub S_Update_Var;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_DESERTHAT);
close;
L_DesertShirt_Item:
- if(@Q_status & (1<<@BIT_DESERTSHIRT)) goto L_havealready;
+ if(QL_BAKTAR & (1<<@BIT_DESERTSHIRT)) goto L_havealready;
if (countitem("DesertShirt") < 1) goto L_Noitem;
delitem "DesertShirt", 1;
set Zeny, Zeny + @MONEY_DESERTSHIRT;
getexp @XP_DESERTSHIRT,0;
- set @Q_status, @Q_status | (1<<@BIT_DESERTSHIRT);
- callsub S_Update_Var;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_DESERTSHIRT);
close;
L_SerfHat_Item:
- if(@Q_status & (1<<@BIT_SERFHAT)) goto L_havealready;
+ if(QL_BAKTAR & (1<<@BIT_SERFHAT)) goto L_havealready;
if (countitem("SerfHat") < 1) goto L_Noitem;
delitem "SerfHat", 1;
set Zeny, Zeny + @MONEY_SERFHAT;
getexp @XP_SERFHAT,0;
- set @Q_status, @Q_status | (1<<@BIT_SERFHAT);
- callsub S_Update_Var;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_SERFHAT);
close;
L_tongue_Item:
- if(@Q_status & (1<<@BIT_MS_TONGUE)) goto L_havealready;
+ if(QL_BAKTAR & (1<<@BIT_MS_TONGUE)) goto L_havealready;
if (countitem("MountainSnakeTongue") < 1) goto L_Noitem;
delitem "MountainSnakeTongue", 1;
set Zeny, Zeny + @MONEY_MS_TONGUE;
getexp @XP_MS_TONGUE,0;
- set @Q_status, @Q_status | (1<<@BIT_MS_TONGUE);
- callsub S_Update_Var;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_MS_TONGUE);
close;
L_egg_Item:
- if(@Q_status & (1<<@BIT_MS_EGG)) goto L_havealready;
+ if(QL_BAKTAR & (1<<@BIT_MS_EGG)) goto L_havealready;
if (countitem("MountainSnakeEgg") < 1) goto L_Noitem;
delitem "MountainSnakeEgg", 1;
set Zeny, Zeny + @MONEY_MS_EGG;
getexp @XP_MS_EGG,0;
- set @Q_status, @Q_status | (1<<@BIT_MS_EGG);
- callsub S_Update_Var;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_MS_EGG);
close;
L_skin_Item:
- if(@Q_status & (1<<@BIT_SNAKESKIN)) goto L_havealready;
+ if(QL_BAKTAR & (1<<@BIT_SNAKESKIN)) goto L_havealready;
if (countitem("SnakeSkin") < 1) goto L_Noitem;
delitem "SnakeSkin", 1;
set Zeny, Zeny + @MONEY_SNAKESKIN;
getexp @XP_SNAKESKIN,0;
- set @Q_status, @Q_status | (1<<@BIT_SNAKESKIN);
- callsub S_Update_Var;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_SNAKESKIN);
close;
L_BugLegItem:
- if(@Q_status & (1<<@BIT_BUGLEG)) goto L_havealready;
+ if(QL_BAKTAR & (1<<@BIT_BUGLEG)) goto L_havealready;
if (countitem("BugLeg") < 1) goto L_Noitem;
delitem "BugLeg", 1;
set Zeny, Zeny + @MONEY_BUGLEG;
getexp @XP_BUGLEG,0;
- set @Q_status, @Q_status | (1<<@BIT_BUGLEG);
- callsub S_Update_Var;
+ set QL_BAKTAR, QL_BAKTAR | (1<<@BIT_BUGLEG);
close;
L_Noitem:
@@ -284,10 +252,4 @@ L_havealready:
L_Close:
close;
-
-S_Update_Var:
- set QUEST_Nivalis_state,
- (QUEST_Nivalis_state & ~(@Q_MASK)
- | (@Q_status << @Q_SHIFT));
- return;
}
diff --git a/world/map/npc/020-2/banker.txt b/world/map/npc/020-2/banker.txt
index 3359501b..edf1c26b 100644
--- a/world/map/npc/020-2/banker.txt
+++ b/world/map/npc/020-2/banker.txt
@@ -1,6 +1,5 @@
020-2,122,64,0|script|Ben|193
{
- callfunc "ClearVariables";
set @npcname$, "Ben";
callfunc "Banker";
close;
diff --git a/world/map/npc/020-3/_mobs.txt b/world/map/npc/020-3/_mobs.txt
index 13ed6c8b..edb95973 100644
--- a/world/map/npc/020-3/_mobs.txt
+++ b/world/map/npc/020-3/_mobs.txt
@@ -7,7 +7,7 @@
020-3,0,0,0,0|monster|Pinkie|1018,10,0ms,0ms,Mob020-3::On1018
-020-3,0,0,0|script|Mob020-3|-1
+020-3,0,0,0|script|Mob020-3|32767
{
end;
diff --git a/world/map/npc/021-3/_mobs.txt b/world/map/npc/021-3/_mobs.txt
index 78c24a7c..8d6c2591 100644
--- a/world/map/npc/021-3/_mobs.txt
+++ b/world/map/npc/021-3/_mobs.txt
@@ -13,7 +13,7 @@
021-3,47,139,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056
-021-3,0,0,0|script|Mob021-3|-1
+021-3,0,0,0|script|Mob021-3|32767
{
end;
diff --git a/world/map/npc/025-1/_mobs.txt b/world/map/npc/025-1/_mobs.txt
index cddb2696..2a2d27ac 100644
--- a/world/map/npc/025-1/_mobs.txt
+++ b/world/map/npc/025-1/_mobs.txt
@@ -13,7 +13,7 @@
025-1,26,61,15,85|monster|Scorpion|1003,12,100000ms,50000ms,Mob025-1::On1003
-025-1,0,0,0|script|Mob025-1|-1
+025-1,0,0,0|script|Mob025-1|32767
{
end;
diff --git a/world/map/npc/025-3/_mobs.txt b/world/map/npc/025-3/_mobs.txt
index 4ab99039..5ccfdfc0 100644
--- a/world/map/npc/025-3/_mobs.txt
+++ b/world/map/npc/025-3/_mobs.txt
@@ -7,7 +7,7 @@
025-3,69,153,13,1|monster|Skeleton|1043,1,0ms,30000ms,Mob025-3::On1043
-025-3,0,0,0|script|Mob025-3|-1
+025-3,0,0,0|script|Mob025-3|32767
{
end;
diff --git a/world/map/npc/025-4/_mobs.txt b/world/map/npc/025-4/_mobs.txt
index 62318520..3ad731de 100644
--- a/world/map/npc/025-4/_mobs.txt
+++ b/world/map/npc/025-4/_mobs.txt
@@ -5,7 +5,7 @@
025-4,94,24,20,21|monster|CaveMaggot|1056,5,0ms,100ms,Mob025-4::On1056
-025-4,0,0,0|script|Mob025-4|-1
+025-4,0,0,0|script|Mob025-4|32767
{
end;
diff --git a/world/map/npc/026-1/_mobs.txt b/world/map/npc/026-1/_mobs.txt
index 34da2792..a99c4bab 100644
--- a/world/map/npc/026-1/_mobs.txt
+++ b/world/map/npc/026-1/_mobs.txt
@@ -14,7 +14,7 @@
026-1,60,76,61,31|monster|GrassSnake|1034,4,100000ms,50000ms,Mob026-1::On1034
-026-1,0,0,0|script|Mob026-1|-1
+026-1,0,0,0|script|Mob026-1|32767
{
end;
diff --git a/world/map/npc/027-1/_mobs.txt b/world/map/npc/027-1/_mobs.txt
index f72b338d..de1a4b6f 100644
--- a/world/map/npc/027-1/_mobs.txt
+++ b/world/map/npc/027-1/_mobs.txt
@@ -20,7 +20,7 @@
027-1,99,90,34,16|monster|GrassSnake|1034,3,100000ms,50000ms,Mob027-1::On1034
-027-1,0,0,0|script|Mob027-1|-1
+027-1,0,0,0|script|Mob027-1|32767
{
end;
diff --git a/world/map/npc/027-1/graves.txt b/world/map/npc/027-1/graves.txt
index dee7df5d..d10c3309 100644
--- a/world/map/npc/027-1/graves.txt
+++ b/world/map/npc/027-1/graves.txt
@@ -1,19 +1,10 @@
// Easter egg graves
-function|script|GraveTooFar
-{
- if (isin("027-1",89,54,122,76))
- goto L_Return;
- mes "You are too far away to read the grave.";
- close;
-
-L_Return:
- return;
-}
-
027-1,89,62,0|script|Grave#1|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ FotherJ ~";
mes "The mad sprite making genius who made all the creepy undead monster graphics.";
close;
@@ -21,7 +12,9 @@ L_Return:
027-1,118,54,0|script|Grave#2|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Yosuhara ~";
mes "Contributed some of the tombstones.";
close;
@@ -29,7 +22,9 @@ L_Return:
027-1,111,62,0|script|Grave#3|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Feline Monstrosity ~";
mes "Made the background music you are hearing.";
close;
@@ -37,7 +32,9 @@ L_Return:
027-1,112,76,0|script|Grave#4|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Superkoop ~";
mes "Mapped the swamp to the south.";
close;
@@ -45,7 +42,9 @@ L_Return:
027-1,120,76,0|script|Grave#5|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Aroleon ~";
mes "Mapped the swamp to the southeast.";
close;
@@ -53,7 +52,9 @@ L_Return:
027-1,100,68,0|script|Grave#6|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ John P ~";
mes "Wrote the graveyard backstory and the dialog for the caretaker quest.";
close;
@@ -61,7 +62,9 @@ L_Return:
027-1,94,70,0|script|Grave#7|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Spit23 ~";
mes "Made those freakin awesome cemetery gates.";
close;
@@ -69,7 +72,9 @@ L_Return:
027-1,106,60,0|script|Grave#8|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Black Don ~";
mes "Contributed those cool gargoyle statues.";
close;
@@ -77,7 +82,9 @@ L_Return:
027-1,92,54,0|script|Grave#9|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Jaxad0127 ~";
mes "Did all the scripting work for the graveyard. Made Caretaker's house.";
close;
@@ -85,7 +92,9 @@ L_Return:
027-1,122,64,0|script|Grave#10|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Ces Vargavind ~";
mes "Scripted caretaker's daughter.";
close;
@@ -93,7 +102,9 @@ L_Return:
027-1,102,62,0|script|Grave#11|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Crush ~";
mes "Organizer of the whole graveyard project, graveyard fence graphics, mapping of the graveyard itself.";
close;
@@ -101,7 +112,9 @@ L_Return:
027-1,104,76,0|script|Grave#12|400
{
- callfunc "GraveTooFar";
+ set @npc_distance, 1;
+ callfunc "PCtoNPCRange";
+ if(@npc_check) end;
mes "~ Freeyorp ~";
mes "Planned out monster stats and placements.";
close;
diff --git a/world/map/npc/027-1/traveler.txt b/world/map/npc/027-1/traveler.txt
index ca8d8f47..0c8bb753 100644
--- a/world/map/npc/027-1/traveler.txt
+++ b/world/map/npc/027-1/traveler.txt
@@ -4,7 +4,7 @@
027-1,83,84,0|script|Styx the Traveler|103
{
- set @NpcName$, "Styx";
+ set @npcname$, "Styx";
set @NpcTravelBit, $@graveyard_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/027-2/_mobs.txt b/world/map/npc/027-2/_mobs.txt
index f87f19f9..ab76e3b0 100644
--- a/world/map/npc/027-2/_mobs.txt
+++ b/world/map/npc/027-2/_mobs.txt
@@ -13,7 +13,7 @@
027-2,89,34,11,9|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078
-027-2,0,0,0|script|Mob027-2|-1
+027-2,0,0,0|script|Mob027-2|32767
{
end;
diff --git a/world/map/npc/027-2/gy_inn_shops.txt b/world/map/npc/027-2/gy_inn_shops.txt
index 8808755d..20f03d3a 100644
--- a/world/map/npc/027-2/gy_inn_shops.txt
+++ b/world/map/npc/027-2/gy_inn_shops.txt
@@ -40,7 +40,6 @@
// Bank and Storage
027-2,88,22,0|script|J.P. Morbid|321
{
- callfunc "ClearVariables";
set @npcname$, "J.P. Morbid";
callfunc "Banker";
close;
diff --git a/world/map/npc/027-3/_mobs.txt b/world/map/npc/027-3/_mobs.txt
index 0d4599a7..4c7c8ff6 100644
--- a/world/map/npc/027-3/_mobs.txt
+++ b/world/map/npc/027-3/_mobs.txt
@@ -11,7 +11,7 @@
027-3,98,84,60,14|monster|FireSkull|1023,2,60000ms,20000ms,Mob027-3::On1023
-027-3,0,0,0|script|Mob027-3|-1
+027-3,0,0,0|script|Mob027-3|32767
{
end;
diff --git a/world/map/npc/027-3/monsters.txt b/world/map/npc/027-3/monsters.txt
index 6664d033..2e552eb2 100644
--- a/world/map/npc/027-3/monsters.txt
+++ b/world/map/npc/027-3/monsters.txt
@@ -6,7 +6,7 @@
027-3,67,29,129,64|monster|Zombie|1036,3,140000ms,30000ms,specialMob027-3::On1036
027-3,101,65,128,93|monster|Fallen|1045,3,120000ms,30000ms,specialMob027-3::On1045
-027-3,0,0,0|script|specialMob027-3|-1
+027-3,0,0,0|script|specialMob027-3|32767
{
end;
diff --git a/world/map/npc/027-4/_mobs.txt b/world/map/npc/027-4/_mobs.txt
index e5fd7229..cb65135e 100644
--- a/world/map/npc/027-4/_mobs.txt
+++ b/world/map/npc/027-4/_mobs.txt
@@ -8,7 +8,7 @@
027-4,101,36,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-4::On1044
-027-4,0,0,0|script|Mob027-4|-1
+027-4,0,0,0|script|Mob027-4|32767
{
end;
diff --git a/world/map/npc/027-4/monsters.txt b/world/map/npc/027-4/monsters.txt
index 7c071bc5..ef810372 100644
--- a/world/map/npc/027-4/monsters.txt
+++ b/world/map/npc/027-4/monsters.txt
@@ -7,7 +7,7 @@
027-4,61,37,38,30|monster|Zombie|1036,2,60000ms,8000ms,specialMob027-4::On1036
027-4,101,36,38,30|monster|Zombie|1036,2,60000ms,8000ms,specialMob027-4::On1036
-027-4,0,0,0|script|specialMob027-4|-1
+027-4,0,0,0|script|specialMob027-4|32767
{
end;
diff --git a/world/map/npc/027-5/_mobs.txt b/world/map/npc/027-5/_mobs.txt
index 142d8ee9..e6958ba9 100644
--- a/world/map/npc/027-5/_mobs.txt
+++ b/world/map/npc/027-5/_mobs.txt
@@ -10,7 +10,7 @@
027-5,69,80,99,36|monster|LadySkeleton|1044,8,60000ms,8000ms,Mob027-5::On1044
-027-5,0,0,0|script|Mob027-5|-1
+027-5,0,0,0|script|Mob027-5|32767
{
end;
diff --git a/world/map/npc/027-6/_mobs.txt b/world/map/npc/027-6/_mobs.txt
index c5f45581..407a697e 100644
--- a/world/map/npc/027-6/_mobs.txt
+++ b/world/map/npc/027-6/_mobs.txt
@@ -3,7 +3,7 @@
-027-6,0,0,0|script|Mob027-6|-1
+027-6,0,0,0|script|Mob027-6|32767
{
end;
}
diff --git a/world/map/npc/027-7/_mobs.txt b/world/map/npc/027-7/_mobs.txt
index 482bf900..43867927 100644
--- a/world/map/npc/027-7/_mobs.txt
+++ b/world/map/npc/027-7/_mobs.txt
@@ -3,7 +3,7 @@
-027-7,0,0,0|script|Mob027-7|-1
+027-7,0,0,0|script|Mob027-7|32767
{
end;
}
diff --git a/world/map/npc/027-8/_mobs.txt b/world/map/npc/027-8/_mobs.txt
index 30810f3c..d38bf647 100644
--- a/world/map/npc/027-8/_mobs.txt
+++ b/world/map/npc/027-8/_mobs.txt
@@ -3,7 +3,7 @@
-027-8,0,0,0|script|Mob027-8|-1
+027-8,0,0,0|script|Mob027-8|32767
{
end;
}
diff --git a/world/map/npc/028-1/_mobs.txt b/world/map/npc/028-1/_mobs.txt
index 76a2715f..fc1aa291 100644
--- a/world/map/npc/028-1/_mobs.txt
+++ b/world/map/npc/028-1/_mobs.txt
@@ -15,7 +15,7 @@
028-1,60,45,1,1|monster|Fallen|1045,1,700000ms,300000ms,Mob028-1::On1045
-028-1,0,0,0|script|Mob028-1|-1
+028-1,0,0,0|script|Mob028-1|32767
{
end;
diff --git a/world/map/npc/028-3/_mobs.txt b/world/map/npc/028-3/_mobs.txt
index ce323fad..fd5fe855 100644
--- a/world/map/npc/028-3/_mobs.txt
+++ b/world/map/npc/028-3/_mobs.txt
@@ -7,7 +7,7 @@
028-3,50,49,61,60|monster|Bat|1017,10,60000ms,10000ms,Mob028-3::On1017
-028-3,0,0,0|script|Mob028-3|-1
+028-3,0,0,0|script|Mob028-3|32767
{
end;
diff --git a/world/map/npc/029-1/_mobs.txt b/world/map/npc/029-1/_mobs.txt
index 55bc216b..bad7d55a 100644
--- a/world/map/npc/029-1/_mobs.txt
+++ b/world/map/npc/029-1/_mobs.txt
@@ -9,7 +9,7 @@
029-1,76,42,52,25|monster|ManaBug|1131,3,30ms,0ms,Mob029-1::On1131
-029-1,0,0,0|script|Mob029-1|-1
+029-1,0,0,0|script|Mob029-1|32767
{
end;
diff --git a/world/map/npc/029-1/aahna.txt b/world/map/npc/029-1/aahna.txt
index e9da0d20..453774a9 100644
--- a/world/map/npc/029-1/aahna.txt
+++ b/world/map/npc/029-1/aahna.txt
@@ -3,21 +3,11 @@
// Npc
029-1,71,52,0|script|Aahna|404
{
- setarray @npc_loc, 71, 52, 3;
+ set @npc_distance, 3;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Range;
- goto L_Meet;
+ if(@npc_check) end;
-L_Meet:
mes "[Aahna]";
mes "\"Hello, What a lovely day for a stroll.\"";
- goto L_Close;
-
-L_Range:
- message strcharinfo(0), "Whats that? Come closer I can't hear you.";
- goto L_Close;
-
-L_Close:
close;
}
diff --git a/world/map/npc/029-1/hasan.txt b/world/map/npc/029-1/hasan.txt
index a5d3894b..626c5570 100644
--- a/world/map/npc/029-1/hasan.txt
+++ b/world/map/npc/029-1/hasan.txt
@@ -8,11 +8,10 @@
029-1,35,33,0|script|Scared Man|160
{
- setarray @npc_loc, 35, 33, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_End;
- if (@tutorial >= 13)
+ if(@npc_check) end;
+
+ if (QL_BEGIN >= 13)
goto L_TutDone;
message strcharinfo(0), "He looks too afraid to say anything.";
goto L_End;
@@ -26,23 +25,20 @@ L_End:
}
029-1,33,33,0|script|Hasan|189,3,3
{
- setarray @npc_loc, 33, 33, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
+ if(@npc_check) end;
goto L_Main;
L_Main:
- callfunc "TutorialState";
if ((getcharid(3) == $@ScorpionFighter) || ($@ScorpionFighter && $@ScorpionFighter != getcharid(3)))
goto L_Afraid;
- if (@tutorial == 14)
+ if (QL_BEGIN == 14)
goto L_TutDone;
- if (@tutorial == 13)
+ if (QL_BEGIN == 13)
goto L_Thank;
- if (@tutorial == 12)
+ if (QL_BEGIN == 12)
goto L_Trick;
- if ((@tutorial == 9) || (@tutorial == 10) || (@tutorial == 11))
+ if ((QL_BEGIN == 9) || (QL_BEGIN == 10) || (QL_BEGIN == 11))
goto L_FightAgain;
mes "You over hear some people nearby.";
@@ -60,8 +56,7 @@ L_Main:
mes "[Scared Man]";
mes "\"No, please don't. *sob*\"";
mes "Sounds like this person is in trouble.\"";
- set @tutorial_tmp, 9;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 9;
mes "[Unfriendly Guy]";
mes "\"What are you looking at?\"";
menu
@@ -112,8 +107,7 @@ L_Thank:
mes "\"Let me tell you something, I will no longer bully people.";
mes "And you can have my Sharp Knife.\"";
getitem "SharpKnife", 1;
- set @tutorial_tmp, 14;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 14;
mes "\"You want to go to Hurnscald, right? Shall I tell you how to get there?\"";
menu
"Sure, thanks.",L_HasanThanks,
@@ -152,7 +146,7 @@ L_Close:
close;
OnTouch:
- if (@tutorial >= 13)
+ if (QL_BEGIN >= 13)
end;
goto L_Main;
}
@@ -187,11 +181,12 @@ OnTimer5000:
OnScorpionDeath:
if (getcharid(3) != $@ScorpionFighter)
goto L_SummonAgain;
- if (@tutorial != 12)
+ if (QL_BEGIN != 12)
goto L_Clean;
- set @tutorial_tmp, 13;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 13;
message strcharinfo(0), "You saved Hasan.";
+ set @mobID, 1003;
+ callfunc "MobPoints";
goto L_Clean;
L_TimeOut:
diff --git a/world/map/npc/029-1/hideandseek.txt b/world/map/npc/029-1/hideandseek.txt
index 51280978..e0ed487f 100644
--- a/world/map/npc/029-1/hideandseek.txt
+++ b/world/map/npc/029-1/hideandseek.txt
@@ -1,5 +1,5 @@
// Children playing Hide and Seek
-// QUEST_NorthTulimshar
+// QL_HIDENSEEK
// BYTE 0
// Bit 0: started quest at Ayasha
// Bit 1 - 5: found one of the kids each
@@ -7,7 +7,7 @@
// Bit 7: unused
// Author: Jenalya
--|script|#hideandseekNTconfig|-1
+-|script|#hideandseekNTconfig|32767
{
end;
@@ -24,15 +24,15 @@ OnInit:
function|script|CountHideNSeek
{
set @hidden_kid_cnt, 0;
- if (QUEST_NorthTulimshar & $@hideandseekNT_found1)
+ if (QL_HIDENSEEK & $@hideandseekNT_found1)
set @hidden_kid_cnt, (@hidden_kid_cnt + 1);
- if (QUEST_NorthTulimshar & $@hideandseekNT_found2)
+ if (QL_HIDENSEEK & $@hideandseekNT_found2)
set @hidden_kid_cnt, (@hidden_kid_cnt + 1);
- if (QUEST_NorthTulimshar & $@hideandseekNT_found3)
+ if (QL_HIDENSEEK & $@hideandseekNT_found3)
set @hidden_kid_cnt, (@hidden_kid_cnt + 1);
- if (QUEST_NorthTulimshar & $@hideandseekNT_found4)
+ if (QL_HIDENSEEK & $@hideandseekNT_found4)
set @hidden_kid_cnt, (@hidden_kid_cnt + 1);
- if (QUEST_NorthTulimshar & $@hideandseekNT_found5)
+ if (QL_HIDENSEEK & $@hideandseekNT_found5)
set @hidden_kid_cnt, (@hidden_kid_cnt + 1);
return;
}
@@ -45,26 +45,25 @@ function|script|CountHideNSeek
"Close.", L_Close;
L_Show:
- set @state, ((QUEST_NorthTulimshar & BYTE_0_MASK) >> BYTE_0_SHIFT);
- mes "State: " + @state;
- if (QUEST_NorthTulimshar & $@hideandseekNT_started)
+ mes "State: " + QL_HIDENSEEK;
+ if (QL_HIDENSEEK & $@hideandseekNT_started)
mes "Start set";
- if (QUEST_NorthTulimshar & $@hideandseekNT_found1)
+ if (QL_HIDENSEEK & $@hideandseekNT_found1)
mes "Found 1 set";
- if (QUEST_NorthTulimshar & $@hideandseekNT_found2)
+ if (QL_HIDENSEEK & $@hideandseekNT_found2)
mes "Found 2 set";
- if (QUEST_NorthTulimshar & $@hideandseekNT_found3)
+ if (QL_HIDENSEEK & $@hideandseekNT_found3)
mes "Found 3 set";
- if (QUEST_NorthTulimshar & $@hideandseekNT_found4)
+ if (QL_HIDENSEEK & $@hideandseekNT_found4)
mes "Found 4 set";
- if (QUEST_NorthTulimshar & $@hideandseekNT_found5)
+ if (QL_HIDENSEEK & $@hideandseekNT_found5)
mes "Found 5 set";
- if (QUEST_NorthTulimshar & $@hideandseekNT_ended)
+ if (QL_HIDENSEEK & $@hideandseekNT_ended)
mes "Complete set";
goto L_Close;
L_Reset:
- set QUEST_NorthTulimshar, 0;
+ set QL_HIDENSEEK, 0;
goto L_Close;
L_Close:
@@ -80,13 +79,11 @@ OnInit:
set @child_number, 0;
callfunc "XmasList";
- set @state, ((QUEST_NorthTulimshar & BYTE_0_MASK) >> BYTE_0_SHIFT);
-
set @EXP, 75;
- if (@state > 63) goto L_Done;
- if (@state == 63) goto L_Reward;
- if (@state > 0) goto L_Doing;
+ if (QL_HIDENSEEK > 63) goto L_Done;
+ if (QL_HIDENSEEK == 63) goto L_Reward;
+ if (QL_HIDENSEEK > 0) goto L_Doing;
mes "You see a girl who is holding her hands in front of her face.";
mes "[Ayasha]";
@@ -109,7 +106,7 @@ L_Next1:
mes "\"Great! You can take my turn with searching. You need to find all five of my friends.";
mes "They're hiding somewhere on the island, you will have to explore to find them. They could be hiding anywhere.\"";
- set QUEST_NorthTulimshar, QUEST_NorthTulimshar | $@hideandseekNT_started;
+ set QL_HIDENSEEK, QL_HIDENSEEK | $@hideandseekNT_started;
goto L_Close;
L_Doing:
@@ -123,7 +120,7 @@ L_Reward:
mes "[Ayasha]";
mes "\"Oh, you found them all! Good job! Now it's my turn with searching again. Go and hide!\"";
getexp @EXP, 0;
- set QUEST_NorthTulimshar, QUEST_NorthTulimshar | $@hideandseekNT_ended;
+ set QL_HIDENSEEK, QL_HIDENSEEK | $@hideandseekNT_ended;
menu
"I think I need to do other things now.",L_Next2;
@@ -140,7 +137,6 @@ L_Done:
goto L_Close;
L_Close:
- set @state, 0;
set @EXP, 0;
close;
}
@@ -149,13 +145,11 @@ L_Close:
{
set @child_number, 1;
callfunc "XmasList";
- set @state, ((QUEST_NorthTulimshar & BYTE_0_MASK) >> BYTE_0_SHIFT);
-
set @EXP, 15;
- if (@state > 63) goto L_Done;
- if ((@state > 0) && !(QUEST_NorthTulimshar & $@hideandseekNT_found1)) goto L_Find;
- if (@state > 0) goto L_Doing;
+ if (QL_HIDENSEEK > 63) goto L_Done;
+ if ((QL_HIDENSEEK > 0) && !(QL_HIDENSEEK & $@hideandseekNT_found1)) goto L_Find;
+ if (QL_HIDENSEEK > 0) goto L_Doing;
mes "You see a kid hiding behind a box.";
menu
@@ -185,7 +179,7 @@ L_Find:
mes "[Latif]";
mes "\"Hey! Ah, you found me. Well done. But my hiding place wasn't that difficult this time.\"";
getexp @EXP, 0;
- set QUEST_NorthTulimshar, QUEST_NorthTulimshar | $@hideandseekNT_found1;
+ set QL_HIDENSEEK, QL_HIDENSEEK | $@hideandseekNT_found1;
mes "\"Here, do you want a candy?\"";
getitem "Candy", 1;
goto L_Close;
@@ -203,7 +197,6 @@ L_Done:
goto L_Close;
L_Close:
- set @state, 0;
set @EXP, 0;
close;
}
@@ -212,13 +205,11 @@ L_Close:
{
set @child_number, 2;
callfunc "XmasList";
- set @state, ((QUEST_NorthTulimshar & BYTE_0_MASK) >> BYTE_0_SHIFT);
-
set @EXP, 15;
- if (@state > 63) goto L_Done;
- if ((@state > 0) && !(QUEST_NorthTulimshar & $@hideandseekNT_found2)) goto L_Find;
- if (@state > 0) goto L_Doing;
+ if (QL_HIDENSEEK > 63) goto L_Done;
+ if ((QL_HIDENSEEK > 0) && !(QL_HIDENSEEK & $@hideandseekNT_found2)) goto L_Find;
+ if (QL_HIDENSEEK > 0) goto L_Doing;
mes "[Charda]";
mes "\"Hello. Psht, be careful. I'm playing hide and seek with Ayasha. You'll draw attention to my hiding place.\"";
@@ -229,7 +220,7 @@ L_Find:
mes "[Charda]";
mes "\"Oh! Got me! You're good at this.\"";
getexp @EXP, 0;
- set QUEST_NorthTulimshar, QUEST_NorthTulimshar | $@hideandseekNT_found2;
+ set QL_HIDENSEEK, QL_HIDENSEEK | $@hideandseekNT_found2;
mes "She takes something out of her pocket.";
mes "\"I'm hungry now. Do you want chocolate too?\"";
getitem "ChocolateBar", 1;
@@ -254,7 +245,6 @@ L_Done:
goto L_Close;
L_Close:
- set @state, 0;
set @EXP, 0;
close;
}
@@ -263,13 +253,11 @@ L_Close:
{
set @child_number, 3;
callfunc "XmasList";
- set @state, ((QUEST_NorthTulimshar & BYTE_0_MASK) >> BYTE_0_SHIFT);
-
set @EXP, 25;
- if (@state > 63) goto L_Done;
- if ((@state > 0) && !(QUEST_NorthTulimshar & $@hideandseekNT_found3)) goto L_Find;
- if (@state > 0) goto L_Doing;
+ if (QL_HIDENSEEK > 63) goto L_Done;
+ if ((QL_HIDENSEEK > 0) && !(QL_HIDENSEEK & $@hideandseekNT_found3)) goto L_Find;
+ if (QL_HIDENSEEK > 0) goto L_Doing;
mes "[Faris]";
mes "\"Oh, hi there. What are you doing here on the beach?\"";
@@ -287,7 +275,7 @@ L_Find:
mes "\"You found me! Well done. You look a bit thirsty, here.\"";
getexp @EXP, 0;
getitem "CactusDrink", 1;
- set QUEST_NorthTulimshar, QUEST_NorthTulimshar | $@hideandseekNT_found3;
+ set QL_HIDENSEEK, QL_HIDENSEEK | $@hideandseekNT_found3;
mes "\"It's really cool you're playing with us. I'm sure you have a lot of other things to do.";
mes "You're an adventurer, right? I want to become an adventurer too when I'm grown up. I'll talk to Aidan then.\"";
mes "\"Aidan is outside Sorfina's place and you can register there for monster points. That's something the Wizard's Council made up. They reward you for slaying monsters. It's so cool.\"";
@@ -306,7 +294,6 @@ L_Done:
goto L_Close;
L_Close:
- set @state, 0;
set @EXP, 0;
close;
}
@@ -315,13 +302,12 @@ L_Close:
{
set @child_number, 4;
callfunc "XmasList";
- set @state, ((QUEST_NorthTulimshar & BYTE_0_MASK) >> BYTE_0_SHIFT);
set @EXP, 15;
- if (@state > 63) goto L_Done;
- if ((@state > 0) && !(QUEST_NorthTulimshar & $@hideandseekNT_found4)) goto L_Find;
- if (@state > 0) goto L_Doing;
+ if (QL_HIDENSEEK > 63) goto L_Done;
+ if ((QL_HIDENSEEK > 0) && !(QL_HIDENSEEK & $@hideandseekNT_found4)) goto L_Find;
+ if (QL_HIDENSEEK > 0) goto L_Doing;
mes "[Rasin]";
mes "\"The harbor is to the south from here. There you can take a ferry to other places.";
@@ -332,7 +318,7 @@ L_Find:
mes "[Rasin]";
mes "\"Ah, you found me. I need to find a better place to hide next time.\"";
getexp @EXP, 0;
- set QUEST_NorthTulimshar, QUEST_NorthTulimshar | $@hideandseekNT_found4;
+ set QL_HIDENSEEK, QL_HIDENSEEK | $@hideandseekNT_found4;
goto L_Close;
L_Doing:
@@ -349,7 +335,6 @@ L_Done:
goto L_Close;
L_Close:
- set @state, 0;
set @EXP, 0;
close;
}
@@ -358,13 +343,12 @@ L_Close:
{
set @child_number, 5;
callfunc "XmasList";
- set @state, ((QUEST_NorthTulimshar & BYTE_0_MASK) >> BYTE_0_SHIFT);
set @EXP, 15;
- if (@state > 63) goto L_Done;
- if ((@state > 0) && !(QUEST_NorthTulimshar & $@hideandseekNT_found5)) goto L_Find;
- if (@state > 0) goto L_Doing;
+ if (QL_HIDENSEEK > 63) goto L_Done;
+ if ((QL_HIDENSEEK > 0) && !(QL_HIDENSEEK & $@hideandseekNT_found5)) goto L_Find;
+ if (QL_HIDENSEEK > 0) goto L_Doing;
mes "You see a girl standing behind the wheat. She has a look of intense concentration on her face.";
menu
@@ -381,7 +365,7 @@ L_Find:
mes "\"Oh no! You found me! You must be very clever.";
mes "My friend Sandra is clever too, but she said it's a waste of time to play hide and seek.\"";
getexp @EXP, 0;
- set QUEST_NorthTulimshar, QUEST_NorthTulimshar | $@hideandseekNT_found5;
+ set QL_HIDENSEEK, QL_HIDENSEEK | $@hideandseekNT_found5;
goto L_Close;
L_Doing:
@@ -397,7 +381,6 @@ L_Done:
goto L_Close;
L_Close:
- set @state, 0;
set @EXP, 0;
close;
}
diff --git a/world/map/npc/029-1/kaan.txt b/world/map/npc/029-1/kaan.txt
index 1c3cf0bb..1133744c 100644
--- a/world/map/npc/029-1/kaan.txt
+++ b/world/map/npc/029-1/kaan.txt
@@ -3,24 +3,18 @@
029-1,46,95,0|script|Kaan|160
{
- setarray @npc_loc, 46, 97, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_OutOfRange;
+ if(@npc_check) end;
- callfunc "TutorialState";
+ set @kaan_talked, (STARTAREA & $@SpokeToKaan);
if (!(@kaan_talked)) goto L_Tanisha;
- if (@tutorial >= 13) goto L_TutDone;
- if (@tutorial == 12) goto L_Plan;
- if (@tutorial == 11) goto L_TrickKnown;
- if (@tutorial == 10) goto L_Trick;
- if (@tutorial == 9) goto L_Hasan;
+ if (QL_BEGIN >= 13) goto L_TutDone;
+ if (QL_BEGIN == 12) goto L_Plan;
+ if (QL_BEGIN == 11) goto L_TrickKnown;
+ if (QL_BEGIN == 10) goto L_Trick;
+ if (QL_BEGIN == 9) goto L_Hasan;
goto L_Out;
-L_OutOfRange:
- message strcharinfo(0), "Come closer!";
- goto L_Close;
-
L_Tanisha:
set STARTAREA, STARTAREA | $@SpokeToKaan;
mes "[Young Man]";
@@ -69,8 +63,7 @@ L_Next1:
mes "\"Sometimes he just freaks out and then he's dangerous.";
mes "He might listen to one of the adult men, but they're all off to work in Hurnscald during the day.\"";
mes "\"We should think about some kind of trick. Ah, if only I knew his weak point.\"";
- set @tutorial_tmp, 10;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 10;
goto L_Trick;
L_Trick:
@@ -91,8 +84,7 @@ L_Next2:
mes "[Kaan]";
mes "\"Scorpions?! Right! How could I forget?";
mes "When he was a child, he nearly died because he fell into a scorpion nest.\"";
- set @tutorial_tmp, 12;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 12;
next;
goto L_Explain;
diff --git a/world/map/npc/029-1/liana.txt b/world/map/npc/029-1/liana.txt
index 4e4a78a6..e3ffe889 100644
--- a/world/map/npc/029-1/liana.txt
+++ b/world/map/npc/029-1/liana.txt
@@ -2,16 +2,14 @@
029-1,62,96,0|script|Liana|205
{
- setarray @npc_loc, 62, 96, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_End;
+ if(@npc_check) end;
goto L_Talk;
L_Talk:
mes "[Liana]";
mes "\"Hurnscald is a large city. I'm sure glad I live in Candor because I know where everything's at.\"";
- if (@tutorial == 10) goto L_Hasan;
+ if (QL_BEGIN == 10) goto L_Hasan;
goto L_Close;
L_Hasan:
@@ -34,12 +32,7 @@ L_Next:
mes "\"If Lieutenant Dausen hadn't have come along that moment, Hasan would have died that day.\"";
mes "\"However, the scorpions poison caused a bad fever and once Hasan had recovered from that, he was even more malicious than before.\"";
mes "She sighs.";
- set @tutorial_tmp, 11;
- callfunc "SetTutorialMask";
- goto L_Close;
-
-L_End:
- mes "You'll have to move closer";
+ set QL_BEGIN, 11;
goto L_Close;
L_Close:
diff --git a/world/map/npc/029-1/rewards_master.txt b/world/map/npc/029-1/rewards_master.txt
index acfafc58..1ed99ac2 100644
--- a/world/map/npc/029-1/rewards_master.txt
+++ b/world/map/npc/029-1/rewards_master.txt
@@ -136,7 +136,7 @@ S_give_item:
getitem @item$, 1;
- mes "You received one " + getitemname(@item$) + "!";
+ mes "You received one " + getitemlink(@item$) + "!";
return;
S_give_noinv:
diff --git a/world/map/npc/029-1/soul-menhir.txt b/world/map/npc/029-1/soul-menhir.txt
index d38f5e85..8113d9c5 100644
--- a/world/map/npc/029-1/soul-menhir.txt
+++ b/world/map/npc/029-1/soul-menhir.txt
@@ -2,7 +2,6 @@
029-1,39,101,0|script|Soul Menhir#candor|344
{
- callfunc "ClearVariables";
set @map$, "029-1";
setarray @Xs, 38, 39, 40, 38, 40, 38, 39, 40;
setarray @Ys, 100, 100, 100, 101, 101, 102, 102, 102;
diff --git a/world/map/npc/029-1/traveler.txt b/world/map/npc/029-1/traveler.txt
index 1d7f354a..befa8eef 100644
--- a/world/map/npc/029-1/traveler.txt
+++ b/world/map/npc/029-1/traveler.txt
@@ -4,7 +4,7 @@
029-1,69,68,0|script|Knitra the Traveler|103
{
- set @NpcName$, "Knitra";
+ set @npcname$, "Knitra";
set @NpcTravelBit, $@candor_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/029-1/tutorial.txt b/world/map/npc/029-1/tutorial.txt
index ddaea587..e6f31c4a 100644
--- a/world/map/npc/029-1/tutorial.txt
+++ b/world/map/npc/029-1/tutorial.txt
@@ -1,7 +1,7 @@
// This file is part of the Tutorial
// Author: Jenalya
// if you enter the tutorial area from outside, it is set to be already done
--|script|#TutorialConfig|-1
+-|script|#TutorialConfig|32767
{
end;
@@ -12,19 +12,6 @@ OnInit:
set $@SpokeToKaan, (1 << 31);
end;
}
-function|script|TutorialState
-{
- callfunc "ClearVariables";
- set @tutorial, ((STARTAREA & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
- set @kaan_talked, (STARTAREA & $@SpokeToKaan);
- return;
-}
-function|script|SetTutorialMask
-{
- set STARTAREA, (STARTAREA & ~(NIBBLE_0_MASK) | (@tutorial_tmp << NIBBLE_0_SHIFT));
- set @tutorial_tmp, 0;
- return;
-}
029-2,21,26,0|script|TutDebug|154
{
mes "[TutDebug]";
@@ -35,16 +22,14 @@ function|script|SetTutorialMask
"No.",L_Close;
L_Kaan:
- set @tutorial_tmp, 8;
- set STARTAREA, (STARTAREA & ~(NIBBLE_0_MASK) | (@tutorial_tmp << NIBBLE_0_SHIFT));
+ set QL_BEGIN, 8;
set STARTAREA, STARTAREA &~ $@SpokeToKaan;
mes "Reset!";
goto L_Close;
L_Reset:
set TUT_var, 0;
- set @tutorial_tmp, 0;
- set STARTAREA, (STARTAREA & ~(NIBBLE_0_MASK) | (@tutorial_tmp << NIBBLE_0_SHIFT));
+ set QL_BEGIN, 0;
set STARTAREA, STARTAREA &~ $@SpokeToKaan;
mes "Reset!";
goto L_Close;
@@ -59,14 +44,12 @@ OnInit:
}
029-1,32,99,0|script|#tutorialoutside|45,0,0
{
- callfunc "TutorialState";
- if (@tutorial >= 8)
+ if (QL_BEGIN >= 8)
goto L_Warp;
goto L_ResetTutorial;
L_ResetTutorial:
- set @tutorial_tmp, 8;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 8;
goto L_Warp;
L_Warp:
diff --git a/world/map/npc/029-1/valon.txt b/world/map/npc/029-1/valon.txt
index 49bb6c5d..20cbbcf8 100644
--- a/world/map/npc/029-1/valon.txt
+++ b/world/map/npc/029-1/valon.txt
@@ -1,6 +1,6 @@
// This file is part of the Tutorial
// Author: Jenalya, Wushin
--|script|#ValonConfig|-1
+-|script|#ValonConfig|32767
{
end;
@@ -10,21 +10,14 @@ OnInit:
setarray $@ValonMobCnt, 10,5,3,1;
end;
}
-function|script|ValonState
+function|script|ValonCount
{
- set @valon_state, ((STARTAREA & NIBBLE_1_MASK) >> NIBBLE_1_SHIFT);
set @valon_mob, 0;
- if (@valon_state >= 2)
- set @valon_mob, (@valon_state - 2);
+ if (QL_VALON >= 2)
+ set @valon_mob, (QL_VALON - 2);
set @valon_count, ((STARTAREA & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
return;
}
-function|script|setValonMask
-{
- set STARTAREA, (STARTAREA & ~(NIBBLE_1_MASK) | (@valon_tmp << NIBBLE_1_SHIFT));
- set @valon_tmp, 0;
- return;
-}
function|script|ResetValonCntMask
{
set STARTAREA, (STARTAREA & ~(NIBBLE_2_MASK) | (0 << NIBBLE_2_SHIFT));
@@ -42,8 +35,8 @@ function|script|AddValonCntMask
}
function|script|ValonProgress
{
- callfunc "ValonState";
- if ((@valon_state > 1) && (@valon_state < 6))
+ callfunc "ValonCount";
+ if ((QL_VALON > 1) && (QL_VALON < 6))
message strcharinfo(0), $@ValonMobName$[@valon_mob] + ": " + @valon_count + "/" + $@ValonMobCnt[@valon_mob];
return;
}
@@ -56,7 +49,7 @@ function|script|ValonProgress
"No.", L_Close;
L_Reset:
- set STARTAREA, (STARTAREA & ~(NIBBLE_1_MASK) | (0 << NIBBLE_1_SHIFT));
+ set QL_VALON, 0;
set STARTAREA, (STARTAREA & ~(NIBBLE_2_MASK) | (0 << NIBBLE_2_SHIFT));
mes "Reset!";
goto L_Close;
@@ -71,18 +64,17 @@ OnInit:
}
029-1,72,86,0|script|Valon|156
{
- setarray @npc_loc, 72, 86, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
- callfunc "ValonState";
- if (@valon_state >= 6)
+ if(@npc_check) end;
+
+ callfunc "ValonCount";
+ if (QL_VALON >= 6)
goto L_QuestComplete;
- if (@valon_start == 1)
+ if (QL_VALON == 1)
goto L_QuestAskAgain;
if (@valon_count >= $@ValonMobCnt[@valon_mob])
goto L_NextMob;
- if ((@valon_state >= 2) && (@valon_state < 6))
+ if ((QL_VALON >= 2) && (QL_VALON < 6))
goto L_QuestStarted;
goto L_QuestAsk;
@@ -102,17 +94,15 @@ L_QuestAsk:
mes "\"I should know I guard this gate from all manner of island beasts.\"";
mes "\"Maybe you would like help and earn your stripes?\"";
mes "\"The Council of Wizard's does offer a reward for helping...\"";
- set @valon_tmp, 1;
- callfunc "setValonMask";
+ set QL_VALON, 1;
callfunc "ResetValonCntMask";
menu
"YES!!! let me at them!", L_Accept,
"Maybe some other time.", L_Close;
L_Accept:
- set @valon_tmp, 2;
- callfunc "setValonMask";
- callfunc "ValonState";
+ set QL_VALON, 2;
+ callfunc "ValonCount";
goto L_NewMob;
L_NextMob:
@@ -120,10 +110,9 @@ L_NextMob:
mes "\"I see you killed all the " + $@ValonMobName$[@valon_mob] + " needed.\"";
mes "\"The Wizard's thank thee as well.\"";
set Zeny, Zeny + 25;
- set @valon_tmp, (@valon_state + 1);
- callfunc "setValonMask";
+ set QL_VALON, (QL_VALON + 1);
callfunc "ResetValonCntMask";
- callfunc "ValonState";
+ callfunc "ValonCount";
if (@valon_mob == getarraysize($@ValonMob))
goto L_QuestOver;
goto L_NewMob;
@@ -144,8 +133,7 @@ L_QuestOver:
mes "[Valon]";
mes "\"Thanks once again for helping with the monsters in the island.\"";
getexp 50, 0;
- set @valon_tmp, (@valon_state + 1);
- callfunc "setValonMask";
+ set QL_VALON, (QL_VALON + 1);
goto L_Close;
L_QuestComplete:
diff --git a/world/map/npc/029-1/vincent.txt b/world/map/npc/029-1/vincent.txt
index 2d70b6de..ab157e25 100644
--- a/world/map/npc/029-1/vincent.txt
+++ b/world/map/npc/029-1/vincent.txt
@@ -9,7 +9,7 @@
"No.", L_Close;
L_Reset:
- set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_2_MASK) | (0 << NIBBLE_2_SHIFT));
+ set QL_VINCENT, 0;
mes "Reset!";
goto L_Close;
@@ -23,15 +23,11 @@ OnInit:
}
029-1,107,110,0|script|Vincent|113
{
- // This NPC previously used the variable TMW_Quest
- callfunc "ClearVarTMW_Quest";
set @halloween_npc_id, $@halloween_npc_vincent;
callfunc "TrickOrTreat";
- set @state, ((QUEST_SouthTulimshar & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
-
- if (@state >= 2) goto L_Done;
- if (@state == 1) goto L_Progress;
+ if (QL_VINCENT >= 2) goto L_Done;
+ if (QL_VINCENT == 1) goto L_Progress;
goto L_Con_Vin_First;
L_Con_Vin_First:
@@ -73,8 +69,7 @@ L_Ask:
"No.", L_Close;
L_Sure:
- set @state, 1;
- callsub S_Update_Var;
+ set QL_VINCENT, 1;
set @TEMP, rand(4);
if(@TEMP == 1) goto L_Req2;
if(@TEMP == 2) goto L_Req3;
@@ -125,8 +120,7 @@ L_Have:
delitem "BugLeg", 5;
getexp 50, 0;
set Zeny, Zeny + 1000;
- set @state, 2;
- callsub S_Update_Var;
+ set QL_VINCENT, 2;
mes "[Vincent]";
mes "\"Here you go, a little of my appreciation!\"";
@@ -140,11 +134,5 @@ L_Done:
goto L_Close;
L_Close:
- set @TEMP, 0;
- set @state, 0;
close;
-
-S_Update_Var:
- set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_2_MASK) | (@state << NIBBLE_2_SHIFT));
- return;
}
diff --git a/world/map/npc/029-1/zegas.txt b/world/map/npc/029-1/zegas.txt
index f9cefcbd..b25bd6c9 100644
--- a/world/map/npc/029-1/zegas.txt
+++ b/world/map/npc/029-1/zegas.txt
@@ -3,26 +3,20 @@
// Npc
029-1,45,85,0|script|Zegas|165
{
- setarray @npc_loc, 45, 85, 2;
+ set @npc_distance, 2;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Range;
+ if(@npc_check) end;
- callfunc "CheckBarrelQuest";
- if (@barrel_quest == 1)
+ if (QL_ZEGAS == 1)
goto L_Find;
- if (@barrel_quest == 2)
+ if (QL_ZEGAS == 2)
goto L_Looking;
- if (@barrel_quest == 3)
+ if (QL_ZEGAS == 3)
goto L_QuestEnd;
- if (@barrel_quest == 4)
+ if (QL_ZEGAS == 4)
goto L_Thanks;
goto L_Meet;
-L_Range:
- message strcharinfo(0), "Whats that? Come closer I can't hear you.";
- goto L_Close;
-
L_Meet:
mes "[Zegas]";
mes "\"Hey do you have a second?\"";
@@ -32,8 +26,7 @@ L_Meet:
mes "\"Wouldn't you know it, the bug bomb Eomie gave us is in one of the store room barrels.\"";
next;
mes "\"Can you search the barrels for the bug bomb and set it off when you find it?\"";
- set @barrel_tmp, 1;
- callfunc "SetBarrelMask";
+ set QL_ZEGAS, 1;
menu
"Sure.",L_Start,
"Maybe some other time.",L_Close;
@@ -49,8 +42,7 @@ L_Find:
L_Start:
mes "[Zegas]";
- set @barrel_tmp, 2;
- callfunc "SetBarrelMask";
+ set QL_ZEGAS, 2;
mes "\"Thanks, come back and see me once you found the bug bomb and set it off.\"";
goto L_Close;
@@ -62,11 +54,10 @@ L_Looking:
L_QuestEnd:
mes "[Zegas]";
mes "\"From the smell I can see you found the bug bomb!\"";
- mes "\"Thanks once again, I know it's not much but here is 50 GP for your troubles.\"";
+ mes "\"Thanks once again, I know it's not much but here is 50 GP for your troubles.\"";
getexp 50, 0;
set Zeny, (Zeny + 50);
- set @barrel_tmp, 4;
- callfunc "SetBarrelMask";
+ set QL_ZEGAS, 4;
goto L_Close;
L_Thanks:
@@ -86,7 +77,7 @@ L_Close:
"No.", L_Close;
L_Reset:
- set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (0 << NIBBLE_4_SHIFT));
+ set QL_ZEGAS, 0;
set STARTAREA, STARTAREA &~ (1 << 20);
set STARTAREA, STARTAREA &~ (1 << 21);
set STARTAREA, STARTAREA &~ (1 << 22);
diff --git a/world/map/npc/029-2/_mobs.txt b/world/map/npc/029-2/_mobs.txt
index d6535efd..02d3fbd9 100644
--- a/world/map/npc/029-2/_mobs.txt
+++ b/world/map/npc/029-2/_mobs.txt
@@ -4,7 +4,7 @@
029-2,33,57,24,7|monster|HouseMaggot|1050,7,100000ms,30000ms,Mob029-2::On1050
-029-2,0,0,0|script|Mob029-2|-1
+029-2,0,0,0|script|Mob029-2|32767
{
end;
diff --git a/world/map/npc/029-2/barrels.txt b/world/map/npc/029-2/barrels.txt
index 4ff3e6de..39bd0ad3 100644
--- a/world/map/npc/029-2/barrels.txt
+++ b/world/map/npc/029-2/barrels.txt
@@ -2,7 +2,6 @@
// Author: Wushin
029-2,23,86,0|script|Barrel#0|400
{
- setarray @npc_loc, 23, 86, 2;
set @barrel, 0;
callfunc "CheckBarrel";
end;
@@ -14,49 +13,42 @@ OnMaggotDeath:
}
029-2,28,86,0|script|Barrel#1|400
{
- setarray @npc_loc, 28, 86, 2;
set @barrel, 1;
callfunc "CheckBarrel";
end;
}
029-2,31,91,0|script|Barrel#2|400
{
- setarray @npc_loc, 31, 91, 2;
set @barrel, 2;
callfunc "CheckBarrel";
end;
}
029-2,36,85,0|script|Barrel#3|400
{
- setarray @npc_loc, 36, 85, 2;
set @barrel, 3;
callfunc "CheckBarrel";
end;
}
029-2,40,89,0|script|Barrel#4|400
{
- setarray @npc_loc, 40, 89, 2;
set @barrel, 4;
callfunc "CheckBarrel";
end;
}
029-2,38,91,0|script|Barrel#5|400
{
- setarray @npc_loc, 38, 91, 2;
set @barrel, 5;
callfunc "CheckBarrel";
end;
}
029-2,29,92,0|script|Barrel#6|400
{
- setarray @npc_loc, 29, 92, 2;
set @barrel, 6;
callfunc "CheckBarrel";
end;
}
029-2,24,91,0|script|Barrel#7|400
{
- setarray @npc_loc, 24, 91, 2;
set @barrel, 7;
callfunc "CheckBarrel";
end;
diff --git a/world/map/npc/029-2/barrels_config.txt b/world/map/npc/029-2/barrels_config.txt
index 665903fb..8ad1cfd5 100644
--- a/world/map/npc/029-2/barrels_config.txt
+++ b/world/map/npc/029-2/barrels_config.txt
@@ -1,7 +1,7 @@
// Barrels
// Author: Wushin
029-2,33,88,24,7|monster|HouseMaggot|1050,2,100000ms,30000ms,Barrel#0::OnMaggotDeath
--|script|#BarrelConfig|-1
+-|script|#BarrelConfig|32767
{
end;
@@ -14,25 +14,13 @@ OnInit:
set $@BarrelMax, getarraysize($@BarrelBits);
end;
}
-function|script|SetBarrelMask
-{
- set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (@barrel_tmp << NIBBLE_4_SHIFT));
- set @barrel_tmp, 0;
- return;
-}
-function|script|CheckBarrelQuest
-{
- callfunc "CountBarrels";
- set @barrel_quest, ((STARTAREA & NIBBLE_4_MASK) >> NIBBLE_4_SHIFT);
- return;
-}
function|script|CountBarrels
{
set @barrel_count, 0;
set @count_tmp, 0;
goto L_Loop;
-L_Loop:
+L_Loop:
if (STARTAREA & $@BarrelBits[@barrel_count])
goto L_AddOne;
goto L_LoopAgain;
@@ -52,11 +40,10 @@ L_BarrelTally:
}
function|script|CheckBarrel
{
+ set @npc_distance, 2;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Range;
- callfunc "CheckBarrelQuest";
- if (!(@barrel_quest == 2))
+ if(@npc_check) goto L_Return;
+ if (!(QL_ZEGAS == 2))
goto L_NoI;
if (STARTAREA & $@BarrelBits[@barrel])
goto L_Empty;
@@ -71,10 +58,6 @@ function|script|CheckBarrel
goto L_Spawn;
goto L_Reward;
-L_Range:
- message strcharinfo(0), "You'll need to get closer.";
- goto L_Return;
-
L_NoI:
message strcharinfo(0), "Nothing interesting here.";
goto L_Return;
@@ -86,14 +69,15 @@ L_Empty:
L_QuestReward:
message strcharinfo(0), "You found the bug bomb.";
misceffect 33;
- set @barrel_tmp, 3;
- callfunc "SetBarrelMask";
+ set QL_ZEGAS, 3;
killmonster getmap() + "", "Barrel#0::OnMaggotDeath";
goto L_Return;
L_Spawn:
message strcharinfo(0), "Uck, More Maggots!";
- areamonster getmap() + "", @npc_loc[0], @npc_loc[1], (@npc_loc[0] + 1), (@npc_loc[1] + 1), $@BarrelSpawnName$, $@BarrelSpawnId, $@BarrelSpawnCnt, "Barrel#0::OnMaggotDeath";
+ setarray @npc_loc, getnpcx(), getnpcy();
+ areamonster getmap(), @npc_loc[0], @npc_loc[1], (@npc_loc[0] + 1), (@npc_loc[1] + 1), $@BarrelSpawnName$, $@BarrelSpawnId, $@BarrelSpawnCnt, "Barrel#0::OnMaggotDeath";
+ cleararray @npc_loc, 0, 2;
goto L_Return;
L_Reward:
diff --git a/world/map/npc/029-2/cynric.txt b/world/map/npc/029-2/cynric.txt
index d9f46d85..2a133e41 100644
--- a/world/map/npc/029-2/cynric.txt
+++ b/world/map/npc/029-2/cynric.txt
@@ -2,7 +2,6 @@
029-2,30,118,0|script|Cynric|161
{
- callfunc "ClearVariables";
set @npcname$, "Cynric";
callfunc "Banker";
close;
diff --git a/world/map/npc/029-2/morgan.txt b/world/map/npc/029-2/morgan.txt
index f6679f67..20000a11 100644
--- a/world/map/npc/029-2/morgan.txt
+++ b/world/map/npc/029-2/morgan.txt
@@ -3,18 +3,6 @@
// Gains Access to Magic School
// See 024-2 clean that shit up
// Morgan, liana
-function|script|MorganState
-{
- callfunc "ClearVariables";
- set @morgan, ((STARTAREA & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
- return;
-}
-function|script|SetMorganMask
-{
- set STARTAREA, (STARTAREA & ~(NIBBLE_3_MASK) | (@morgan_tmp << NIBBLE_3_SHIFT));
- set @morgan_tmp, 0;
- return;
-}
029-2,105,57,0|script|MorganDebug|355
{
mes "[Morgan Debug]";
@@ -23,7 +11,7 @@ function|script|SetMorganMask
"Yes.", L_Reset,
"No.", L_End;
L_Reset:
- set STARTAREA, (STARTAREA & ~(NIBBLE_3_MASK) | (0 << NIBBLE_3_SHIFT));
+ set QL_MORGAN, 0;
mes "Reset!";
goto L_End;
@@ -37,31 +25,28 @@ OnInit:
}
029-2,101,57,0|script|Morgan#_M|355
{
- setarray @npc_loc, 101, 57, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
- callfunc "MorganState";
- if (readparam(bInt) >= 5)
+ if(@npc_check) end;
+
+ if (Int >= 5)
goto L_Learn;
goto L_NotMagic;
L_Learn:
- if (@morgan == 0)
+ if (QL_MORGAN == 0)
goto L_NotSeen;
- if (@morgan == 1)
+ if (QL_MORGAN == 1)
goto L_Seen;
- if (@morgan == 2)
+ if (QL_MORGAN == 2)
goto L_Started;
- if (@morgan == 3)
+ if (QL_MORGAN == 3)
goto L_CastOnce;
- if (@morgan == 4)
+ if (QL_MORGAN == 4)
goto L_LearningDone;
goto L_Close;
L_NotSeen:
- set @morgan_tmp, 1;
- callfunc "SetMorganMask";
+ set QL_MORGAN, 1;
mes "[Morgan]";
mes "\"Welcome to the magic school of Candor\"";
mes "\"My name is Morgan, I'm Head of Wizardry.\"";
@@ -86,8 +71,7 @@ L_NotMagic:
goto L_Close;
L_Start:
- set @morgan_tmp, 2;
- callfunc "SetMorganMask";
+ set QL_MORGAN, 2;
mes "\"Great, lets begin your first lesson.\"";
getitem 1171, 1;
mes "\"This is a wand, there are many like it but this one is now yours.\"";
@@ -115,8 +99,9 @@ L_CastOnce:
mes "\"Each time you attack the wand will convert a bit of you mana into a magic bolt.\"";
mes "\"After so many attacks, you will need to recast the invocation to stay attuned to the wand.\"";
mes "\"(Logging out will also cancel any spell effects currently active in-game.).\"";
- set @morgan_tmp, 4;
- callfunc "SetMorganMask";
+ next;
+ mes "\"I've taught you all I can for now. You should visit the Mana Seed north west of Hurnscald.\"";
+ set QL_MORGAN, 4;
goto L_Close;
L_LearningDone:
diff --git a/world/map/npc/029-2/sorfina.txt b/world/map/npc/029-2/sorfina.txt
index 8becafd3..f083396c 100644
--- a/world/map/npc/029-2/sorfina.txt
+++ b/world/map/npc/029-2/sorfina.txt
@@ -2,19 +2,17 @@
// Author: Jenalya
029-2,27,27,0|script|Sorfina|154,0,1
{
- setarray @npc_loc, 27, 27, 2;
+ set @npc_distance, 2;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
+ if(@npc_check) end;
goto L_Main;
L_Main:
- callfunc "TutorialState";
- if (@tutorial == 10) goto L_Hasan;
- if (@tutorial >= 4) goto L_Again;
- if (@tutorial == 3) goto L_Clothes;
- if (@tutorial == 2) goto L_Dresser;
- if (@tutorial == 1) goto L_Carpet;
+ if (QL_BEGIN == 10) goto L_Hasan;
+ if (QL_BEGIN >= 4) goto L_Again;
+ if (QL_BEGIN == 3) goto L_Clothes;
+ if (QL_BEGIN == 2) goto L_Dresser;
+ if (QL_BEGIN == 1) goto L_Carpet;
goto L_Start;
L_Start:
@@ -60,8 +58,7 @@ L_Carpet:
mes "Press [###keyMoveUp;] to move up, press [###keyMoveDown;] to move down, ";
mes "press [###keyMoveLeft;] to move left, press [###keyMoveRight;] to move right ";
mes " or click on the place you want to go to.\"";
- set @tutorial_tmp, 1;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 1;
goto L_Close;
L_Dresser:
@@ -98,8 +95,7 @@ L_Clothes:
mes "\"And here is some money for you. Don't spend it all in one place.";
mes "Now go help Tanisha downstairs.\"";
set Zeny, Zeny + 30;
- set @tutorial_tmp, 4;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 4;
goto L_Close;
L_Again:
@@ -225,8 +221,7 @@ L_Next:
mes "\"If Valon hadn't have come along that moment, Hasan would have died that day.\"";
mes "\"However, the scorpions poison caused a bad fever and once Hasan had recovered from that, he was even more malicious than before.\"";
mes "She sighs.";
- set @tutorial_tmp, 11;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 11;
goto L_Close;
L_SkipTut:
@@ -246,27 +241,21 @@ L_Bye:
getitem "CottonShirt", 1;
getitem "RaggedShorts", 1;
set Zeny, Zeny + 35; // tanisha gives 5 zeny
- set @tutorial_tmp, 8;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 8;
goto L_Close;
L_Close:
close;
OnTouch:
- callfunc "TutorialState";
- if (@tutorial > 0)
+ if (QL_BEGIN > 0)
end;
goto L_Start;
}
029-2,33,27,0|script|#Carpet|32767,1,1
{
- end;
-
-OnTouch:
- callfunc "TutorialState";
- if (@tutorial != 1)
+ if (QL_BEGIN != 1)
end;
mes "[Sorfina]";
mes "\"You should get dressed now.\"";
@@ -274,20 +263,19 @@ OnTouch:
mes "\"To interact with things in your environment or talk to NPCs you can either click on it or press N to focus and T to talk/activate.\"";
next;
mes "\"Now get the clothes out of the dresser.\"";
- set @tutorial_tmp, 2;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 2;
close;
}
029-2,29,23,0|script|Dresser#tutorial|400
{
- setarray @npc_loc, 29, 23, 2;
+ set @npc_distance, 2;
+ set @distance_handler, 1;
callfunc "PCtoNPCRange";
if (@npc_check)
goto L_CloseDis;
- callfunc "TutorialState";
- if (@tutorial > 2) goto L_Empty;
- if (@tutorial == 2) goto L_Shirt;
+ if (QL_BEGIN > 2) goto L_Empty;
+ if (QL_BEGIN == 2) goto L_Shirt;
goto L_Walk;
L_Walk:
@@ -304,8 +292,7 @@ L_Shirt:
mes "\"You can open your inventory by pressing F3 or clicking on the 'Inventory' button in the bar at the upper right corner.\"";
next;
mes "\"After we finish talking, click on the clothes and press the equip button.\"";
- set @tutorial_tmp, 3;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 3;
close;
L_Empty:
@@ -319,11 +306,7 @@ L_CloseDis:
029-2,44,31,0|script|#DoorOutTut1|45,0,0
{
- end;
-
-OnTouch:
- callfunc "TutorialState";
- if (@tutorial < 4)
+ if (QL_BEGIN < 4)
goto L_Block;
warp "029-2", 112, 85;
end;
@@ -334,9 +317,6 @@ L_Block:
}
029-2,23,24,0|script|#GameRules1|32767,0,1
{
- end;
-
-OnTouch:
if (TUT_var > 0)
end;
mes "[Server/Client Notice]";
@@ -347,9 +327,6 @@ OnTouch:
}
029-2,21,24,0|script|#GameRules2|32767,0,1
{
- end;
-
-OnTouch:
if (TUT_var > 0)
end;
callfunc "GameRules";
diff --git a/world/map/npc/029-2/stat_reset.txt b/world/map/npc/029-2/stat_reset.txt
index 896bbf6b..6123f632 100644
--- a/world/map/npc/029-2/stat_reset.txt
+++ b/world/map/npc/029-2/stat_reset.txt
@@ -2,10 +2,9 @@
029-2,98,92,0|script|Jessie|159
{
- setarray @npc_loc, 98, 91, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
+ if(@npc_check) end;
+
if (BaseLevel >= 10)
goto L_Sorry;
diff --git a/world/map/npc/029-2/tanisha.txt b/world/map/npc/029-2/tanisha.txt
index 450bc77c..0a594410 100644
--- a/world/map/npc/029-2/tanisha.txt
+++ b/world/map/npc/029-2/tanisha.txt
@@ -4,23 +4,20 @@
029-2,110,88,0|script|Tanisha|114
{
- setarray @npc_loc, 110, 88, 4;
callfunc "PCtoNPCRange";
- if (@npc_check)
- goto L_Close;
+ if(@npc_check) end;
if (isin("029-2", 98, 84, 106, 89))
goto L_Fighting;
- callfunc "TutorialState";
- if (@tutorial >= 8) goto L_Tut_Done;
- if (@tutorial == 7) goto L_Stats;
- if (@tutorial == 6) goto L_Fail;
- if (@tutorial == 5) goto L_Maggots;
+ if (QL_BEGIN >= 8) goto L_Tut_Done;
+ if (QL_BEGIN == 7) goto L_Stats;
+ if (QL_BEGIN == 6) goto L_Fail;
+ if (QL_BEGIN == 5) goto L_Maggots;
mes "[Tanisha]";
mes "\"Hey! You're up again!\"";
- emotion EMOTE_HAPPY;
+ emotion EMOTE_HAPPY, strcharinfo(0);
mes "\"Are you feeling better?\"";
menu
"Yes, thank you.",L_Next,
@@ -30,8 +27,7 @@ L_Next:
mes "[Tanisha]";
mes "\"I'm glad you're feeling better. It was really bad luck what happened to you.";
mes "Hey, I have an idea.\"";
- set @tutorial_tmp, 5;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 5;
goto L_Maggots;
L_Maggots:
@@ -67,24 +63,21 @@ L_Fight_Again:
next;
mes "\"Sometimes dead monsters leave some useful things. You can pick them up by pressing [###keyPickup;] or clicking on the items with your mouse.\"";
close2;
- // The getitem must be in the same place as set @tutorial, 2;
+ // The getitem must be in the same place as set QL_BEGIN, 2;
// since it was moved to after L_Fight_Again, add it conditionally
- callfunc "TutorialState";
- if (@tutorial == 5)
+ if (QL_BEGIN == 5)
goto L_GetFightItems;
goto L_ContinueFight;
L_GetFightItems:
- set @tutorial_tmp, 6;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 6;
getitem "Knife", 1;
getitem "SlingShot", 1;
getitem "SlingBullet", 500;
goto L_ContinueFight;
L_ContinueFight:
- set @tutorial_tmp, 6;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 6;
set @Maggot_Kills, 0;
set @time, 0;
if (getareausers("029-2", 98, 84, 106, 89) == 0)
@@ -118,8 +111,7 @@ L_StatsRe:
mes "\"My Uncle sitting at the counter knows a spell to help the younglings reset their stats.\"";
mes "\"He also knows of mages with even more powerful reset spells.\"";
next;
- callfunc "TutorialState";
- if (@tutorial == 7)
+ if (QL_BEGIN == 7)
goto L_Money;
goto L_Advice;
@@ -128,8 +120,7 @@ L_Money:
mes "[Tanisha]";
mes "\"Hey, you are so smart taking out all that yucky maggots for me.";
mes "You can have my pocket money. Here.\"";
- set @tutorial_tmp, 8;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 8;
set Zeny, Zeny + 5;
next;
goto L_Advice;
@@ -137,7 +128,7 @@ L_Money:
L_Advice:
mes "\"When you go to Hurnscald, you should see Bernard. He can make a delicious soup!";
mes "Good luck!\"";
- emotion EMOTE_HAPPY;
+ emotion EMOTE_HAPPY, strcharinfo(0);
goto L_Close;
L_Explain:
@@ -263,8 +254,7 @@ OnMaggotDeath:
goto L_Summon;
// else, complete
warp "029-2", 110, 88;
- set @tutorial_tmp, 7;
- callfunc "SetTutorialMask";
+ set QL_BEGIN, 7;
set @Maggot_Kills, 0;
set @time, 0;
if (getareausers("029-2", 98, 84, 106, 89) == 0)
@@ -284,8 +274,7 @@ OnInit:
end;
OnTouch:
- callfunc "TutorialState";
- if (@tutorial >= 8)
+ if (QL_BEGIN >= 8)
goto L_Warp;
goto L_Block;
diff --git a/world/map/npc/029-3/_mobs.txt b/world/map/npc/029-3/_mobs.txt
index 61f8c33f..9a83bf7f 100644
--- a/world/map/npc/029-3/_mobs.txt
+++ b/world/map/npc/029-3/_mobs.txt
@@ -3,7 +3,7 @@
-029-3,0,0,0|script|Mob029-3|-1
+029-3,0,0,0|script|Mob029-3|32767
{
end;
}
diff --git a/world/map/npc/029-3/parua.txt b/world/map/npc/029-3/parua.txt
index 41e1fe8c..1ac59e0a 100644
--- a/world/map/npc/029-3/parua.txt
+++ b/world/map/npc/029-3/parua.txt
@@ -8,7 +8,7 @@
set @FIGHT_CAVE_ANNOUNCE_COST, 3000;
set @FIGHT_CAVE_ANNOUNCE_COST$, "3,000";
if ($@FIGHT_CAVE_STATUS == 1) goto L_Enjoy;
- if ($@FIGHT_CAVE_STATUS >= 2) goto L_Wait;
+ if ($@FIGHT_CAVE_STATUS >= 2 && $@ANNOUNCE_TIME > gettimetick(2)) goto L_Wait;
mes "[Parua]";
mes "\"Hello.\"";
next;
@@ -105,7 +105,7 @@ L_Enjoy:
goto L_Exit;
L_Wait:
- set @ms, ($@ANNOUNCE_TIME - gettimetick(2)) * 1000;
+ set @seconds, $@ANNOUNCE_TIME - gettimetick(2);
callfunc "HumanTime";
mes "[Parua]";
mes "\"Be Patient... The fight will start in " + @time$ + ".\"";
@@ -362,6 +362,7 @@ L_CleanUp:
donpcevent "#CandorAnnouncer::OnCommandTalk";
areatimer "029-3", 20, 20, 70, 60, 10, "Parua::OnReward";
set $@FIGHT_CAVE_STATUS, 0;
+ set $@ANNOUNCE_TIME, 0;
set $@FIGHT_CAVE_PAID, 0;
set $@FIGHT_CAVE_PLAYER_COUNT, 0;
set $@FIGHT_CAVE_LEVEL, 1;
diff --git a/world/map/npc/030-2/_mobs.txt b/world/map/npc/030-2/_mobs.txt
index 4e45ffc1..664e8111 100644
--- a/world/map/npc/030-2/_mobs.txt
+++ b/world/map/npc/030-2/_mobs.txt
@@ -3,7 +3,7 @@
-030-2,0,0,0|script|Mob030-2|-1
+030-2,0,0,0|script|Mob030-2|32767
{
end;
}
diff --git a/world/map/npc/030-2/eljas.txt b/world/map/npc/030-2/eljas.txt
index 82bdb120..76f1204f 100644
--- a/world/map/npc/030-2/eljas.txt
+++ b/world/map/npc/030-2/eljas.txt
@@ -5,6 +5,7 @@
{
callfunc "XmasStates";
callfunc "ThrowOutTheBum";
+ if(@getout) end;
goto L_Start;
L_Start:
@@ -201,6 +202,7 @@ L_End:
OnTouch:
callfunc "XmasStates";
callfunc "ThrowOutTheBum";
+ if(@getout) end;
if((@xmas_list_gather) || !($@xmas_time))
goto L_End;
goto L_Start;
diff --git a/world/map/npc/030-2/guards.txt b/world/map/npc/030-2/guards.txt
index 54a17465..5ed2e2e9 100644
--- a/world/map/npc/030-2/guards.txt
+++ b/world/map/npc/030-2/guards.txt
@@ -4,6 +4,7 @@
{
callfunc "XmasStates";
callfunc "ThrowOutTheBum";
+ if(@getout) end;
mes "[Valjas]";
mes "\"...\"";
close;
@@ -13,6 +14,7 @@
{
callfunc "XmasStates";
callfunc "ThrowOutTheBum";
+ if(@getout) end;
mes "[Halas]";
mes "\"...\"";
close;
@@ -22,6 +24,7 @@
{
callfunc "XmasStates";
callfunc "ThrowOutTheBum";
+ if(@getout) end;
mes "[Kilis]";
mes "\"...\"";
close;
diff --git a/world/map/npc/030-2/shipping_helper.txt b/world/map/npc/030-2/shipping_helper.txt
index 7c588cb6..92277278 100644
--- a/world/map/npc/030-2/shipping_helper.txt
+++ b/world/map/npc/030-2/shipping_helper.txt
@@ -115,5 +115,5 @@ L_Close:
mes "\"Ok, back to work you two, we have to make up lost time for your antics.\"";
set @wrap$, "";
set @present_name$, "";
- close;
+ return;
}
diff --git a/world/map/npc/030-3/_mobs.txt b/world/map/npc/030-3/_mobs.txt
index 2831fc8d..9d4b3b43 100644
--- a/world/map/npc/030-3/_mobs.txt
+++ b/world/map/npc/030-3/_mobs.txt
@@ -3,7 +3,7 @@
-030-3,0,0,0|script|Mob030-3|-1
+030-3,0,0,0|script|Mob030-3|32767
{
end;
}
diff --git a/world/map/npc/030-4/_mobs.txt b/world/map/npc/030-4/_mobs.txt
index f9ab4f5e..97ff93a8 100644
--- a/world/map/npc/030-4/_mobs.txt
+++ b/world/map/npc/030-4/_mobs.txt
@@ -3,7 +3,7 @@
-030-4,0,0,0|script|Mob030-4|-1
+030-4,0,0,0|script|Mob030-4|32767
{
end;
}
diff --git a/world/map/npc/030-4/mana_battery.txt b/world/map/npc/030-4/mana_battery.txt
index c57e5ea5..9a198c21 100644
--- a/world/map/npc/030-4/mana_battery.txt
+++ b/world/map/npc/030-4/mana_battery.txt
@@ -438,7 +438,7 @@ S_ClearVariables:
return;
}
-030-4,0,0,0|script|#XmasChamberCooler|-1
+030-4,0,0,0|script|#XmasChamberCooler|32767
{
end;
OnCommandCoolDown:
diff --git a/world/map/npc/031-1/_mobs.txt b/world/map/npc/031-1/_mobs.txt
index 26374da6..d5a747fb 100644
--- a/world/map/npc/031-1/_mobs.txt
+++ b/world/map/npc/031-1/_mobs.txt
@@ -7,7 +7,7 @@
031-1,0,0,0,0|monster|WhiteBell|1095,4,100000ms,30000ms,Mob031-1::On1095
-031-1,0,0,0|script|Mob031-1|-1
+031-1,0,0,0|script|Mob031-1|32767
{
end;
diff --git a/world/map/npc/031-1/angelaOutside.txt b/world/map/npc/031-1/angelaOutside.txt
index 17bfff00..322cbfb0 100644
--- a/world/map/npc/031-1/angelaOutside.txt
+++ b/world/map/npc/031-1/angelaOutside.txt
@@ -4,31 +4,61 @@
// state2 and state3: Cindy is saved Angela invites you to visit them for giving a reward
// state greater than 3: Angela invites and asks you to bring present boxes
-031-1,79,24,0|script|Angela|195
+031-1,81,24,0|script|Debug#Angela|195
{
- set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
- set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
+ mes "Current state: " + QL_CINDY;
+ mes "---";
+ mes "Available states:";
+ mes "0 - can not do the quest.";
+ mes "5 - does not have the quest.";
+ mes "6 - got the quest.";
+ mes "1 - can go rescue cindy.";
+ mes "2 - rescued cindy.";
+ mes "3 - got reward from cindy.";
+ mes "4 - got reward from angela.";
+ menu
+ "set state", L_Set,
+ "close", L_Close;
+
+L_Set:
+ input @state;
+ if(@state < 0 || @state > 6) set @state, 0;
+ set QL_CINDY, @state;
+ goto L_Close;
- set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
+L_Close:
+ close;
+
+OnInit:
+ if (!debug) disablenpc strnpcinfo(0);
+ end;
+}
+031-1,79,24,0|script|Angela|195,15,15
+{
set @minlevel, 70;
- if (@rescue_Cindy > 3) goto L_Please_Visit_Again;
- if (@rescue_Cindy > 1) goto L_Please_Visit;
- if (@rescue_Cindy == 1) goto L_Please_Help;
+ if (QL_CINDY == 3) goto L_Please_Visit_Again;
+ if (QL_CINDY > 1 && QL_CINDY < 5) goto L_Please_Visit;
+ if (QL_CINDY == 1) goto L_Please_Help;
mes "[Angela]";
mes "\"Please, I need help! My little daughter!\"";
next;
mes "\"It's terrible, oh my dear child!\"";
next;
- if (countitem("ConcentrationPotion") > 0 && BaseLevel >= @minlevel)
+ if (countitem("ConcentrationPotion") > 0 && BaseLevel >= @minlevel && QL_CINDY == 6)
goto L_Menu_Potion;
menu
"\"Please calm down and tell me what happened.\"", L_Whining,
"Leave", L_Close;
+OnTouch:
+ if(BaseLevel >= @minlevel && !QL_CINDY)
+ set QL_CINDY, 5;
+ end;
+
L_Whining:
mes "[Angela]";
mes "\"My poor little daughter, please! Oh no, oh no...\"";
@@ -50,6 +80,13 @@ L_Whining:
mes "She is crying and sobbing.";
next;
mes "It seems she is too upset to tell you anything helpful. If she would just calm down and concentrate a bit...";
+ if(BaseLevel >= @minlevel) goto L_GetQuest;
+ goto L_Close;
+
+L_GetQuest:
+ next;
+ set QL_CINDY, 6;
+ mes "Perhaps you could give her something to help concentrate ?";
goto L_Close;
L_Menu_Potion:
@@ -75,8 +112,7 @@ L_Calm_Down:
mes "\"Oh my poor little girl. I'm so worried - what might they do with her? Oh no!\"";
next;
mes "\"You look like an adventurer! Please, can you go in that cave and rescue my little Cindy? I beg you for help!\"";
- set @rescue_Cindy, 1;
- callsub S_Update_Mask;
+ set QL_CINDY, 1;
goto L_Close;
L_No_Potion:
@@ -103,15 +139,6 @@ L_Please_Visit_Again:
goto L_Close;
L_Close:
- set @Q_Nivalis_state_MASK, 0;
- set @Q_Nivalis_state_SHIFT, 0;
- set @rescue_Cindy, 0;
set @minlevel, 0;
close;
-
-S_Update_Mask:
- set QUEST_Nivalis_state,
- (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK))
- | (@rescue_Cindy << @Q_Nivalis_state_SHIFT);
- return;
}
diff --git a/world/map/npc/031-1/house.txt b/world/map/npc/031-1/house.txt
index c64009ba..f7ffb549 100644
--- a/world/map/npc/031-1/house.txt
+++ b/world/map/npc/031-1/house.txt
@@ -4,19 +4,10 @@
031-1,95,80,0|script|#Door|45,0,0
{
- set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
- set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
-
- set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
-
- if (@rescue_Cindy > 2)
+ if (QL_CINDY == 3 || QL_CINDY == 4)
goto L_Warp;
- message strcharinfo(0), "The door is locked.";
-
- set @Q_Nivalis_state_MASK, 0;
- set @Q_Nivalis_state_SHIFT, 0;
- set @rescue_Cindy, 0;
- close;
+ message strcharinfo(0), "##3Door : ##BThe door is locked.";
+ end;
L_Warp:
warp "031-2", 23, 28;
diff --git a/world/map/npc/031-2/_mobs.txt b/world/map/npc/031-2/_mobs.txt
index 61d16cc9..ab4d5c66 100644
--- a/world/map/npc/031-2/_mobs.txt
+++ b/world/map/npc/031-2/_mobs.txt
@@ -3,7 +3,7 @@
-031-2,0,0,0|script|Mob031-2|-1
+031-2,0,0,0|script|Mob031-2|32767
{
end;
}
diff --git a/world/map/npc/031-2/angelaHouse.txt b/world/map/npc/031-2/angelaHouse.txt
index 3fe6f023..11eeaff6 100644
--- a/world/map/npc/031-2/angelaHouse.txt
+++ b/world/map/npc/031-2/angelaHouse.txt
@@ -5,13 +5,8 @@
031-2,29,28,0|script|Angela#house|196
{
- set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
- set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
-
- set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
-
- if (@rescue_Cindy == 4) goto L_Hello_Again;
- if (@rescue_Cindy == 3) goto L_Reward;
+ if (QL_CINDY == 4) goto L_Hello_Again;
+ if (QL_CINDY == 3) goto L_Reward;
mes "...";
goto L_Close;
@@ -30,8 +25,7 @@ L_Reward:
if (@inventorylist_count == 100)
goto L_Full_Inv;
getitem "RockKnife", 1;
- set @rescue_Cindy, 4;
- callsub S_Update_Mask;
+ set QL_CINDY, 4;
next;
mes "\"I hope this will be useful for you.\"";
@@ -87,10 +81,6 @@ L_White:
goto L_Close;
L_Close:
- set @Q_Nivalis_state_MASK, 0;
- set @Q_Nivalis_state_SHIFT, 0;
- set @rescue_Cindy, 0;
-
set @dq_level, 0;
set @dq_cost, 0;
set @dq_count, 0;
@@ -100,10 +90,4 @@ L_Close:
set @dq_exp, 0;
set @dq_return, 0;
close;
-
-S_Update_Mask:
- set QUEST_Nivalis_state,
- (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK))
- | (@rescue_Cindy << @Q_Nivalis_state_SHIFT);
- return;
}
diff --git a/world/map/npc/031-2/cindyHouse.txt b/world/map/npc/031-2/cindyHouse.txt
index 5a1c20cc..c1f0c1e3 100644
--- a/world/map/npc/031-2/cindyHouse.txt
+++ b/world/map/npc/031-2/cindyHouse.txt
@@ -4,12 +4,7 @@
031-2,27,26,0|script|Cindy#house|197
{
- set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
- set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
-
- set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
-
- if (@rescue_Cindy > 2) goto L_Happy_Random;
+ if (QL_CINDY == 3 || QL_CINDY == 4) goto L_Happy_Random;
mes "...";
goto L_Close;
@@ -31,7 +26,7 @@ L_Happy_Random:
strcharinfo(0) + ", you are sooo strong! Amazing! But my dad is strong too!";
set @random, rand(9);
if (@random != 5)
- emotion EMOTE_HAPPY;
+ emotion EMOTE_HAPPY, strcharinfo(0);
set @quote$, "\"" + @quote_Cindy$[@random] + "\"";
mes "[Cindy]";
mes @quote$;
@@ -44,9 +39,6 @@ L_Candy:
goto L_Close;
L_Close:
- set @Q_Nivalis_state_MASK, 0;
- set @Q_Nivalis_state_SHIFT, 0;
- set @rescue_Cindy, 0;
set @candy, 0;
set @inventorylist_count, 0;
set @random, 0;
diff --git a/world/map/npc/031-3/_mobs.txt b/world/map/npc/031-3/_mobs.txt
index d22f769f..ccfb1199 100644
--- a/world/map/npc/031-3/_mobs.txt
+++ b/world/map/npc/031-3/_mobs.txt
@@ -92,7 +92,7 @@
031-3,52,285,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091
-031-3,0,0,0|script|Mob031-3|-1
+031-3,0,0,0|script|Mob031-3|32767
{
end;
diff --git a/world/map/npc/031-4/_mobs.txt b/world/map/npc/031-4/_mobs.txt
index 45fe61d8..cc2f2d21 100644
--- a/world/map/npc/031-4/_mobs.txt
+++ b/world/map/npc/031-4/_mobs.txt
@@ -3,7 +3,7 @@
-031-4,0,0,0|script|Mob031-4|-1
+031-4,0,0,0|script|Mob031-4|32767
{
end;
}
diff --git a/world/map/npc/031-4/cindyCave.txt b/world/map/npc/031-4/cindyCave.txt
index 218e4c08..68bb3f05 100644
--- a/world/map/npc/031-4/cindyCave.txt
+++ b/world/map/npc/031-4/cindyCave.txt
@@ -11,17 +11,12 @@
set @KEYS_AMOUNT, 10;
set @minlevel, 70;
- set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
- set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
-
- set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
-
if (Sex == 0) set @title$, "Misses";
if (Sex == 1) set @title$, "Mister";
- if (@rescue_Cindy >= 3) goto L_Please_Visit;
- if (@rescue_Cindy == 2) goto L_Reward;
- if (@rescue_Cindy == 1) goto L_Please_Help;
+ if (QL_CINDY == 4) goto L_Please_Visit;
+ if (QL_CINDY == 2) goto L_Reward;
+ if (QL_CINDY == 1) goto L_Please_Help;
mes "There is a little girl in a cage. As you come near, she starts to shiver and back off from you as far as she can in that small cage.";
next;
@@ -89,16 +84,14 @@ L_Reward:
if (@reward < 10)
goto L_Wizard_Hat;
getitem "WoodenStaff", 1;
- set @rescue_Cindy, 3;
- callsub S_Update_Mask;
+ set QL_CINDY, 3;
goto L_Visit;
L_Wizard_Hat:
// get a wizard hat in one of the ten colors - no white
setarray @wizardhats, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209;
getitem @wizardhats[@reward], 1;
- set @rescue_Cindy, 3;
- callsub S_Update_Mask;
+ set QL_CINDY, 3;
goto L_Visit;
L_Visit:
@@ -126,9 +119,6 @@ L_Full_Inv:
L_Close:
set @KEYS_AMOUNT, 0;
- set @Q_Nivalis_state_MASK, 0;
- set @Q_Nivalis_state_SHIFT, 0;
- set @rescue_Cindy, 0;
set @title$, "";
set @minlevel, 0;
set @inventorylist_count, 0;
@@ -216,13 +206,9 @@ OnReward:
set @bonus, (BaseLevel/2);
set DailyQuestBonus, DailyQuestBonus + @bonus;
message strcharinfo(0), "You feel a temporary rush of power and zest for action. " + @bonus + " daily bonus gained." ;
- set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
- set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
- set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
- if (@rescue_Cindy != 1 )
+ if (QL_CINDY != 1 )
goto L_End;
- set @rescue_Cindy, 2;
- callsub S_Update_Mask;
+ set QL_CINDY, 2;
message strcharinfo(0), "Cindy looks relieved and as if she wants to talk with you.";
set BOSS_POINTS, BOSS_POINTS + 70;
message strcharinfo(0), "You gain 70 Boss Points giving you a total of " + BOSS_POINTS + ".";
@@ -230,9 +216,6 @@ OnReward:
L_End:
set @bonus, 0;
- set @Q_Nivalis_state_MASK, 0;
- set @Q_Nivalis_state_SHIFT, 0;
- set @rescue_Cindy, 0;
end;
OnInit:
@@ -250,11 +233,4 @@ OnInit:
"Cindy : Watch your back! There are so many of them!",
"Cindy : This seems to be their final attack! I believe in you!";
end;
-
-/////////
-S_Update_Mask:
- set QUEST_Nivalis_state,
- (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK))
- | (@rescue_Cindy << @Q_Nivalis_state_SHIFT);
- return;
}
diff --git a/world/map/npc/032-3/_mobs.txt b/world/map/npc/032-3/_mobs.txt
index b1a0c1d4..2e336d50 100644
--- a/world/map/npc/032-3/_mobs.txt
+++ b/world/map/npc/032-3/_mobs.txt
@@ -13,7 +13,7 @@
032-3,0,0,0,0|monster|Bat|1017,25,30000ms,100000ms,Mob032-3::On1017
-032-3,0,0,0|script|Mob032-3|-1
+032-3,0,0,0|script|Mob032-3|32767
{
end;
diff --git a/world/map/npc/033-1/_mobs.txt b/world/map/npc/033-1/_mobs.txt
index 6f86b16a..afbd35ed 100644
--- a/world/map/npc/033-1/_mobs.txt
+++ b/world/map/npc/033-1/_mobs.txt
@@ -7,7 +7,7 @@
033-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms,Mob033-1::On1095
-033-1,0,0,0|script|Mob033-1|-1
+033-1,0,0,0|script|Mob033-1|32767
{
end;
diff --git a/world/map/npc/033-1/barbarianinit.txt b/world/map/npc/033-1/barbarianinit.txt
index bf044bab..2523ebae 100644
--- a/world/map/npc/033-1/barbarianinit.txt
+++ b/world/map/npc/033-1/barbarianinit.txt
@@ -1,4 +1,4 @@
--|script|#barbarian033_1init|-1
+-|script|#barbarian033_1init|32767
{
end;
diff --git a/world/map/npc/033-1/traveler.txt b/world/map/npc/033-1/traveler.txt
index 681a4100..462e2586 100644
--- a/world/map/npc/033-1/traveler.txt
+++ b/world/map/npc/033-1/traveler.txt
@@ -4,7 +4,7 @@
033-1,63,30,0|script|Khoenan the Traveler|103
{
- set @NpcName$, "Khoenan";
+ set @npcname$, "Khoenan";
set @NpcTravelBit, $@barbarians_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/034-1/_mobs.txt b/world/map/npc/034-1/_mobs.txt
index 0b2cc9b5..e02e496b 100644
--- a/world/map/npc/034-1/_mobs.txt
+++ b/world/map/npc/034-1/_mobs.txt
@@ -9,7 +9,7 @@
034-1,1,1,0,0|monster|IceGoblin|1058,25,100000ms,30000ms,Mob034-1::On1058
-034-1,0,0,0|script|Mob034-1|-1
+034-1,0,0,0|script|Mob034-1|32767
{
end;
diff --git a/world/map/npc/034-2/_mobs.txt b/world/map/npc/034-2/_mobs.txt
index c7fe5fe1..709fcb08 100644
--- a/world/map/npc/034-2/_mobs.txt
+++ b/world/map/npc/034-2/_mobs.txt
@@ -3,7 +3,7 @@
-034-2,0,0,0|script|Mob034-2|-1
+034-2,0,0,0|script|Mob034-2|32767
{
end;
}
diff --git a/world/map/npc/035-2/_mobs.txt b/world/map/npc/035-2/_mobs.txt
index 7f718921..899a8d04 100644
--- a/world/map/npc/035-2/_mobs.txt
+++ b/world/map/npc/035-2/_mobs.txt
@@ -3,7 +3,7 @@
-035-2,0,0,0|script|Mob035-2|-1
+035-2,0,0,0|script|Mob035-2|32767
{
end;
}
diff --git a/world/map/npc/036-2/_mobs.txt b/world/map/npc/036-2/_mobs.txt
index 3d4e9883..0cebfbc8 100644
--- a/world/map/npc/036-2/_mobs.txt
+++ b/world/map/npc/036-2/_mobs.txt
@@ -3,7 +3,7 @@
-036-2,0,0,0|script|Mob036-2|-1
+036-2,0,0,0|script|Mob036-2|32767
{
end;
}
diff --git a/world/map/npc/043-3/_mobs.txt b/world/map/npc/043-3/_mobs.txt
index 44c6c10f..085615a4 100644
--- a/world/map/npc/043-3/_mobs.txt
+++ b/world/map/npc/043-3/_mobs.txt
@@ -12,7 +12,7 @@
043-3,94,44,40,18|monster|GreenSlime|1005,5,30000ms,15000ms,Mob043-3::On1005
-043-3,0,0,0|script|Mob043-3|-1
+043-3,0,0,0|script|Mob043-3|32767
{
end;
diff --git a/world/map/npc/043-4/_mobs.txt b/world/map/npc/043-4/_mobs.txt
index 1ebb5b99..a06642d0 100644
--- a/world/map/npc/043-4/_mobs.txt
+++ b/world/map/npc/043-4/_mobs.txt
@@ -25,7 +25,7 @@
043-4,133,123,30,23|monster|Troll|1054,3,100000ms,50000ms,Mob043-4::On1054
-043-4,0,0,0|script|Mob043-4|-1
+043-4,0,0,0|script|Mob043-4|32767
{
end;
diff --git a/world/map/npc/045-1/_mobs.txt b/world/map/npc/045-1/_mobs.txt
index 7502a8c3..37357556 100644
--- a/world/map/npc/045-1/_mobs.txt
+++ b/world/map/npc/045-1/_mobs.txt
@@ -18,7 +18,7 @@
045-1,104,149,79,10|monster|IceGoblin|1058,4,100000ms,30000ms,Mob045-1::On1058
-045-1,0,0,0|script|Mob045-1|-1
+045-1,0,0,0|script|Mob045-1|32767
{
end;
diff --git a/world/map/npc/046-1/_mobs.txt b/world/map/npc/046-1/_mobs.txt
index 90bc7a5f..d5551ecd 100644
--- a/world/map/npc/046-1/_mobs.txt
+++ b/world/map/npc/046-1/_mobs.txt
@@ -14,7 +14,7 @@
046-1,145,67,10,9|monster|Wolvern|1090,2,100000ms,30000ms,Mob046-1::On1090
-046-1,0,0,0|script|Mob046-1|-1
+046-1,0,0,0|script|Mob046-1|32767
{
end;
diff --git a/world/map/npc/046-3/_mobs.txt b/world/map/npc/046-3/_mobs.txt
index 5d82dc0e..95c498ed 100644
--- a/world/map/npc/046-3/_mobs.txt
+++ b/world/map/npc/046-3/_mobs.txt
@@ -18,7 +18,7 @@
046-3,113,48,12,8|monster|Yeti|1072,2,100000ms,30000ms,Mob046-3::On1072
-046-3,0,0,0|script|Mob046-3|-1
+046-3,0,0,0|script|Mob046-3|32767
{
end;
diff --git a/world/map/npc/047-1/_mobs.txt b/world/map/npc/047-1/_mobs.txt
index fd2ca939..a502dcdf 100644
--- a/world/map/npc/047-1/_mobs.txt
+++ b/world/map/npc/047-1/_mobs.txt
@@ -25,7 +25,7 @@
047-1,132,70,4,5|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-1::On1091
-047-1,0,0,0|script|Mob047-1|-1
+047-1,0,0,0|script|Mob047-1|32767
{
end;
diff --git a/world/map/npc/047-3/_mobs.txt b/world/map/npc/047-3/_mobs.txt
index 3ceb7884..adf84729 100644
--- a/world/map/npc/047-3/_mobs.txt
+++ b/world/map/npc/047-3/_mobs.txt
@@ -24,7 +24,7 @@
047-3,121,172,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093
-047-3,0,0,0|script|Mob047-3|-1
+047-3,0,0,0|script|Mob047-3|32767
{
end;
diff --git a/world/map/npc/048-2/_mobs.txt b/world/map/npc/048-2/_mobs.txt
index 0c85dbac..87b5b1d4 100644
--- a/world/map/npc/048-2/_mobs.txt
+++ b/world/map/npc/048-2/_mobs.txt
@@ -3,7 +3,7 @@
-048-2,0,0,0|script|Mob048-2|-1
+048-2,0,0,0|script|Mob048-2|32767
{
end;
}
diff --git a/world/map/npc/048-2/bluesageConfig.txt b/world/map/npc/048-2/bluesageConfig.txt
index 0aeda5fc..9ab3e711 100644
--- a/world/map/npc/048-2/bluesageConfig.txt
+++ b/world/map/npc/048-2/bluesageConfig.txt
@@ -51,7 +51,7 @@
// Bit 0: started the subquest
// Bit 1 - 7: each spawn point is unique and saved with a flag
--|script|#bluesageconfig|-1
+-|script|#bluesageconfig|32767
{
end;
@@ -72,9 +72,6 @@ OnInit:
set $@Q_BlueSageMaterialClaw, 0x400;
set $@Q_BlueSageMaterialInk, 0x800;
- set $@Q_BlueSageInvestigate_MASK, NIBBLE_3_MASK;
- set $@Q_BlueSageInvestigate_SHIFT, NIBBLE_3_SHIFT;
-
set $@Q_BlueSageSlimes_MASK, BYTE_2_MASK;
set $@Q_BlueSageSlimes_SHIFT, BYTE_2_SHIFT;
set $@Q_BlueSageSlimesStart, 0x010000;
@@ -103,12 +100,6 @@ function|script|updateBlueSageBookPages
return;
}
-function|script|updateBlueSageInvestigate
-{
- set QUEST_BlueSage, (QUEST_BlueSage & ~($@Q_BlueSageInvestigate_MASK) | (@investigate << $@Q_BlueSageInvestigate_SHIFT));
- return;
-}
-
function|script|blueSageNumberOfClearedNests
{
set @slimenests, 0;
diff --git a/world/map/npc/048-2/helperAccused.txt b/world/map/npc/048-2/helperAccused.txt
index 92043705..7be0c0ad 100644
--- a/world/map/npc/048-2/helperAccused.txt
+++ b/world/map/npc/048-2/helperAccused.txt
@@ -4,17 +4,15 @@
// Peetu is the person who caused the accident
// involved investigation subquest
-048-2,25,135,0|script|Peetu|366
+048-2,25,135,0|script|Peetu|130
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
-
- if (@investigate >= 12) goto L_Thank;
- if (@investigate > 4) goto L_Investigate;
- if (@investigate > 1) goto L_Query;
- if (@investigate == 1) goto L_Help;
+ if (QL_BSAGE_INVESTIGATE == 12) goto L_Thank;
+ if (QL_BSAGE_INVESTIGATE > 4 && QL_BSAGE_INVESTIGATE < 13) goto L_Investigate;
+ if (QL_BSAGE_INVESTIGATE > 1 && QL_BSAGE_INVESTIGATE < 13) goto L_Query;
+ if (QL_BSAGE_INVESTIGATE == 1) goto L_Help;
mes "You see a rather stressed helper, mumbling to himself.";
- if (BaseLevel < $@Q_BlueSageMinimumLevel)
+ if (BaseLevel < $@Q_BlueSageMinimumLevel || !QL_BSAGE_INVESTIGATE)
goto L_Close;
mes "[Peetu]";
mes "\"How could this have happened? I don't understand it... I'm sure I did the sealing correctly. Maybe the ingredients... but that doesn't make sense. They're checked regularly and...\"";
@@ -54,8 +52,7 @@ L_Less:
mes "[Peetu]";
mes "\"Well... but... I mean... I don't know... ";
mes "I have an idea! Would you... ahm, would you talk to Chief Oskari for me? And ask him what he plans to do about me? I... I just don't feel capable of doing that myself right now. I'll try to pull myself together in the meanwhile.\"";
- set @investigate, 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, 1;
goto L_Close;
L_Help:
@@ -106,14 +103,13 @@ L_TextWall:
next;
mes "\"I never tried it, because it makes no sense to do that, but theoretically adding some Silk Cocoons could have such an effect. That's pretty basic nature magic.";
mes "But... how would that have gotten into the ingredients?\"";
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Investigate:
mes "[Peetu]";
mes "\"Hello. Did you find out anything else yet?\"";
- if (@investigate != 11)
+ if (QL_BSAGE_INVESTIGATE != 11)
menu
"I'm still collecting information.",L_Close;
if (@inventorylist_count == 100)
@@ -129,9 +125,8 @@ L_ReallyMore:
mes "I mean, this is alarming news, but I'm so glad that this isn't my fault and that he feels I deserve to keep my job.\"";
next;
mes "\"It isn't much, but please take these Silk Gloves. We use those when we have to protect our hands, but still need to perform magic.\"";
+ set QL_BSAGE_INVESTIGATE, 12;
getitem "SilkGloves", 1;
- set @investigate, 12;
- callfunc "updateBlueSageInvestigate";
goto L_Close;
L_Thank:
@@ -145,7 +140,6 @@ L_TooMany:
goto L_Close;
L_Close:
- set @investigate, 0;
set @inventorylist_count, 0;
close;
}
diff --git a/world/map/npc/048-2/helperBookpages1.txt b/world/map/npc/048-2/helperBookpages1.txt
index 519c6279..11dd1054 100644
--- a/world/map/npc/048-2/helperBookpages1.txt
+++ b/world/map/npc/048-2/helperBookpages1.txt
@@ -6,7 +6,6 @@
048-2,104,86,0|script|Ensio|365
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @bookpages, ((QUEST_BlueSage & $@Q_BlueSageBookPages_MASK) >> $@Q_BlueSageBookPages_SHIFT);
set @old_bookpage_exp, 1000;
@@ -98,9 +97,9 @@ L_NoItem:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -125,10 +124,9 @@ L_Visitor:
next;
mes "\"He was looking around in the library a while, and then came to ask about our research. He seemed to be particularly interested in our experiments with the slimes.";
mes "Heh, I wonder what he would've said if he'd have visited us a little bit later. Mh, now that I think about it, the accident with the slimes happened just the night after he was here.\"";
- if ((@investigate != 3) && (@investigate != 6) && (@investigate != 9))
+ if ((QL_BSAGE_INVESTIGATE != 3) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 9))
goto L_Close;
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
goto L_Close;
L_Helper:
@@ -137,7 +135,6 @@ L_Helper:
goto L_Close;
L_Close:
- set @investigate, 0;
set @bookpages, 0;
set @old_bookpage_exp, 0;
set @new_bookpage_exp, 0;
diff --git a/world/map/npc/048-2/helperBookpages2.txt b/world/map/npc/048-2/helperBookpages2.txt
index 0b37e060..17de49d5 100644
--- a/world/map/npc/048-2/helperBookpages2.txt
+++ b/world/map/npc/048-2/helperBookpages2.txt
@@ -6,7 +6,6 @@
048-2,94,86,0|script|Henriikka|363
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @bookpages, ((QUEST_BlueSage & $@Q_BlueSageBookPages_MASK) >> $@Q_BlueSageBookPages_SHIFT);
if (@bookpages == 31) goto L_Thank;
@@ -51,9 +50,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -85,7 +84,6 @@ L_Helper:
goto L_Close;
L_Close:
- set @investigate, 0;
set @bookpages, 0;
close;
}
diff --git a/world/map/npc/048-2/helperBookpages3.txt b/world/map/npc/048-2/helperBookpages3.txt
index 20d173e6..c519b139 100644
--- a/world/map/npc/048-2/helperBookpages3.txt
+++ b/world/map/npc/048-2/helperBookpages3.txt
@@ -6,7 +6,6 @@
048-2,99,87,0|script|Teuvo|366
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @bookpages, ((QUEST_BlueSage & $@Q_BlueSageBookPages_MASK) >> $@Q_BlueSageBookPages_SHIFT);
if (@bookpages == 31) goto L_Thank;
@@ -28,9 +27,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -58,14 +57,12 @@ L_Helper:
mes "[Teuvo]";
mes "\"Peetu? He's one of those magic wielders who think they can do anything. Heh, you see the result here.";
mes "But to be fair, from what I've seen Peetu was always very attentive and dutiful.\"";
- if ((@investigate != 5) && (@investigate != 6) && (@investigate != 7))
+ if ((QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 7))
goto L_Close;
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Close:
- set @investigate, 0;
set @bookpages, 0;
close;
}
diff --git a/world/map/npc/048-2/helperChief.txt b/world/map/npc/048-2/helperChief.txt
index 7eae6f63..5f095aa5 100644
--- a/world/map/npc/048-2/helperChief.txt
+++ b/world/map/npc/048-2/helperChief.txt
@@ -4,17 +4,15 @@
// Chief of the Blue Sage helpers
// involved in investigation subquest
-048-2,146,26,0|script|Oskari|365
+048-2,146,26,0|script|Oskari|134
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
-
- if (@investigate >= 11) goto L_Goodjob;
- if (@investigate > 1) goto L_Investigate;
+ if (QL_BSAGE_INVESTIGATE >= 11 && QL_BSAGE_INVESTIGATE < 13) goto L_Goodjob;
+ if (QL_BSAGE_INVESTIGATE > 1 && QL_BSAGE_INVESTIGATE < 13) goto L_Investigate;
mes "[Oskari]";
mes "\"Hello. Welcome to the residence of the Great Nikolai.";
mes "You have to excuse me, as you might have heard we're having some trouble at the moment and I, as Chief of Nikolai's helpers, have a lot to do.\"";
- if (@investigate == 0)
+ if (QL_BSAGE_INVESTIGATE == 0)
goto L_Close;
menu
"Peetu asked me to talk to you about his mishap.",L_Next,
@@ -37,14 +35,13 @@ L_Next:
mes "Oh, and please tell him that I'm not considering firing him in the current situation. You might need that to calm him down and get meaningful information.\"";
next;
mes "\"You should find out if someone observed anything unusual during the time before the accident happened.\"";
- set @investigate, 2;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, 2;
goto L_Close;
L_Investigate:
mes "[Oskari]";
mes "\"Ah, hello. Did you get an overview over the happenings yet?\"";
- if (@investigate != 10)
+ if (QL_BSAGE_INVESTIGATE != 10)
menu
"I'm still collecting information.",L_Close;
next;
@@ -78,8 +75,7 @@ L_Continue:
mes "\"You were a great help! I'll inform Nikolai about your involvement in clarifying this matter.\"";
next;
mes "\"And you should also talk with Peetu, I'm sure he'll be relieved to hear about the clarification of this matter too.\"";
- set @investigate, 11;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, 11;
goto L_Close;
L_Goodjob:
@@ -123,6 +119,5 @@ L_Conflict:
goto L_Close;
L_Close:
- set @investigate, 0;
close;
}
diff --git a/world/map/npc/048-2/helperCleaning1.txt b/world/map/npc/048-2/helperCleaning1.txt
index d60aa16f..3b5af0dc 100644
--- a/world/map/npc/048-2/helperCleaning1.txt
+++ b/world/map/npc/048-2/helperCleaning1.txt
@@ -7,7 +7,6 @@
048-2,117,106,0|script|Pyry|365
{
set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
if (@slimes == 255) goto L_Thank;
if (@slimes > 0) goto L_Progress;
@@ -63,9 +62,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -94,14 +93,12 @@ L_Helper:
mes "\"Peetu? I have always been glad to have him on the team. He's really brought forward our work here.\"";
next;
mes "\"I was very surprised when I heard that he's responsible for the failed sealing spell. I'd never have expected that from him.\"";
- if ((@investigate != 5) && (@investigate != 6) && (@investigate != 7))
+ if ((QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 7))
goto L_Close;
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Close:
- set @investigate, 0;
set @slimes, 0;
close;
}
diff --git a/world/map/npc/048-2/helperCleaning2.txt b/world/map/npc/048-2/helperCleaning2.txt
index 40339364..cdd04c00 100644
--- a/world/map/npc/048-2/helperCleaning2.txt
+++ b/world/map/npc/048-2/helperCleaning2.txt
@@ -7,7 +7,6 @@
048-2,123,87,0|script|Nea|363
{
set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
if (@slimes == 255) goto L_Thank;
if (@slimes > 0) goto L_Progress;
@@ -32,9 +31,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -63,14 +62,12 @@ L_Helper:
mes "\"Peetu? Yeah, he's the kind of person who always wants to do things perfectly. That makes it a bit difficult to work with him, since his expectations for others are as high as for himself.\"";
next;
mes "\"I really wonder how that accident with the sealing spell could've happened. I'd have never expected him to mess something up like that.\"";
- if ((@investigate != 5) && (@investigate != 6) && (@investigate != 7))
+ if ((QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 7))
goto L_Close;
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Close:
- set @investigate, 0;
set @slimes, 0;
close;
}
diff --git a/world/map/npc/048-2/helperCleaning3.txt b/world/map/npc/048-2/helperCleaning3.txt
index d1ed35a5..110189cc 100644
--- a/world/map/npc/048-2/helperCleaning3.txt
+++ b/world/map/npc/048-2/helperCleaning3.txt
@@ -7,7 +7,6 @@
048-2,139,99,0|script|Arvo|366
{
set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
if (@slimes == 255) goto L_Thank;
if (@slimes > 0) goto L_Progress;
@@ -34,9 +33,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -62,10 +61,9 @@ L_Visitor:
mes "\"But when I left him to look at the books on his own, he sneaked over to the workshop area. Visitors are allowed to have a look there, but only if they don't interfere with any research and experiments. But it seems he was being rather disturbing, since they sent them back to the library part.\"";
next;
mes "\"I tried to keep an eye on him after that, but when I got distracted by some newly arriving visitor he went over to the workshop again! Usually I enjoy my job, because I like talking to people, but this guy... was a pain, really.\"";
- if ((@investigate != 3) && (@investigate != 6) && (@investigate != 9))
+ if ((QL_BSAGE_INVESTIGATE != 3) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 9))
goto L_Close;
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
goto L_Close;
L_Helper:
@@ -74,7 +72,6 @@ L_Helper:
goto L_Close;
L_Close:
- set @investigate, 0;
set @slimes, 0;
close;
}
diff --git a/world/map/npc/048-2/helperCleaning4.txt b/world/map/npc/048-2/helperCleaning4.txt
index 6b795b84..45108932 100644
--- a/world/map/npc/048-2/helperCleaning4.txt
+++ b/world/map/npc/048-2/helperCleaning4.txt
@@ -7,7 +7,6 @@
048-2,131,119,0|script|Kristian|366
{
set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
if (@slimes == 255) goto L_Thank;
if (@slimes > 0) goto L_Progress;
@@ -27,9 +26,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -53,10 +52,9 @@ L_Visitor:
mes "\"Oh, there was such a visitor, yes. Strange guy, and didn't really know how to behave. He sneaked into the workshop area all the time, I think he was rather curious about the things going on there.\"";
next;
mes "\"But still, he can't just walk in there, fiddle with the experiments and disturb the helpers doing their work.\"";
- if ((@investigate != 3) && (@investigate != 6) && (@investigate != 9))
+ if ((QL_BSAGE_INVESTIGATE != 3) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 9))
goto L_Close;
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
goto L_Close;
L_Helper:
@@ -65,7 +63,6 @@ L_Helper:
goto L_Close;
L_Close:
- set @investigate, 0;
set @slimes, 0;
close;
}
diff --git a/world/map/npc/048-2/helperCleaning5.txt b/world/map/npc/048-2/helperCleaning5.txt
index 9af27425..9517fde3 100644
--- a/world/map/npc/048-2/helperCleaning5.txt
+++ b/world/map/npc/048-2/helperCleaning5.txt
@@ -6,7 +6,6 @@
048-2,100,125,0|script|Mirjami|363
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
if (@slimes == 255) goto L_Thank;
@@ -29,9 +28,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -55,10 +54,9 @@ L_Visitor:
mes "\"Ohh, I think I know who you mean. That was a strange guy. He always came over here in the workshop, said he's very interested in the research. I suppose that's ok, but he didn't keep his hands to himself, and touched some experiments and I caught him near some storage racks.\"";
next;
mes "\"Visitors should keep away from those!\"";
- if ((@investigate != 3) && (@investigate != 6) && (@investigate != 9))
+ if ((QL_BSAGE_INVESTIGATE != 3) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 9))
goto L_Close;
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
goto L_Close;
L_Helper:
@@ -67,7 +65,6 @@ L_Helper:
goto L_Close;
L_Close:
- set @investigate, 0;
set @slimes, 0;
close;
}
diff --git a/world/map/npc/048-2/helperJanitor.txt b/world/map/npc/048-2/helperJanitor.txt
index 0d0d884b..817ac165 100644
--- a/world/map/npc/048-2/helperJanitor.txt
+++ b/world/map/npc/048-2/helperJanitor.txt
@@ -4,14 +4,31 @@
// Elias is the janitor of the mansion
// part of investigation subquest, gives initial hint on the visitor with the mask
-048-2,40,41,0|script|Elias|365
+048-2,36,44,0|script|Debug#BlueSage|110
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
+ mes "QUEST_BlueSage: "+ QUEST_BlueSage;
+ mes "QL_BSAGE_INVESTIGATE: "+ QL_BSAGE_INVESTIGATE;
+ next;
+ menu
+ "set QL_BSAGE_INVESTIGATE", L_Investigate;
+
+L_Investigate:
+ input @state;
+ if(@state < 0 || @state > 14) set @state, 0;
+ set QL_BSAGE_INVESTIGATE, @state;
+ close;
- if (@investigate == 11) goto L_Thank;
- if ((@investigate == 4) || (@investigate == 7) || (@investigate == 10)) goto L_Confirmed;
- if ((@investigate == 3) || (@investigate == 6) || (@investigate == 9)) goto L_Worry;
- if (QUEST_BlueSage > 0) goto L_ShortHello;
+OnInit:
+ if (!debug) disablenpc strnpcinfo(0);
+ end;
+}
+
+048-2,40,41,0|script|Elias|110,7,6
+{
+ if (QL_BSAGE_INVESTIGATE == 11) goto L_Thank;
+ if ((QL_BSAGE_INVESTIGATE == 4) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Confirmed;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 9)) goto L_Worry;
+ if (QUEST_BlueSage > 0 && QL_BSAGE_INVESTIGATE < 13) goto L_ShortHello;
mes "[Elias]";
mes "\"Welcome to the residence of Nikolai, member of the Sages of Kaizei.\"";
@@ -25,15 +42,22 @@
mes "[Elias]";
mes "\"So, if you came because of the library, I'll have to disappoint you, because there isn't much left.";
mes "Though you look like a skilled adventurer. If you'd like to offer your help that'd be greatly appreciated.\"";
+ if(QL_BSAGE_INVESTIGATE == 13)
+ set QL_BSAGE_INVESTIGATE, 14;
next;
mes "\"The library is on the third floor.\"";
goto L_Close;
+OnTouch:
+ if (BaseLevel >= $@Q_BlueSageMinimumLevel && !QL_BSAGE_INVESTIGATE)
+ set QL_BSAGE_INVESTIGATE, 13;
+ end;
+
L_ShortHello:
mes "[Elias]";
mes "\"Welcome back. I heard you're helping with the cleanup efforts in the library.";
mes "Thank you very much.\"";
- if ((@investigate != 2) && (@investigate != 5) && (@investigate != 8))
+ if ((QL_BSAGE_INVESTIGATE != 2) && (QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 8))
goto L_Close;
menu
"Can you tell me if there were any unusual visitors before the accident?",L_Next;
@@ -48,8 +72,7 @@ L_Next:
mes "[Elias]";
mes "\"Do you think he may have had something to do with the accident? We're a very hospitable house, so I didn't see a reason to deny him the entrance. I mean, his mask might have been a bit unusual, but hey, there could've been many reasons why someone would wear a mask, don't you think?\"";
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
menu
"Sure, but it's interesting that he was here shortly before the accident.",L_Close,
@@ -76,6 +99,5 @@ L_Thank:
goto L_Close;
L_Close:
- set @investigate, 0;
close;
}
diff --git a/world/map/npc/048-2/helperMInk.txt b/world/map/npc/048-2/helperMInk.txt
index 220ef484..72978b03 100644
--- a/world/map/npc/048-2/helperMInk.txt
+++ b/world/map/npc/048-2/helperMInk.txt
@@ -6,7 +6,6 @@
048-2,95,103,0|script|Eevert|365
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @water_amount, 5;
set @spectre_amount, 3;
set @poltergeist_amount, 3;
@@ -60,9 +59,9 @@ L_NoItem:
goto L_Close;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -91,14 +90,12 @@ L_Helper:
mes "\"Ah, Peetu. I really appreciate his sense for high quality work. The requirements to become a helper of a sage are already high, but Peetu is outstanding. He has a talent for magic and combined with his diligence, it's quite remarkable.\"";
next;
mes "\"That's why I'm really confused about this situation, since he was the one performing the sealing of the slimes. I wonder what went wrong.\"";
- if ((@investigate != 5) && (@investigate != 6) && (@investigate != 7))
+ if ((QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 7))
goto L_Close;
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Close:
- set @investigate, 0;
set @water_amount, 0;
set @spectre_amount, 0;
set @poltergeist_amount, 0;
diff --git a/world/map/npc/048-2/helperMReed.txt b/world/map/npc/048-2/helperMReed.txt
index 50ac45c0..4cb2eaac 100644
--- a/world/map/npc/048-2/helperMReed.txt
+++ b/world/map/npc/048-2/helperMReed.txt
@@ -6,7 +6,6 @@
048-2,104,78,0|script|Kullervo|366
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @reed_amount, 20;
set @reed_exp, 10000;
@@ -47,9 +46,9 @@ L_NoItem:
goto L_Close;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -73,10 +72,9 @@ L_Visitor:
mes "\"Oh, yes. There was such a guy, shortly before the accident I think. He sneaked into the workshop several times, sticking his nose into stuff that shouldn't be his business. We had to send him back to the library area at least three times.\"";
next;
mes "\"Maybe he was confused, not sure. He talked very strangely.\"";
- if ((@investigate != 3) && (@investigate != 6) && (@investigate != 9))
+ if ((QL_BSAGE_INVESTIGATE != 3) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 9))
goto L_Close;
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
goto L_Close;
L_Helper:
@@ -85,14 +83,12 @@ L_Helper:
mes "And in all these years, I've never seen him messing up anything important. He's a perfectionist. He isn't satisfied with anything less than the best possible result when doing his work.\"";
next;
mes "\"I don't understand what went wrong with that spell, but it just has to have another cause than Peetu. I'm worried about him. He must feel very miserable. But I can't leave my duty here.\"";
- if ((@investigate != 5) && (@investigate != 6) && (@investigate != 7))
+ if ((QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 7))
goto L_Close;
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Close:
- set @investigate, 0;
set @reed_amount, 0;
set @reed_exp, 0;
close;
diff --git a/world/map/npc/048-2/helperMSilk.txt b/world/map/npc/048-2/helperMSilk.txt
index d2db14a5..7ed3bf47 100644
--- a/world/map/npc/048-2/helperMSilk.txt
+++ b/world/map/npc/048-2/helperMSilk.txt
@@ -6,7 +6,6 @@
048-2,104,103,0|script|Janika|363
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @silk_amount, 80;
set @silk_exp, 10000;
@@ -47,9 +46,9 @@ L_NoItem:
goto L_Close;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -74,10 +73,9 @@ L_Visitor:
next;
mes "She shakes her head.";
mes "\"Sometimes I think it'd be better not to allow visitors here. But the sages set a high value on keeping contact with the population. Politics.\"";
- if ((@investigate != 3) && (@investigate != 6) && (@investigate != 9))
+ if ((QL_BSAGE_INVESTIGATE != 3) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 9))
goto L_Close;
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
goto L_Close;
L_Helper:
@@ -86,7 +84,6 @@ L_Helper:
goto L_Close;
L_Close:
- set @investigate, 0;
set @silk_amount, 0;
set @silk_exp, 0;
close;
diff --git a/world/map/npc/048-2/helperMYetiClaw.txt b/world/map/npc/048-2/helperMYetiClaw.txt
index c32b0b1e..f23b7177 100644
--- a/world/map/npc/048-2/helperMYetiClaw.txt
+++ b/world/map/npc/048-2/helperMYetiClaw.txt
@@ -6,7 +6,6 @@
048-2,97,78,0|script|Santeri|366
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @claw_amount, 8;
set @claw_exp, 10000;
@@ -55,9 +54,9 @@ L_NoItem:
goto L_Close;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -86,14 +85,12 @@ L_Helper:
mes "\"Oh, that's an interesting question. I was really surprised when I heard that he was responsible for the sealing spell. I've worked together with him before, and I have to say, it really was a pleasure. He's very accurate and diligent, but also polite and helpful.\"";
next;
mes "\"I really wonder what went wrong with that sealing spell. I can't imagine Peetu messing up something so important.\"";
- if ((@investigate != 5) && (@investigate != 6) && (@investigate != 7))
+ if ((QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 7))
goto L_Close;
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Close:
- set @investigate, 0;
set @claw_amount, 0;
set @claw_exp, 0;
close;
diff --git a/world/map/npc/048-2/helperResting1.txt b/world/map/npc/048-2/helperResting1.txt
index 87983bc8..76e62fe2 100644
--- a/world/map/npc/048-2/helperResting1.txt
+++ b/world/map/npc/048-2/helperResting1.txt
@@ -6,7 +6,6 @@
048-2,36,26,0|script|Lenita|363
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @bookpages, ((QUEST_BlueSage & $@Q_BlueSageBookPages_MASK) >> $@Q_BlueSageBookPages_SHIFT);
if (@bookpages == 254) goto L_Thank;
@@ -30,9 +29,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -54,10 +53,9 @@ L_Ask_Both:
L_Visitor:
mes "[Lenita]";
mes "\"With a mask? Yeah, I remember. That was a strange guy. He came to visit the library, but he lurked around at the workshop area and they had to send him back to the books.\"";
- if ((@investigate != 3) && (@investigate != 6) && (@investigate != 9))
+ if ((QL_BSAGE_INVESTIGATE != 3) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 9))
goto L_Close;
- set @investigate, @investigate + 1;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 1;
goto L_Close;
L_Helper:
@@ -66,7 +64,6 @@ L_Helper:
goto L_Close;
L_Close:
- set @investigate, 0;
set @bookpages, 0;
close;
}
diff --git a/world/map/npc/048-2/helperResting2.txt b/world/map/npc/048-2/helperResting2.txt
index eb68e554..c65bc536 100644
--- a/world/map/npc/048-2/helperResting2.txt
+++ b/world/map/npc/048-2/helperResting2.txt
@@ -6,7 +6,6 @@
048-2,35,27,0|script|Miro|366
{
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
if (@slimes == 255) goto L_Thank;
@@ -29,9 +28,9 @@ L_Thank:
goto L_Investigate;
L_Investigate:
- if ((@investigate == 3) || (@investigate == 4)) goto L_Ask_Visitor;
- if ((@investigate == 5) || (@investigate == 8)) goto L_Ask_Helper;
- if ((@investigate == 6) || (@investigate == 7) || (@investigate == 9) || (@investigate == 10)) goto L_Ask_Both;
+ if ((QL_BSAGE_INVESTIGATE == 3) || (QL_BSAGE_INVESTIGATE == 4)) goto L_Ask_Visitor;
+ if ((QL_BSAGE_INVESTIGATE == 5) || (QL_BSAGE_INVESTIGATE == 8)) goto L_Ask_Helper;
+ if ((QL_BSAGE_INVESTIGATE == 6) || (QL_BSAGE_INVESTIGATE == 7) || (QL_BSAGE_INVESTIGATE == 9) || (QL_BSAGE_INVESTIGATE == 10)) goto L_Ask_Both;
goto L_Close;
L_Ask_Visitor:
@@ -60,14 +59,12 @@ L_Helper:
mes "\"Peetu? It was his job to seal away the slimes before the night, right? I have to say I'm really surprised about what happened, because he's a very cautious person. I'd have never guessed that he'd mess up something as important as this.\"";
next;
mes "\"If Nikolai's helpers weren't so carefully chosen, I'd think this was some kind of a bad joke from someone.\"";
- if ((@investigate != 5) && (@investigate != 6) && (@investigate != 7))
+ if ((QL_BSAGE_INVESTIGATE != 5) && (QL_BSAGE_INVESTIGATE != 6) && (QL_BSAGE_INVESTIGATE != 7))
goto L_Close;
- set @investigate, @investigate + 3;
- callfunc "updateBlueSageInvestigate";
+ set QL_BSAGE_INVESTIGATE, QL_BSAGE_INVESTIGATE + 3;
goto L_Close;
L_Close:
- set @investigate, 0;
set @slimes, 0;
close;
}
diff --git a/world/map/npc/048-2/sageNikolai.txt b/world/map/npc/048-2/sageNikolai.txt
index dced46d6..fdc6e76d 100644
--- a/world/map/npc/048-2/sageNikolai.txt
+++ b/world/map/npc/048-2/sageNikolai.txt
@@ -8,7 +8,6 @@
set @halloween_npc_id, $@halloween_npc_nikolai;
callfunc "TrickOrTreat";
- set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
set @bookpages, ((QUEST_BlueSage & $@Q_BlueSageBookPages_MASK) >> $@Q_BlueSageBookPages_SHIFT);
set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
set @material, ((QUEST_BlueSage & $@Q_BlueSageMaterial_MASK) >> $@Q_BlueSageMaterial_SHIFT);
@@ -112,7 +111,7 @@ L_NoStartSlimes:
goto L_NoSlimes;
L_NoSlimes:
- if (@investigate > 0)
+ if (QL_BSAGE_INVESTIGATE > 0 && QL_BSAGE_INVESTIGATE < 13)
goto L_NoStartInvestigate;
set @choice_idx[@choices_nr], @C_startInvestigate;
set @choice$[@choices_nr], "How did this all happen?";
@@ -120,7 +119,7 @@ L_NoSlimes:
goto L_NoStartInvestigate;
L_NoStartInvestigate:
- if ((@investigate < 2) || (@investigate > 11))
+ if ((QL_BSAGE_INVESTIGATE < 2) || (QL_BSAGE_INVESTIGATE > 11 && QL_BSAGE_INVESTIGATE < 13))
goto L_NoInvestigate;
set @choice_idx[@choices_nr], @C_investigate;
set @choice$[@choices_nr], "I'm trying to find out how that accident could've happened.";
@@ -128,7 +127,7 @@ L_NoStartInvestigate:
goto L_NoInvestigate;
L_NoInvestigate:
- if (@investigate != 11)
+ if (QL_BSAGE_INVESTIGATE != 11)
goto L_NoInvestigate2;
set @choice_idx[@choices_nr], @C_investigate2;
set @choice$[@choices_nr], "I told Chief Oskari what I found out about the accident.";
@@ -281,28 +280,7 @@ L_Done:
L_Close:
set @inventorylist_count, 0;
- set @investigate, 0;
set @bookpages, 0;
set @slimes, 0;
close;
}
-
-//048-2,100,106,0|script|Debug|160
-//{
-// set @investigate, ((QUEST_BlueSage & $@Q_BlueSageInvestigate_MASK) >> $@Q_BlueSageInvestigate_SHIFT);
-// set @bookpages, ((QUEST_BlueSage & $@Q_BlueSageBookPages_MASK) >> $@Q_BlueSageBookPages_SHIFT);
-// set @slimes, ((QUEST_BlueSage & $@Q_BlueSageSlimes_MASK) >> $@Q_BlueSageSlimes_SHIFT);
-// set @material, ((QUEST_BlueSage & $@Q_BlueSageMaterial_MASK) >> $@Q_BlueSageMaterial_SHIFT);
-//
-// mes "QUEST_BlueSage: " + QUEST_BlueSage;
-// mes "investigate: " + @investigate;
-// mes "slimes: " + @slimes;
-// mes "bookpages: " + @bookpages;
-// mes "material: " + @material;
-// menu
-// "reset quest",-,
-// "close",L_Close;
-// set QUEST_BlueSage, 0;
-//L_Close:
-// close;
-//}
diff --git a/world/map/npc/048-2/traveler.txt b/world/map/npc/048-2/traveler.txt
index 4d8af7fe..7b654d85 100644
--- a/world/map/npc/048-2/traveler.txt
+++ b/world/map/npc/048-2/traveler.txt
@@ -4,7 +4,7 @@
048-2,23,46,0|script|Drake the Traveler|103
{
- set @NpcName$, "Drake";
+ set @npcname$, "Drake";
set @NpcTravelBit, $@blue_sage_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/051-1/_mobs.txt b/world/map/npc/051-1/_mobs.txt
index 8e092790..752c527c 100644
--- a/world/map/npc/051-1/_mobs.txt
+++ b/world/map/npc/051-1/_mobs.txt
@@ -5,7 +5,7 @@
051-1,42,35,41,22|monster|SpikyMushroom|1019,10,100000ms,30000ms,Mob051-1::On1019
-051-1,0,0,0|script|Mob051-1|-1
+051-1,0,0,0|script|Mob051-1|32767
{
end;
diff --git a/world/map/npc/051-1/desertmonsters.txt b/world/map/npc/051-1/desertmonsters.txt
index 310566ce..a3497055 100644
--- a/world/map/npc/051-1/desertmonsters.txt
+++ b/world/map/npc/051-1/desertmonsters.txt
@@ -1,7 +1,7 @@
051-1,134,36,67,49|monster|SoulSnake|1096,12,100000ms,30000ms,IlliaDMobs051-1::On1096
// The soul snakes release a Sealed Soul at random, once the soul collecting is started
-051-1,0,0,0|script|IlliaDMobs051-1|-1
+051-1,0,0,0|script|IlliaDMobs051-1|32767
{
end;
diff --git a/world/map/npc/051-1/forestmonsters.txt b/world/map/npc/051-1/forestmonsters.txt
index 4942cf2b..4d646ed3 100644
--- a/world/map/npc/051-1/forestmonsters.txt
+++ b/world/map/npc/051-1/forestmonsters.txt
@@ -1,6 +1,6 @@
051-1,52,32,10,8|monster|GreenSlime|1005,20,100000ms,30000ms,IlliaFMobs051-1::On1005
-051-1,0,0,0|script|IlliaFMobs051-1|-1
+051-1,0,0,0|script|IlliaFMobs051-1|32767
{
end;
diff --git a/world/map/npc/051-3/_mobs.txt b/world/map/npc/051-3/_mobs.txt
index 0887b1de..711bf39c 100644
--- a/world/map/npc/051-3/_mobs.txt
+++ b/world/map/npc/051-3/_mobs.txt
@@ -19,7 +19,7 @@
051-3,60,94,18,5|monster|CopperSlime|1098,7,100000ms,60000ms,Mob051-3::On1098
-051-3,0,0,0|script|Mob051-3|-1
+051-3,0,0,0|script|Mob051-3|32767
{
end;
diff --git a/world/map/npc/051-3/jailslimes.txt b/world/map/npc/051-3/jailslimes.txt
index d153097a..8544fb1a 100644
--- a/world/map/npc/051-3/jailslimes.txt
+++ b/world/map/npc/051-3/jailslimes.txt
@@ -4,7 +4,7 @@
051-3,63,104,1,1|monster|CopperSlime|1098,1,60000ms,30000ms,IlliaCMobs051-3::On1098
051-3,70,111,1,1|monster|CopperSlime|1098,1,60000ms,30000ms,IlliaCMobs051-3::On1098
-051-3,0,0,0|script|IlliaCMobs051-3|-1
+051-3,0,0,0|script|IlliaCMobs051-3|32767
{
end;
diff --git a/world/map/npc/052-1/_mobs.txt b/world/map/npc/052-1/_mobs.txt
index 684c78fc..c386d5d1 100644
--- a/world/map/npc/052-1/_mobs.txt
+++ b/world/map/npc/052-1/_mobs.txt
@@ -4,7 +4,7 @@
052-1,55,29,43,39|monster|AzulSlime|1100,18,100000ms,20000ms,Mob052-1::On1100
-052-1,0,0,0|script|Mob052-1|-1
+052-1,0,0,0|script|Mob052-1|32767
{
end;
diff --git a/world/map/npc/052-1/channelling.txt b/world/map/npc/052-1/channelling.txt
index e65d47a8..565f96fd 100644
--- a/world/map/npc/052-1/channelling.txt
+++ b/world/map/npc/052-1/channelling.txt
@@ -95,13 +95,13 @@ L_SuggestChannelling:
function|script|StartChannelling
{
if (isat("052-1",53,38) == 0)
- end;
+ goto L_Return;
if ($@illia_level_4_progress > 0)
- end;
+ goto L_Return;
set $@illia_level_4_progress, 1;
set $@illia_char_channelling$, strcharinfo(0);
- set @bonus, (readparam(bInt)+1) / 25;
+ set @bonus, (Int+1) / 25;
// Lazurite Stones power, will also depend on the Int of the channelling character
setarray $@illia_lazurites_power,
12 + @bonus, // small
@@ -114,11 +114,11 @@ function|script|StartChannelling
setarray $@illia_large_lazurites, 21,40, 34,25;
// amount of initial magic power
- set $@illia_magic_power, 1811 + readparam(bInt)*2;
+ set $@illia_magic_power, 1811 + Int*2;
// Channelling required power depends on the base Int of the character
- set $@illia_magic_power_required, 5707 - 2*readparam(bInt);
+ set $@illia_magic_power_required, 5707 - 2*Int;
// magic power loss depends also on Int
- set $@illia_magic_power_loss, 53 - ((readparam(bInt)+1)*2)/10;
+ set $@illia_magic_power_loss, 53 - ((Int+1)*2)/10;
// register the power status to display hints to the players
// Statuses: 0=critical(below 300), 1=neutral, 2=almost there (max-300)
@@ -126,8 +126,10 @@ function|script|StartChannelling
message strcharinfo(0), "Ok, let's stay focused now!";
donpcevent "#Power Circle::OnCommandSt";
- close;
+ goto L_Return;
+L_Return:
+ return;
}
052-1,53,38,0|script|#Power Circle|368
diff --git a/world/map/npc/052-2/_mobs.txt b/world/map/npc/052-2/_mobs.txt
index 916b6761..1fb96829 100644
--- a/world/map/npc/052-2/_mobs.txt
+++ b/world/map/npc/052-2/_mobs.txt
@@ -3,7 +3,7 @@
-052-2,0,0,0|script|Mob052-2|-1
+052-2,0,0,0|script|Mob052-2|32767
{
end;
}
diff --git a/world/map/npc/055-1/_mobs.txt b/world/map/npc/055-1/_mobs.txt
index a1226612..35741d32 100644
--- a/world/map/npc/055-1/_mobs.txt
+++ b/world/map/npc/055-1/_mobs.txt
@@ -20,7 +20,7 @@
055-1,0,0,0,0|monster|SpikyMushroom|1019,7,10000ms,60000ms,Mob055-1::On1019
-055-1,0,0,0|script|Mob055-1|-1
+055-1,0,0,0|script|Mob055-1|32767
{
end;
diff --git a/world/map/npc/055-1/pumpkins.txt b/world/map/npc/055-1/pumpkins.txt
index 528546bd..96931e04 100644
--- a/world/map/npc/055-1/pumpkins.txt
+++ b/world/map/npc/055-1/pumpkins.txt
@@ -4,7 +4,7 @@
055-1,132,24,6,4|monster|Pumpkin|1063,4,10000ms,5000ms,PumpkinMob055-1::On1063
-055-1,0,0,0|script|PumpkinMob055-1|-1
+055-1,0,0,0|script|PumpkinMob055-1|32767
{
end;
diff --git a/world/map/npc/055-1/traveler.txt b/world/map/npc/055-1/traveler.txt
index 0277fbd4..1f36de77 100644
--- a/world/map/npc/055-1/traveler.txt
+++ b/world/map/npc/055-1/traveler.txt
@@ -4,7 +4,7 @@
055-1,135,60,0|script|Sherman the Traveler|103
{
- set @NpcName$, "Sherman";
+ set @npcname$, "Sherman";
set @NpcTravelBit, $@hurns_farms_bit;
callfunc "Traveler";
end;
diff --git a/world/map/npc/055-3/_mobs.txt b/world/map/npc/055-3/_mobs.txt
index 071d0347..bc14b844 100644
--- a/world/map/npc/055-3/_mobs.txt
+++ b/world/map/npc/055-3/_mobs.txt
@@ -11,7 +11,7 @@
055-3,52,78,36,23|monster|BlackScorpion|1009,3,50000ms,100000ms,Mob055-3::On1009
-055-3,0,0,0|script|Mob055-3|-1
+055-3,0,0,0|script|Mob055-3|32767
{
end;
diff --git a/world/map/npc/056-2/_mobs.txt b/world/map/npc/056-2/_mobs.txt
index b4690913..267e0d8a 100644
--- a/world/map/npc/056-2/_mobs.txt
+++ b/world/map/npc/056-2/_mobs.txt
@@ -3,7 +3,7 @@
-056-2,0,0,0|script|Mob056-2|-1
+056-2,0,0,0|script|Mob056-2|32767
{
end;
}
diff --git a/world/map/npc/057-1/_mobs.txt b/world/map/npc/057-1/_mobs.txt
index 48bdaa2b..5988ce83 100644
--- a/world/map/npc/057-1/_mobs.txt
+++ b/world/map/npc/057-1/_mobs.txt
@@ -21,7 +21,7 @@
057-1,27,46,14,52|monster|Squirrel|1038,6,10000ms,50000ms,Mob057-1::On1038
-057-1,0,0,0|script|Mob057-1|-1
+057-1,0,0,0|script|Mob057-1|32767
{
end;
diff --git a/world/map/npc/annuals/fathertime.txt b/world/map/npc/annuals/fathertime.txt
index 53912f86..6d61f446 100644
--- a/world/map/npc/annuals/fathertime.txt
+++ b/world/map/npc/annuals/fathertime.txt
@@ -1,6 +1,6 @@
// Annual Timer
// One timer to check to enable all holiday events
-017-9,26,28,0|script|#HolidayConfig|-1
+017-9,26,28,0|script|#HolidayConfig|32767
{
end;
@@ -20,23 +20,3 @@ OnTimer20000:
initnpctimer;
end;
}
-017-9,31,24,0|script|HolidayDebug#1|105
-{
- if(getgmlevel() < 40)
- goto L_End;
-
- menu
- "Xmas.", L_XmasDebug,
- "Halloween.", L_HalloweenDebug;
-
-L_XmasDebug:
- callfunc "XmasDebug";
- goto L_End;
-
-L_HalloweenDebug:
- callfunc "HalloweenDebug";
- goto L_End;
-
-L_End:
- end;
-}
diff --git a/world/map/npc/annuals/halloween/config.txt b/world/map/npc/annuals/halloween/config.txt
index 8e9169e8..34ffb875 100644
--- a/world/map/npc/annuals/halloween/config.txt
+++ b/world/map/npc/annuals/halloween/config.txt
@@ -81,7 +81,7 @@
// BIT 30: NPC #1
// BIT 31: NPC #0
--|script|#HalloweenConfig|-1
+-|script|#HalloweenConfig|32767
{
end;
diff --git a/world/map/npc/annuals/halloween/debug.txt b/world/map/npc/annuals/halloween/debug.txt
index 07717b35..cbc918e2 100644
--- a/world/map/npc/annuals/halloween/debug.txt
+++ b/world/map/npc/annuals/halloween/debug.txt
@@ -1,4 +1,4 @@
-// Halloween Debug
+// Halloween Debug
// Author: Wushin
function|script|HalloweenDebug
@@ -137,5 +137,6 @@ L_Close:
set @loop, 0;
set @menu, 0;
set @halloween_npc_id, 0;
- close;
+ close2;
+ return;
}
diff --git a/world/map/npc/annuals/halloween/trick_or_treat.txt b/world/map/npc/annuals/halloween/trick_or_treat.txt
index 24a359d2..10265382 100644
--- a/world/map/npc/annuals/halloween/trick_or_treat.txt
+++ b/world/map/npc/annuals/halloween/trick_or_treat.txt
@@ -71,7 +71,7 @@ L_MaskMemoryCheck:
L_MaskMemoryYes:
// not necessarily true
- mes "\"I remember you, " + getequipname(equip_head) + " person. No more treats for you!\"";
+ mes "\"I remember you, " + getitemlink(getequipid(equip_head)) + " person. No more treats for you!\"";
goto L_Close;
L_MaskMemoryNo:
@@ -285,7 +285,7 @@ L_Explain:
next;
set @npc_check_loop, 0;
goto L_NpcCheckLoop;
-
+
L_NpcCheckLoop:
mes $@halloween_npc_names$[@npc_check_loop];
next;
diff --git a/world/map/npc/annuals/xmas/barriers.txt b/world/map/npc/annuals/xmas/barriers.txt
index 5dd30774..3e6aad65 100644
--- a/world/map/npc/annuals/xmas/barriers.txt
+++ b/world/map/npc/annuals/xmas/barriers.txt
@@ -4,6 +4,7 @@
function|script|ThrowOutTheBum
{
+ set @getout, 0;
if((@xmas_thrown_out) && ($@xmas_time))
goto L_SideOut;
goto L_Return;
@@ -18,13 +19,16 @@ L_Hint:
mes "[Orum's Homunculus]";
mes "\"What are you doing? Come, see me in the caves below!\"";
mes "\"I said go north till you reach the snowman. Then head into the cave to the east.\"";
+ close2;
warp "020-1.gat",33,94;
- close;
+ set @getout, 1;
+ goto L_Return;
L_Warp:
message strcharinfo(0), "I said get out, We've no time for your kind here.";
warp "020-1.gat",33,94;
- end;
+ set @getout, 1;
+ goto L_Return;
L_Return:
return;
diff --git a/world/map/npc/annuals/xmas/config.txt b/world/map/npc/annuals/xmas/config.txt
index b7a6de82..90eab504 100644
--- a/world/map/npc/annuals/xmas/config.txt
+++ b/world/map/npc/annuals/xmas/config.txt
@@ -38,7 +38,7 @@
// 30: Helper Bit
// 31: Side Choosen: Naughty vs. Nice
--|script|#XmasConfig|-1
+-|script|#XmasConfig|32767
{
end;
diff --git a/world/map/npc/annuals/xmas/core.txt b/world/map/npc/annuals/xmas/core.txt
index d064efca..517ac084 100644
--- a/world/map/npc/annuals/xmas/core.txt
+++ b/world/map/npc/annuals/xmas/core.txt
@@ -130,7 +130,7 @@ L_SetRewardBonus:
set @xmas_reward_lower_bound, 2 * @xmas_reward_tally - rand(5);
if (@xmas_reward_tally <= 5)
set @xmas_reward_lower_bound, @xmas_reward_tally;
- set @xmas_reward_upper_bound, @xmas_reward_lower_bound + ((readparam(bLuk)) / 5);
+ set @xmas_reward_upper_bound, @xmas_reward_lower_bound + ((Luk) / 5);
set @xmas_reward, (rand(@xmas_reward_lower_bound, @xmas_reward_upper_bound));
set @xmas_reward_lower_bound, 0;
set @xmas_reward_upper_bound, 0;
@@ -159,8 +159,7 @@ L_LevelingReward:
goto L_XmasExp;
L_XmasLevel:
- gmcommand "@blvl 1";
- gmcommand "@l I was a good kid this year.";
+ set BaseLevel, BaseLevel + 1;
return;
L_XmasExp:
diff --git a/world/map/npc/annuals/xmas/debug.txt b/world/map/npc/annuals/xmas/debug.txt
index 0e3c38a2..d67c3de8 100644
--- a/world/map/npc/annuals/xmas/debug.txt
+++ b/world/map/npc/annuals/xmas/debug.txt
@@ -168,7 +168,8 @@ L_Close:
set @xmas_time_key_rsday, 0;
set @xmas_time_key_reday, 0;
set @xmas_time_key_year, 0;
- close;
+ close2;
+ return;
}
020-1.gat,86,76,0|script|XmasDebug#1|105
diff --git a/world/map/npc/botcheck/_mobs.txt b/world/map/npc/botcheck/_mobs.txt
index a7151fe7..91d023cd 100644
--- a/world/map/npc/botcheck/_mobs.txt
+++ b/world/map/npc/botcheck/_mobs.txt
@@ -3,7 +3,7 @@
-botcheck,0,0,0|script|Mobbotcheck|-1
+botcheck,0,0,0|script|Mobbotcheck|32767
{
end;
}
diff --git a/world/map/npc/functions/DyeConfig.txt b/world/map/npc/functions/DyeConfig.txt
index 1da1e734..e2d9640e 100644
--- a/world/map/npc/functions/DyeConfig.txt
+++ b/world/map/npc/functions/DyeConfig.txt
@@ -1,4 +1,4 @@
-009-2,32,105,0|script|#DyeChecker|-1
+009-2,32,105,0|script|#DyeChecker|32767
{
end;
OnInit:
@@ -23,7 +23,7 @@ OnInit:
end;
S_Array:
- if(getitemname($@DYE_items$[$@w]) == "Unknown Item") goto L_Fail;
+ if(getitemlink($@DYE_items$[$@w]) == "Unknown Item") goto L_Fail;
set $@c, 0;
callsub S_Color;
set $@w, $@w + 1;
@@ -35,7 +35,7 @@ L_Fail:
mapexit;
S_Color:
- if(getitemname($@DYE_colors$[$@c] + $@DYE_items$[$@w]) == "Unknown Item") goto L_Fail;
+ if(getitemlink($@DYE_colors$[$@c] + $@DYE_items$[$@w]) == "Unknown Item") goto L_Fail;
set $@c, $@c + 1;
if($@c < getarraysize($@DYE_colors$)) goto S_Color;
return;
diff --git a/world/map/npc/017-9/announcements.txt b/world/map/npc/functions/announcements.txt
index aa6df918..dd56eadc 100644
--- a/world/map/npc/017-9/announcements.txt
+++ b/world/map/npc/functions/announcements.txt
@@ -13,28 +13,21 @@
// $@GMSA_TICK: broadcast the message every $@GMSA_TICK hours
// $@GMSA_CURRENT_TICK: internal counter incremented every hour
-017-9,26,24,0|script|Stone Board|145
+function|script|SBConfig
{
- if (getgmlevel() < 30)
- goto L_Close;
-
if ($@GMSA_STATUS)
goto L_InfoBroadcast;
goto L_PrepareBroadcast;
L_InfoBroadcast:
- set @next_broadcast_ts, (3600000*($@GMSA_TICK - $@GMSA_CURRENT_TICK) - getnpctimer(0))/1000;
- set @next_broadcast_h, @next_broadcast_ts/3600;
- set @next_broadcast_m, (@next_broadcast_ts - @next_broadcast_h*3600)/60;
+ set @ms, (3600000*($@GMSA_TICK - $@GMSA_CURRENT_TICK) - getnpctimer(0, "Stone Board"));
+ callfunc "HumanTime";
mes "[GM Scheduled Broadcasts Board]";
mes $@GMSA_NAME$ + " scheduled the current message, every " + $@GMSA_TICK + " hour(s):";
mes $@GMSA_MSG$;
next;
- if (@next_broadcast_h > 0)
- mes "The next broadcast will happen in " + @next_broadcast_h + " hour(s) and " + @next_broadcast_m + " minute(s).";
- if (@next_broadcast_h == 0)
- mes "The next broadcast will happen in " + @next_broadcast_m + " minute(s).";
+ mes "The next broadcast will happen in " + @time$ + ".";
next;
set @next_broadcast_ts, 0;
@@ -68,7 +61,7 @@ L_CreateBroadcast:
mes "[GM Scheduled Broadcasts Board]";
mes "The message will be broadcasted every X hour(s). Enter X:";
input $@GMSA_TICK;
- if ($@GMSA_TICK < 1)
+ if ($@GMSA_TICK < 1 || $@GMSA_TICK > 24)
goto L_InvalidBroadcastTick;
next;
@@ -111,35 +104,20 @@ S_Help:
mes "Only one broadcast can be scheduled at a time.";
return;
-S_PerformBroadcast:
- announce $@GMSA_MSG$, 0;
- return;
-
L_ManualBroadcast:
- callsub S_PerformBroadcast;
+ announce $@GMSA_MSG$, 0;
mes "Done.";
goto L_Close;
L_StopBroadcast:
- callsub S_StopBroadcast;
+ donpcevent "Stone Board::OnStopBroadcast";
mes "Done.";
goto L_Close;
-S_StopBroadcast:
- stopnpctimer;
- setnpctimer 0;
- set $@GMSA_STATUS, 0;
- set $@GMSA_NAME$, "";
- set $@GMSA_MSG$, "";
- set $@GMSA_TICK, 0;
- set $@GMSA_MAX, 0;
- set $@GMSA_CURRENT_TICK, 0;
- return;
-
L_StartBroadcast2:
if ($@GMSA_STATUS == 1)
goto L_Abort;
- callsub S_PerformBroadcast;
+ announce $@GMSA_MSG$, 0;
goto L_StartBroadcast;
L_StartBroadcast:
@@ -148,8 +126,9 @@ L_StartBroadcast:
set $@GMSA_STATUS, 1;
set $@GMSA_NAME$, strcharinfo(0);
set $@GMSA_CURRENT_TICK, 0;
- initnpctimer;
+ initnpctimer "Stone Board";
mes "Done.";
+ gmlog strcharinfo(0) + " modified the scheduled broadcast.";
goto L_Close;
L_Abort:
@@ -158,18 +137,57 @@ L_Abort:
goto L_Close;
L_Close:
- close;
+ return;
+}
+
+
+017-9,26,28,0|script|Stone Board|32767
+{
+ end;
+
+OnStopBroadcast:
+ goto L_Stop;
+
+L_Stop:
+ stopnpctimer "Stone Board";
+ setnpctimer 0, "Stone Board";
+ set $@GMSA_STATUS, 0;
+ set $@GMSA_NAME$, "";
+ set $@GMSA_MSG$, "";
+ set $@GMSA_TICK, 0;
+ set $@GMSA_MAX, 0;
+ set $@GMSA_CURRENT_TICK, 0;
+ end;
OnTimer3600000:
set $@GMSA_CURRENT_TICK, $@GMSA_CURRENT_TICK + 1;
- setnpctimer 0;
+ setnpctimer 0, "Stone Board";
if ($@GMSA_CURRENT_TICK != $@GMSA_TICK)
end;
- callsub S_PerformBroadcast;
+ announce $@GMSA_MSG$, 0;
set $@GMSA_CURRENT_TICK, 0;
set $@GMSA_MAX, $@GMSA_MAX - 1;
if ($@GMSA_MAX != 0)
end;
- callsub S_StopBroadcast;
- end;
+ goto L_Stop;
+}
+
+function|script|getBroadcast
+{
+ if (getmap() == "029-2" && getx() == 22 && gety() == 24) goto L_NewPlayer;
+ goto L_ReturningPlayer;
+
+L_NewPlayer:
+ // todo: show game rules on login (in another PR)
+ // ... does not look like it work.. the `menu`
+ // builtin behaves weirdly when on login
+ goto L_Return;
+
+L_ReturningPlayer:
+ if ($@GMSA_STATUS < 1) goto L_Return;
+ announce $@GMSA_MSG$, 3;
+ goto L_Return;
+
+L_Return:
+ return;
}
diff --git a/world/map/npc/functions/banker.txt b/world/map/npc/functions/banker.txt
index ea5dfa22..5650c5ed 100644
--- a/world/map/npc/functions/banker.txt
+++ b/world/map/npc/functions/banker.txt
@@ -8,6 +8,7 @@ function|script|Banker
goto L_Start;
L_Start:
+ if(@npcname$ == "") set @npcname$, strnpcinfo(1);
mes "[" + @npcname$ + "]";
mes "\"Welcome to the bank!";
mes "How can I help you?\"";
@@ -24,7 +25,7 @@ L_Start:
L_Storage:
if (#BankOptions & OPT_STORAGE_CLOSE) close2;
openstorage;
- if (#BankOptions & OPT_STORAGE_CLOSE) end;
+ if (#BankOptions & OPT_STORAGE_CLOSE) goto L_Return;
goto L_Start;
L_Dep:
@@ -212,7 +213,7 @@ L_Balance:
mes "[" + @npcname$ + "]";
mes "\"Your current bank balance is:";
mes #BankAccount + " GP\"";
- if (#BankOptions & OPT_BANK_CLOSE) close;
+ if (#BankOptions & OPT_BANK_CLOSE) goto L_Return;
goto L_Start;
L_Nev:
@@ -248,5 +249,6 @@ L_Change_Bank:
goto L_Start;
L_Return:
+ set @npcname$, "";
return;
}
diff --git a/world/map/npc/functions/clear_vars.txt b/world/map/npc/functions/clear_vars.txt
index c894586b..76365f07 100644
--- a/world/map/npc/functions/clear_vars.txt
+++ b/world/map/npc/functions/clear_vars.txt
@@ -2,75 +2,88 @@
function|script|ClearVariables
{
- // Tutorial
- if ((TUTORIAL) || (sorfina))
- goto L_ResetTut;
- goto L_Heathin;
+ if(@login_event != 1) goto L_Deprecated;
+
+ callsub S_Bernard_Mikhail;
+ callsub S_Sarah;
+ callsub S_Vincent;
+ callsub S_Sandra;
+ callsub S_Desert;
+ callsub S_Bandit;
+ callsub S_Tutorial;
+ callsub S_Heathin;
+ callsub S_Remove_Skills;
+ callsub S_FixBank;
+ callsub S_Angus;
+ callsub S_Flags;
+ callsub S_Bitmask;
+
+ callsub S_Easter;
+ callsub S_Easter2008;
+ callsub S_Easter2009;
+ callsub S_Easter2010;
+ callsub S_Easter2011;
+ callsub S_Easter2012;
+ callsub S_Halloween2006;
+ callsub S_Halloween2007;
+ callsub S_Halloween2008;
+ callsub S_Halloween2009;
+ callsub S_Halloween2010;
+ callsub S_Halloween2011;
+ callsub S_Xmas2006;
+ callsub S_Xmas2007;
+ callsub S_Xmas2008;
+ callsub S_Xmas2009;
+ callsub S_Xmas2010;
+ callsub S_Xmas2011;
+ callsub S_Xmas2012;
+
+ callsub S_Misc;
+ return; // go back to global handler
+
+S_Return: // this is to end execution of a sub
+ return;
-L_ResetTut:
- //TUTORIAL to STARTAREA
- if ((sorfina) || (kaan) || (hasan) || (tanisha))
- goto L_ResetAllTut;
- set @tutorial_tmp, ((TUTORIAL & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
- // Tutorial
- // Nibble 0 (sorfina, tanisha, kaan & hasan)
- set STARTAREA, (STARTAREA & ~(NIBBLE_0_MASK) | (@tutorial_tmp << NIBBLE_0_SHIFT));
- // Nibble 1 (valon)
- set @tutorial_tmp, ((TUTORIAL & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
- set @valon_done, (TUTORIAL & (1 << 7));
- set @valon_start, (TUTORIAL & (1 << 6));
- if (@valon_start)
- set @tutorial_tmp, (@tutorial_tmp + 2);
- if (@valon_done)
- set @tutorial_tmp, 7;
- set STARTAREA, (STARTAREA & ~(NIBBLE_1_MASK) | (@tutorial_tmp << NIBBLE_1_SHIFT));
- // Nibble 2 (Counts)
- set @tutorial_tmp, ((TUTORIAL & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
- set STARTAREA, (STARTAREA & ~(NIBBLE_2_MASK) | (@tutorial_tmp << NIBBLE_2_SHIFT));
- // Nibble 3 (Morgan)
- set @tutorial_tmp, ((TUTORIAL & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT);
- set STARTAREA, (STARTAREA & ~(NIBBLE_3_MASK) | (@tutorial_tmp << NIBBLE_3_SHIFT));
- // Nibble 4 (Zegas) Barrels shuffled
- set @zegas_done, (TUTORIAL & (1 << 23));
- set @zegas_start, (TUTORIAL & (1 << 16));
- set @zegas_met, (TUTORIAL & (1 << 30));
- set @tutorial_tmp, 0;
- if (@zegas_met)
- set @tutorial_tmp, 1;
- if (@zegas_start)
- set @tutorial_tmp, 2;
- if (@zegas_done)
- set @tutorial_tmp, 4;
- set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (@tutorial_tmp << NIBBLE_4_SHIFT));
- // Nibble 5 (Barrels)
- set @tutorial_tmp, 0;
- set STARTAREA, (STARTAREA & ~(NIBBLE_5_MASK) | (@tutorial_tmp << NIBBLE_5_SHIFT));
- // Nibble 6 (Barrels)
- set STARTAREA, (STARTAREA & ~(NIBBLE_6_MASK) | (@tutorial_tmp << NIBBLE_6_SHIFT));
- set TUTORIAL, 0;
- goto L_Heathin;
+////////////////////////////////////////////////////////////////
-L_ResetAllTut:
- set sorfina, 0;
- set tanisha, 0;
- set hasan, 0;
- set kaan, 0;
- set TUTORIAL, 0;
- set STARTAREA, 0;
- set FLAGS, FLAGS &~ FLAG_TUTORIAL_DONE;
- goto L_Heathin;
+S_Xmas2007:
+ if(!QUEST_xmas07_state) goto S_Return;
+ set QUEST_xmas07_state, 0;
+ set QUEST_xmas07_milk, 0;
+ set QUEST_xmas07_cookies, 0;
+ set QUEST_xmas07_presents, 0;
+ return;
-L_Heathin:
- if (HEATHIN_QUEST > 0)
- set QUEST_NorthTulimshar, (QUEST_NorthTulimshar & ~(NIBBLE_6_MASK)) | (HEATHIN_QUEST << NIBBLE_6_SHIFT);
- set HEATHIN_QUEST, 0;
- goto L_Easter;
+S_Halloween2007:
+ set QUEST_Halloween07_state, 0;
+ return;
-L_Easter:
- // Easter
- set EasterQuest, 0;
+S_Xmas2006:
+ if(!XMASQUEST1) goto S_Return;
+ set XMASQUEST1, 0;
+ set XMASQUEST2, 0;
+ set XMASQUEST3, 0;
+ set XMASQUEST4, 0;
+ set XMASQUEST5, 0;
+ set XMASQUEST6, 0;
+ set XMASQUEST7, 0;
+ set XMASQUEST8, 0;
+ set XMASQUEST9, 0;
+ set XMASQUEST10, 0;
+ set XMASQUEST11, 0;
+ set XMASQUEST12, 0;
+ set XMASQUEST13, 0;
+ set XMASQUEST14, 0;
+ set XMASQUEST15, 0;
+ set XMASQUEST16, 0;
+ set XMASQUEST17, 0;
+ set XMASQUEST18, 0;
+ set XMASQUEST19, 0;
+ set XMASQUEST20, 0;
+ return;
- // Halloween 2006
+S_Halloween2006:
+ if(!HWQUEST1) goto S_Return;
set HWQUEST1, 0;
set HWQUEST2, 0;
set HWQUEST3, 0;
@@ -92,60 +105,49 @@ L_Easter:
set HWQUEST18, 0;
set HWQUEST19, 0;
set HWQUEST20, 0;
+ return;
- // Christmas 2006
- set XMASQUEST1, 0;
- set XMASQUEST2, 0;
- set XMASQUEST3, 0;
- set XMASQUEST4, 0;
- set XMASQUEST5, 0;
- set XMASQUEST6, 0;
- set XMASQUEST7, 0;
- set XMASQUEST8, 0;
- set XMASQUEST9, 0;
- set XMASQUEST10, 0;
- set XMASQUEST11, 0;
- set XMASQUEST12, 0;
- set XMASQUEST13, 0;
- set XMASQUEST14, 0;
- set XMASQUEST15, 0;
- set XMASQUEST16, 0;
- set XMASQUEST17, 0;
- set XMASQUEST18, 0;
- set XMASQUEST19, 0;
- set XMASQUEST20, 0;
-
- set QUEST_Halloween07_state, 0;
-
- set QUEST_xmas07_state, 0;
- set QUEST_xmas07_milk, 0;
- set QUEST_xmas07_cookies, 0;
- set QUEST_xmas07_presents, 0;
+S_Easter:
+ set EasterQuest, 0;
+ return;
+S_Easter2008:
set QUEST_Easter08_state, 0;
+ return;
+S_Halloween2008:
set Halloween08, 0;
+ return;
+S_Xmas2008:
set QUEST_xmas08_state, 0;
+ return;
+S_Easter2009:
set QUEST_Easter09, 0;
+ set QUEST_Easter09_slots, 0;
+ return;
- set Candyman, 0; // Halloween 2009
+S_Halloween2009:
+ set Candyman, 0;
+ return;
+S_Xmas2009:
set QUEST_Christmas09_state, 0;
+ return;
- set QUEST_Easter09_slots, 0;
-
- // easter 2010
- // This must not be cleared: since some people would like to go to the easter island!
- // set Easter_2010_QuestState, 0;
+S_Easter2010:
+ if(!Easter_2010_QuestState) goto S_Return;
+ set Easter_2010_QuestState, 0;
set Easter_2010_EggState1, 0;
set Easter_2010_EggState2, 0;
set Easter_2010_EggState3, 0;
set Easter_2010_EggState4, 0;
set Easter_2010_EggState5, 0;
+ return;
- // halloween 2010
+S_Halloween2010:
+ if(!hween10) goto S_Return;
set hween10, 0;
set hween10_collect_canpump, 0;
set hween10_credits, 0;
@@ -155,8 +157,10 @@ L_Easter:
set hween10_bonecount, 0;
set hween10_collect_tondel, 0;
set hween10_paid, 0;
+ return;
- // Xmas 2010:
+S_Xmas2010:
+ if(!Xmas2010) goto S_Return;
set Count_Yellow, 0;
set Count_White, 0;
set Maze, 0;
@@ -164,32 +168,34 @@ L_Easter:
set White, 0;
set Xmas2010, 0;
set Golbenez_Inn_Cost, 0;
+ return;
+S_Easter2011:
set QUEST_Easter11, 0;
+ return;
- // contains bad karma information
- // set hw2011, 0;
+S_Halloween2011:
+ set hw2011, 0;
+ return;
+S_Xmas2011:
set xmas11, 0;
+ return;
+S_Easter2012:
set QUEST_Easter12, 0;
+ return;
+S_Xmas2012:
set xmas2012, 0;
+ return;
+S_Angus:
set QUEST_clothdyer_angus, 0;
-
- // Tulimshar and Mine Variables which aren't used anymore
- set Scorp, 0;
- set Bugleg, 0;
- // variable isn't used
set QUEST_clothdyer_state, 0;
- // variable was moved to a temporary player variable
- set KatzeBeenOutside, 0;
- // variable was moved to Nibble 1 of the variable Katze
- set LastHiss, 0;
- // quest was turned into a Daily Quest, so the variable isn't needed anymore
- set CaveSnakeLamp, 0;
+ return;
+S_Bitmask:
// move Scythe quest into bitmasked variable QUEST_Hurnscald
if (QUEST_Scythe_state)
set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_1_MASK)) | (QUEST_Scythe_state << NIBBLE_1_SHIFT);
@@ -206,8 +212,9 @@ L_Easter:
set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_3_MASK)) | (Inspector << NIBBLE_3_SHIFT);
set Inspector, 0;
set @inspector, 0;
+ return;
- //These lines are needed to migrate stuff from variables to flags
+S_Flags:
if (Open_Underground_Palace_Barrier)
set FLAGS, FLAGS | FLAG_OPENED_UNDERGROUND;
set Open_Underground_Palace_Barrier, 0;
@@ -227,109 +234,152 @@ L_Easter:
if (ChestQuest)
set FLAGS, FLAGS | FLAG_HURNSMINE_CHEST;
set ChestQuest, 0;
+ return;
- if (#BankAccount < 0)
- goto L_FixBank;
-
- goto L_Fix_Skills;
-
-L_FixBank:
+S_FixBank:
+ if(#BankAccount >= 0) goto S_Return;
if (Zeny >= -#BankAccount)
- goto L_Fix_Full;
-
+ goto S_Fix_Bank_Full;
// Partial fix
set #BankAccount, #BankAccount + Zeny;
set Zeny, 0;
- goto L_Fix_Skills;
+ return;
-L_Fix_Full:
+S_Fix_Bank_Full:
set Zeny, Zeny + #BankAccount;
set #BankAccount, 0;
- goto L_Fix_Skills;
+ return;
-L_Fix_Skills:
- if(getskilllv(SKILL_TRADE) > 0) setskill SKILL_TRADE, 0;
- if(getskilllv(SKILL_PARTY) > 0) setskill SKILL_PARTY, 0;
- if(getskilllv(SKILL_EMOTE) > 0) setskill SKILL_EMOTE, 0;
- goto L_Barber_Janitor;
+S_Remove_Skills:
+ if(getskilllv(SKILL_TRADE) < 1) goto S_Return;
+ setskill SKILL_TRADE, 0;
+ setskill SKILL_PARTY, 0;
+ setskill SKILL_EMOTE, 0;
+ return;
-L_Barber_Janitor:
- callfunc "getHeadStyles"; // this converts class, color and hair
- goto L_Return;
+S_Misc:
+ if(Death_Kill) set Death_Kill, 0;
+ set Scorp, 0; // Tulimshar and Mine Variables which aren't used anymore
+ set Bugleg, 0; // Tulimshar and Mine Variables which aren't used anymore
+ set KatzeBeenOutside, 0; // variable was moved to a temporary player variable
+ set LastHiss, 0; // variable was moved to Nibble 1 of the variable Katze
+ set CaveSnakeLamp, 0; // quest was turned into a Daily Quest, so the variable isn't needed anymore
+ return;
-L_Return:
+S_Tutorial:
+ if(!TUTORIAL && !sorfina) goto S_Return;
+ //TUTORIAL to STARTAREA
+ if ((sorfina) || (kaan) || (hasan) || (tanisha))
+ goto S_ResetAllTut;
+ set @tutorial_tmp, ((TUTORIAL & NIBBLE_0_MASK) >> NIBBLE_0_SHIFT);
+ // Tutorial
+ // Nibble 0 (sorfina, tanisha, kaan & hasan)
+ set STARTAREA, (STARTAREA & ~(NIBBLE_0_MASK) | (@tutorial_tmp << NIBBLE_0_SHIFT));
+ // Nibble 1 (valon)
+ set @tutorial_tmp, ((TUTORIAL & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT);
+ set @valon_done, (TUTORIAL & (1 << 7));
+ set @valon_start, (TUTORIAL & (1 << 6));
+ if (@valon_start)
+ set @tutorial_tmp, (@tutorial_tmp + 2);
+ if (@valon_done)
+ set @tutorial_tmp, 7;
+ set STARTAREA, (STARTAREA & ~(NIBBLE_1_MASK) | (@tutorial_tmp << NIBBLE_1_SHIFT));
+ // Nibble 2 (Counts)
+ set @tutorial_tmp, ((TUTORIAL & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
+ set STARTAREA, (STARTAREA & ~(NIBBLE_2_MASK) | (@tutorial_tmp << NIBBLE_2_SHIFT));
+ // Nibble 3 (Morgan)
+ set @tutorial_tmp, ((TUTORIAL & NIBBLE_6_MASK) >> NIBBLE_6_SHIFT);
+ set STARTAREA, (STARTAREA & ~(NIBBLE_3_MASK) | (@tutorial_tmp << NIBBLE_3_SHIFT));
+ // Nibble 4 (Zegas) Barrels shuffled
+ set @zegas_done, (TUTORIAL & (1 << 23));
+ set @zegas_start, (TUTORIAL & (1 << 16));
+ set @zegas_met, (TUTORIAL & (1 << 30));
+ set @tutorial_tmp, 0;
+ if (@zegas_met)
+ set @tutorial_tmp, 1;
+ if (@zegas_start)
+ set @tutorial_tmp, 2;
+ if (@zegas_done)
+ set @tutorial_tmp, 4;
+ set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (@tutorial_tmp << NIBBLE_4_SHIFT));
+ // Nibble 5 (Barrels)
+ set @tutorial_tmp, 0;
+ set STARTAREA, (STARTAREA & ~(NIBBLE_5_MASK) | (@tutorial_tmp << NIBBLE_5_SHIFT));
+ // Nibble 6 (Barrels)
+ set STARTAREA, (STARTAREA & ~(NIBBLE_6_MASK) | (@tutorial_tmp << NIBBLE_6_SHIFT));
+ set TUTORIAL, 0;
return;
-}
-// The variable TMW_Quest was used to save the progress in several subquests linearly.
-// The subquests are moved to different nibbles of other variables
-// to make it possible to do some of the quests in parallel.
-function|script|ClearVarTMW_Quest
-{
- if (TMW_Quest == 0) goto L_Done;
- if (TMW_Quest <= 6) goto L_Bernard_Mikhail;
- if (TMW_Quest <= 8) goto L_Sarah;
- if (TMW_Quest <= 10) goto L_Vincent;
- if (TMW_Quest <= 12) goto L_Sandra;
- if (TMW_Quest <= 40) goto L_Desert;
- goto L_Bandit;
-
-L_Bandit:
-// move Bandit subquest into Nibble 0 of QUEST_Hurnscald
- set @bandit, TMW_Quest - 40;
- set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_0_MASK) | (@bandit << NIBBLE_0_SHIFT));
- set TMW_Quest, 40;
- set @bandit, 0;
- goto L_Desert;
+S_ResetAllTut:
+ set sorfina, 0;
+ set tanisha, 0;
+ set hasan, 0;
+ set kaan, 0;
+ set TUTORIAL, 0;
+ set STARTAREA, 0;
+ set FLAGS, FLAGS &~ FLAG_TUTORIAL_DONE;
+ return;
-L_Desert:
-// move guard and miner subquest into Byte 2 (Nibble 4 and 5) of QUEST_SouthTulimshar
+S_Heathin:
+ if(!HEATHIN_QUEST) goto S_Return;
+ set QUEST_NorthTulimshar, (QUEST_NorthTulimshar & ~(NIBBLE_6_MASK)) | (HEATHIN_QUEST << NIBBLE_6_SHIFT);
+ set HEATHIN_QUEST, 0;
+ return;
+
+S_Desert: // move guard and miner subquest into Byte 2 (Nibble 4 and 5) of QUEST_SouthTulimshar
+ if(!TMW_QUEST || TMW_QUEST > 40) goto S_Return;
set @miners, TMW_Quest - 12;
set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(BYTE_2_MASK) | (@miners << BYTE_2_SHIFT));
set TMW_Quest, 12;
set @miners, 0;
- goto L_Sandra;
+ return;
-L_Sandra:
-// move Sandra subquest into Nibble 3 of QUEST_SouthTulimshar
+S_Sandra: // move Sandra subquest into Nibble 3 of QUEST_SouthTulimshar
+ if(!TMW_QUEST || TMW_QUEST > 12) goto S_Return;
set @sandra, TMW_Quest - 10;
set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_3_MASK) | (@sandra << NIBBLE_3_SHIFT));
set TMW_Quest, 10;
set @sandra, 0;
- goto L_Vincent;
+ return;
-L_Vincent:
-// move Vincent subquest into Nibble 2 of QUEST_SouthTulimshar
+S_Vincent: // move Vincent subquest into Nibble 2 of QUEST_SouthTulimshar
+ if(!TMW_QUEST || TMW_QUEST > 10) goto S_Return;
set @vincent, TMW_Quest - 8;
set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_2_MASK) | (@vincent << NIBBLE_2_SHIFT));
set TMW_Quest, 8;
set @vincent, 0;
- goto L_Sarah;
+ return;
-L_Sarah:
-// move Sarah subquest into Nibble 1 of QUEST_SouthTulimshar
+S_Sarah: // move Sarah subquest into Nibble 1 of QUEST_SouthTulimshar
+ if(!TMW_QUEST || TMW_QUEST > 8) goto S_Return;
set @sarah, TMW_Quest - 6;
set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_1_MASK) | (@sarah << NIBBLE_1_SHIFT));
set TMW_Quest, 6;
set @sarah, 0;
- goto L_Bernard_Mikhail;
+ return;
-L_Bernard_Mikhail:
-// move Bernard and Mikhail subquest into Nibble 0 of QUEST_SouthTulimshar
+S_Bernard_Mikhail: // move Bernard and Mikhail subquest into Nibble 0 of QUEST_SouthTulimshar
+ if(!TMW_QUEST || TMW_QUEST > 6) goto S_Return;
set QUEST_SouthTulimshar, (QUEST_SouthTulimshar & ~(NIBBLE_0_MASK) | (TMW_Quest << NIBBLE_0_SHIFT));
set TMW_Quest, 0;
- goto L_Done;
+ return;
-L_Done:
+S_Bandit: // move Bandit subquest into Nibble 0 of QUEST_Hurnscald
+ if(!TMW_QUEST) goto S_Return;
+ set @bandit, TMW_Quest - 40;
+ set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_0_MASK) | (@bandit << NIBBLE_0_SHIFT));
+ set TMW_Quest, 40;
+ set @bandit, 0;
return;
-}
--|script|#ClearGlobalVars|-1
-{
- end;
+L_Deprecated:
+ debugmes "Explicitely calling ClearVariables after login is deprecated.";
+ mapexit;
+}
-OnInit:
+function|script|ClearGlobalVars
+{
// Clear some entries of the arrays which save the Fluffy Hunting highscore list
set $@loop, 5;
goto L_FluffyClear;
@@ -387,6 +437,5 @@ L_EventClear:
// Variable was used in Voltain's script, was renamed and turned into a temporary variable
set $state, 0;
-
- end;
+ return;
}
diff --git a/world/map/npc/functions/debug.txt b/world/map/npc/functions/debug.txt
index be8d4fb4..44af4d40 100755
--- a/world/map/npc/functions/debug.txt
+++ b/world/map/npc/functions/debug.txt
@@ -2,7 +2,12 @@
function|script|Debug
{
- goto L_Begin;
+ if(!@debug_npc) goto L_Begin;
+ mes "The debug NPCs have been deprecated. Please use this magic spell instead:";
+ mes "";
+ mes "%%E ##a"+ getspellinvocation("debug0") +"##0";
+ set @debug_npc, 0;
+ goto L_Close;
L_Begin:
set @debug_mask, 65535;
@@ -59,12 +64,12 @@ L_Status:
"Close.", L_Close;
L_ChangeAllStats:
- statusup2 bStr, 99 - readparam(bStr);
- statusup2 bAgi, 99 - readparam(bAgi);
- statusup2 bVit, 99 - readparam(bVit);
- statusup2 bInt, 99 - readparam(bInt);
- statusup2 bDex, 99 - readparam(bDex);
- statusup2 bLuk, 99 - readparam(bLuk);
+ set Str, 99;
+ set Agi, 99;
+ set Vit, 99;
+ set Int, 99;
+ set Dex, 99;
+ set Luk, 99;
mes "You now have 99 in all stats.";
next;
goto L_Begin;
@@ -76,7 +81,7 @@ L_ChangeStrength:
goto L_StatTooLow;
if (@str > 99)
goto L_StatTooHigh;
- statusup2 bStr, @str - readparam(bStr);
+ set Str, @str;
goto L_ChangeAgility;
L_ChangeAgility:
@@ -86,7 +91,7 @@ L_ChangeAgility:
goto L_StatTooLow;
if (@agi > 99)
goto L_StatTooHigh;
- statusup2 bAgi, @agi - readparam(bAgi);
+ set Agi, @agi;
goto L_ChangeVitality;
L_ChangeVitality:
@@ -96,7 +101,7 @@ L_ChangeVitality:
goto L_StatTooLow;
if (@vit > 99)
goto L_StatTooHigh;
- statusup2 bVit, @vit - readparam(bVit);
+ set Vit, @vit;
goto L_ChangeIntelligence;
L_ChangeIntelligence:
@@ -106,7 +111,7 @@ L_ChangeIntelligence:
goto L_StatTooLow;
if (@int > 99)
goto L_StatTooHigh;
- statusup2 bInt, @int - readparam(bInt);
+ set Int, @int;
goto L_ChangeDexterity;
L_ChangeDexterity:
@@ -116,7 +121,7 @@ L_ChangeDexterity:
goto L_StatTooLow;
if (@dex > 99)
goto L_StatTooHigh;
- statusup2 bDex, @dex - readparam(bDex);
+ set Dex, @dex;
goto L_ChangeLuck;
L_ChangeLuck:
@@ -126,13 +131,13 @@ L_ChangeLuck:
goto L_StatTooLow;
if (@luk > 99)
goto L_StatTooHigh;
- statusup2 bLuk, @luk - readparam(bLuk);
- mes "You now have " + readparam(bStr) + " in strength.";
- mes "You now have " + readparam(bAgi) + " in agility.";
- mes "You now have " + readparam(bVit) + " in vitality.";
- mes "You now have " + readparam(bInt) + " in intelligence.";
- mes "You now have " + readparam(bDex) + " in dexterity.";
- mes "You now have " + readparam(bLuk) + " in luck.";
+ set Luk, @luk;
+ mes "You now have " + Str + " in strength.";
+ mes "You now have " + Agi + " in agility.";
+ mes "You now have " + Vit + " in vitality.";
+ mes "You now have " + Int + " in intelligence.";
+ mes "You now have " + Dex + " in dexterity.";
+ mes "You now have " + Luk + " in luck.";
next;
goto L_Begin;
@@ -165,8 +170,8 @@ L_ChangeStrengthSingle:
goto L_StatTooLow;
if (@str > 99)
goto L_StatTooHigh;
- statusup2 bStr, @str - readparam(bStr);
- mes "You now have " + readparam(bStr) + " in strength.";
+ set Str, @str;
+ mes "You now have " + Str + " in strength.";
next;
goto L_Begin;
@@ -177,8 +182,8 @@ L_ChangeAgilitySingle:
goto L_StatTooLow;
if (@agi > 99)
goto L_StatTooHigh;
- statusup2 bAgi, @agi - readparam(bAgi);
- mes "You now have " + readparam(bAgi) + " in agility.";
+ set Agi, @agi;
+ mes "You now have " + Agi + " in agility.";
next;
goto L_Begin;
@@ -189,8 +194,8 @@ L_ChangeVitalitySingle:
goto L_StatTooLow;
if (@vit > 99)
goto L_StatTooHigh;
- statusup2 bVit, @vit - readparam(bVit);
- mes "You now have " + readparam(bVit) + " in vitality.";
+ set Vit, @vit;
+ mes "You now have " + Vit + " in vitality.";
next;
goto L_Begin;
@@ -201,8 +206,8 @@ L_ChangeIntelligenceSingle:
goto L_StatTooLow;
if (@int > 99)
goto L_StatTooHigh;
- statusup2 bInt, @int - readparam(bInt);
- mes "You now have " + readparam(bInt) + " in intelligence.";
+ set Int, @int;
+ mes "You now have " + Int + " in intelligence.";
next;
goto L_Begin;
@@ -213,8 +218,8 @@ L_ChangeDexteritySingle:
goto L_StatTooLow;
if (@dex > 99)
goto L_StatTooHigh;
- statusup2 bDex, @dex - readparam(bDex);
- mes "You now have " + readparam(bDex) + " in dexterity.";
+ set Dex, @dex;
+ mes "You now have " + Dex + " in dexterity.";
next;
goto L_Begin;
@@ -225,8 +230,8 @@ L_ChangeLuckSingle:
goto L_StatTooLow;
if (@luk > 99)
goto L_StatTooHigh;
- statusup2 bLuk, @luk - readparam(bLuk);
- mes "You now have " + readparam(bLuk) + " in luck.";
+ set Luk, @luk;
+ mes "You now have " + Luk + " in luck.";
next;
goto L_Begin;
@@ -912,12 +917,14 @@ L_ResetAll:
goto L_Begin;
L_Close:
- close;
+ close2;
+ return;
}
029-2,30,26,0|script|Debug#0|154
{
+ set @debug_npc, 1;
callfunc "Debug";
end;
OnInit:
@@ -928,6 +935,7 @@ OnInit:
001-1,53,47,0|script|Debug#1|154
{
+ set @debug_npc, 1;
callfunc "Debug";
end;
OnInit:
@@ -936,8 +944,9 @@ OnInit:
end;
}
-009-1,52,33,0|script|Debug#2|154
+009-1,45,33,0|script|Debug#2|154
{
+ set @debug_npc, 1;
callfunc "Debug";
end;
OnInit:
@@ -948,6 +957,7 @@ OnInit:
020-1,75,85,0|script|Debug#3|154
{
+ set @debug_npc, 1;
callfunc "Debug";
end;
OnInit:
@@ -956,18 +966,9 @@ OnInit:
end;
}
-017-9,21,24,0|script|Debug#4|154
-{
- callfunc "Debug";
- end;
-OnInit:
- if (!debug)
- disablenpc "Debug#4";
- end;
-}
-
027-2,125,103,0|script|Debug#5|154
{
+ set @debug_npc, 1;
callfunc "Debug";
end;
OnInit:
diff --git a/world/map/npc/functions/default_npc_checks.txt b/world/map/npc/functions/default_npc_checks.txt
index 446cf961..c714c931 100644
--- a/world/map/npc/functions/default_npc_checks.txt
+++ b/world/map/npc/functions/default_npc_checks.txt
@@ -1,13 +1,16 @@
// Default NPC Checks
-// Author: Wushin
+// Author: Wushin, mekolat
// Range
-// Map, X, Y, Distance in Tiles
-// setarray @npc_loc, 24, 113, 4;
+// Distance in Tiles
+// set @npc_distance, 4;
function|script|PCtoNPCRange
{
set @npc_check, 0;
- set @Nmap$, getmap() + "";
+ set @Nmap$, strnpcinfo(3);
+ if(!@npc_distance) set @npc_distance, 4; // <== default distance
+ cleararray @npc_loc, 0, 3;
+ setarray @npc_loc, getnpcx(), getnpcy(), @npc_distance;
set @Nx1, (@npc_loc[0] - @npc_loc[2]);
set @Ny1, (@npc_loc[1] - @npc_loc[2]);
set @Nx2, (@npc_loc[0] + @npc_loc[2]);
@@ -15,9 +18,21 @@ function|script|PCtoNPCRange
if (isin(@Nmap$, @Nx1, @Ny1, @Nx2, @Ny2))
goto L_Return;
set @npc_check, 1;
+ if(@distance_handler) goto L_Return;
+ set @dnpc_name$, strnpcinfo(1);
+ if(@dnpc_name$ != "") goto L_Named;
+ message strcharinfo(0), "##3Server : ##BYou need to move closer to interact with this npc.";
+ goto L_Return;
+
+L_Named:
+ message strcharinfo(0), "##3"+@dnpc_name$+" : ##BPlease move closer.";
goto L_Return;
L_Return:
+ set @dnpc_name$, "";
+ set @distance_handler, 0;
+ set @npc_distance, 0;
+ cleararray @npc_loc, 0, 3;
return;
}
@@ -109,7 +124,7 @@ L_ReturnMissing:
goto L_MissingMsg;
L_MissingMsg:
- mes "[@@"+@delitem_ids[@msg_loop]+"|"+getitemname(@delitem_ids[@msg_loop])+"@@] "+countitem(getitemname(@delitem_ids[@msg_loop]))+"/"+@delitem_counts[@msg_loop];
+ mes "[@@"+@delitem_ids[@msg_loop]+"|"+getitemlink(@delitem_ids[@msg_loop])+"@@] "+countitem(getitemlink(@delitem_ids[@msg_loop]))+"/"+@delitem_counts[@msg_loop];
goto L_NextMsgCheck;
L_NextMsgCheck:
diff --git a/world/map/npc/functions/ferry.txt b/world/map/npc/functions/ferry.txt
index aad92b14..eb7196d1 100644
--- a/world/map/npc/functions/ferry.txt
+++ b/world/map/npc/functions/ferry.txt
@@ -1,6 +1,6 @@
// The ferry system
-017-9,27,28,0|script|#FerryConfig|-1
+017-9,27,28,0|script|#FerryConfig|32767
{
end;
@@ -123,7 +123,8 @@ L_WorldFerry:
goto L_Close;
L_Close:
- close;
+ close2;
+ return;
}
function|script|BoardFerry
@@ -134,6 +135,7 @@ function|script|BoardFerry
"No.", L_Return;
L_Board:
+ close2;
warp "035-2",39,29;
goto L_Return;
@@ -149,6 +151,7 @@ function|script|BoardCandorFerry
"No.", L_Return;
L_Board:
+ close2;
warp "036-2",39,29;
goto L_Return;
diff --git a/world/map/npc/functions/game_rules.txt b/world/map/npc/functions/game_rules.txt
index d0b30c0d..cb72dfec 100644
--- a/world/map/npc/functions/game_rules.txt
+++ b/world/map/npc/functions/game_rules.txt
@@ -3,8 +3,8 @@
function|script|GameRules
{
- mes "[Server Game Rules]";
- mes "Please Select Language.";
+ mes "[Game Rules]";
+ mes "Please select a language:";
menu
"English", L_English,
"Deutsch (German)", L_German,
@@ -15,28 +15,30 @@ function|script|GameRules
"Svenska (Swedish)", L_Swedish,
"Portugues (Portuguese)", L_Portuguese,
"Polski (Polish)", L_Polish,
- "Italiano (Italian)", L_Italian;
+ "Italiano (Italian)", L_Italian,
+ "繁體中文 (Traditional Chinese)", L_zhHant,
+ "Русский (Russian)", L_Russian;
L_English:
- mes "Players breaking the following rules may be banned (up to and including a permanent ban) or have their characters reset at the GM's discretion:";
- mes "1. Do not abuse other players (insults, swearing, and the like directed to a particular person or persons)";
- mes "2. No bots (including ANY AFK activity or automated following)";
- mes "3. No spamming / flooding (including trade spam)";
- mes "4. No begging";
- mes "5. Speak English on public chat";
- mes "6. Treat others the same way you would like to be treated";
+ mes "Players breaking the following rules may be banned for any length of time (even permanently) or have their characters reset at a GM's discretion:";
+ mes "1) Do not abuse other players. Insults, swearing, and the like are not to be directed towards a particular person or group.";
+ mes "2) No bots – including ##Bany##b AFK activity or automated actions of any sort.";
+ mes "3) No spamming or flooding (including messages, whispers, and trade requests).";
+ mes "4) No begging.";
+ mes "5) Speak ##Bonly##b English in the public chat.";
+ mes "6) Treat others how you would like to be treated.";
mes "AFK botting will be determined by talking to players who are moving and/or attacking.";
mes "Automated following will be determined by observation.";
goto L_End;
L_German:
mes "Wir bitten um das Einhalten folgender Regeln:";
- mes "1. Keine Beleidigungen, Schimpfwörter, Schmähungen oder Rufmord.";
- mes "2. Keine 'bots' (automatisierte Spieler). Dies beinhaltet JEGLICHE Teilnahme am Spiel während der Abwesenheit des Spielers. Es beinhaltet auch das automatisierte Folgen anderer Spieler.";
- mes "3. Kein 'spamming' oder 'flooding' (schnelles Wiederholen von Nachrichten oder Aufforderungen zum Warenhandel).";
- mes "4. Kein Betteln.";
- mes "5. Englisch ist die einzig zulässige Sprache im öffentlichen Raum.";
- mes "6. Behandele andere so, wie du selbst behandelt werden willst.";
+ mes "1) Keine Beleidigungen, Schimpfwörter, Schmähungen oder Rufmord.";
+ mes "2) Keine 'bots' (automatisierte Spieler). Dies beinhaltet JEGLICHE Teilnahme am Spiel während der Abwesenheit des Spielers. Es beinhaltet auch das automatisierte Folgen anderer Spieler.";
+ mes "3) Kein 'spamming' oder 'flooding' (schnelles Wiederholen von Nachrichten oder Aufforderungen zum Warenhandel).";
+ mes "4) Kein Betteln.";
+ mes "5) Englisch ist die einzig zulässige Sprache im öffentlichen Raum.";
+ mes "6) Behandele andere so, wie du selbst behandelt werden willst.";
mes "Jegliche Regelverstöße können bestraft werden, entweder durch ein Zurücksetzen der Charaktereigenschaften und -besitztümer auf den Ausgangszustand, oder durch einen temporären oder permanenten Ausschluss aus dem Spiel.";
mes "Automatisiertes Spielverhalten liegt vor, wenn ein sich bewegender/kämpfender Spieler nicht intelligent auf Gesprächsaufforderungen reagiert.";
goto L_End;
@@ -44,98 +46,121 @@ L_German:
L_Dutch:
mes "ATTENTION: this translation is outdated. Please refer to the English version and submit a patch.";
mes "Spelers die de volgende regels overtreden lopen het risico gebanned te worden (oplopend tot een permanente ban) of een reset te krijgen:";
- mes "1. Misbruik geen andere spelers (vloeken, groftaal gebruik, enzovoort tegen een bepaalde persoon of personen)";
- mes "2. Geen 'bots' (geautomatiseerde speler) en botten betekend ELKE activiteit terwijl je van je toetsenboord weg bent";
- mes "3. Verboden te 'spammen' (inclusief het spammen van ruilaanvragen)";
- mes "4. Verboden te bedelen";
- mes "5. Spreek Engels op de publieke chat";
- mes "6. Behandel andere zoals ook jij behandeld wilt worden";
+ mes "1) Misbruik geen andere spelers (vloeken, groftaal gebruik, enzovoort tegen een bepaalde persoon of personen)";
+ mes "2) Geen 'bots' (geautomatiseerde speler) en botten betekend ELKE activiteit terwijl je van je toetsenboord weg bent";
+ mes "3) Verboden te 'spammen' (inclusief het spammen van ruilaanvragen)";
+ mes "4) Verboden te bedelen";
+ mes "5) Spreek Engels op de publieke chat";
+ mes "6) Behandel andere zoals ook jij behandeld wilt worden";
mes "Botten word bepaald door te praten tegen spelers die aan het bewegen en/of aanvallen zijn.";
goto L_End;
L_Danish:
mes "ATTENTION: this translation is outdated. Please refer to the English version and submit a patch.";
mes "Spillere der ikke overholder de foelgende regner, kan risikere at blive banned (op til et permanent ban) eller faa deres bruger nulstillet af en spilmester (GM).";
- mes "1. Misbrug ikke medspillere (fornaerm dem ikke, svaerg ikke og mobning er forbudt)";
- mes "2. Det er forbudt at bruge bots (Botting betyder at man er aktiv inde i spillet, imens man er vaek fra ens keyboard)";
- mes "3. Det er forbudt at spamme i chatten, eller lave trade spam (spamme betyder at man sender mange beskeder efter hinanden)";
- mes "4. Det er forbudt at tigge (for eksempel: Maa jeg ikke nok faa dit svaerd, kom nu, vaer nu soed... og saa videre)";
- mes "5. Det er forbudt at snakke andre sprog end Engelsk, i den aabne chat. (Dog er det lovligt ved at bruge foelgende kommandoen /whisper)";
- mes "6. Husk at goere mod andre, som du vil have de skal goere imod dig (opfoer dig ordenligt!)";
+ mes "1) Misbrug ikke medspillere (fornaerm dem ikke, svaerg ikke og mobning er forbudt)";
+ mes "2) Det er forbudt at bruge bots (Botting betyder at man er aktiv inde i spillet, imens man er vaek fra ens keyboard)";
+ mes "3) Det er forbudt at spamme i chatten, eller lave trade spam (spamme betyder at man sender mange beskeder efter hinanden)";
+ mes "4) Det er forbudt at tigge (for eksempel: Maa jeg ikke nok faa dit svaerd, kom nu, vaer nu soed... og saa videre)";
+ mes "5) Det er forbudt at snakke andre sprog end Engelsk, i den aabne chat. (Dog er det lovligt ved at bruge foelgende kommandoen /whisper)";
+ mes "6) Husk at goere mod andre, som du vil have de skal goere imod dig (opfoer dig ordenligt!)";
mes "Botting bliver fastlagt paa grundlag af, at man snakker til andre spillere, der gaar rundt og/eller der angriber og de ikke svare igen.";
goto L_End;
L_French:
- mes "ATTENTION: this translation is outdated. Please refer to the English version and submit a patch.";
- mes "Les joueurs ne respectant pas les regles suivantes pourront, a la discretion des moderateurs (GM), etre bannis (jusqu'au banissement eternel inclus) ou avoir leur personnage reinitialise:*";
- mes "1. Ne manquez pas de respect envers les autres joueurs (insultes, language grossier, et autres choses du meme genre a l'intention d'un(e) joueur(se) en particulier ou d'un groupe de joueurs(ses))";
- mes "2. N'utilisez pas de \"bot\" (ceci inclus n'importe quelle activite dans le jeu en etant loin du clavier, dont poser un objet sur le clavier pour attaquer automatiquement les monstres)";
- mes "3. Ne faites pas de publicite inadequate (spam) et de repetitions intempestives (flood) (ceci inclus la repetition de demande de troc (trade))";
- mes "4. Ne demandez pas d'items ou d'argent (les echanges doivent se faire de preference sur forums.themanaworld.org)";
- mes "5. Parlez anglais dans les salons de discussions publics (principalement en ville)";
- mes "6. Traitez les autres de la meme maniere que vous voudriez etre traite(e)";
- mes "L'utilisation de \"bot\" sera determinee en parlant aux joueurs(ses) en train de bouger et/ou d'attaquer.";
+ mes "Les joueurs enfreignant les règles suivantes sont sujets, à la discrétion des modérateurs, au banissement temporaire ou permanent de leur compte ou à une réinitialisation de leur personnage.";
+ mes "1) Aucun abus envers autrui n'est toléré. Ceci inclus (mais n'est pas restreint à) les insultes, le non-respect, le langage grossier, le racisme, l'homophobie, etc.";
+ mes "2) Toute forme d'automatisation (bot) est interdite. Ceci inclus toute activité effectuée sans la presence de l'utilisateur (botting) ou le suivi automatique d'un personnage (following).";
+ mes "3) Le spam / l'envoi répeté d'un même message est interdit.";
+ mes "4) Pas de mendiant. Ne demandez pas d'items ou de l'argent aux autres joueurs.";
+ mes "5) Vous devez impérativement parler anglais dans l'onglet General. Les autres langues sont autorisées dans les conversations privées (Whisper), les guildes (Guild), ou les groupes (Party).";
+ mes "6) Traitez les autres joueurs de la façon dont vous voudriez être traité.";
+ mes "L'utilisation de logiciel d'automatisation (bot) sera vérifiée en parlent aux joueurs en mouvement et/ou attaquant.";
+ mes "Le déplacement automatique (following) sera déterminé par observation.";
goto L_End;
L_Spanish:
mes "Los jugadores que rompan las siguientes reglas pueden ser bloqueados (incluso permanentemente), o se les restablecerán sus personajes, según el criterio del GM:";
- mes "1. No abusar de otros jugadores (insultos, malas palabras, y similares dirigidas a una o varias personas)";
- mes "2. No utilizar programas automáticos (incluyendo el seguimiento automático y CUALQUIER otra actividad mientras el jugador está lejos del teclado)";
- mes "3. No enviar mensajes publicitarios ni inundar el chat de mensajes (incluyendo los mensajes de intercambio)";
- mes "4. No mendigar.";
- mes "5. Hablar únicamente en Inglés en el chat público";
- mes "6. Tratar a los demás de la misma forma que le gustaría ser tratado";
+ mes "1) No abusar de otros jugadores (insultos, malas palabras, y similares dirigidas a una o varias personas)";
+ mes "2) No utilizar programas automáticos (incluyendo el seguimiento automático y CUALQUIER otra actividad mientras el jugador está lejos del teclado)";
+ mes "3) No enviar mensajes publicitarios ni inundar el chat de mensajes (incluyendo los mensajes de intercambio)";
+ mes "4) No mendigar.";
+ mes "5) Hablar únicamente en Inglés en el chat público";
+ mes "6) Tratar a los demás de la misma forma que le gustaría ser tratado";
mes "El uso de programas automáticos para jugar sin estar frente al teclado será determinado al hablar con los jugadores que estén moviéndose y/o atacando.";
mes "El seguimiento automático será determinado por observación.";
goto L_End;
L_Swedish:
mes "Spelare som bryter mot dessa regler riskerar att bli utkastade eller portade (antingen under kort period eller permanent), den som blivit portad/bannlyst ut kan be en GM om att starta om sitt konto.";
- mes "1. Förolämpa inte medspelare (svordomar och annat riktat till att skada en eller flera individer)";
- mes "2. Inga bottar (med bottande avses ALLA aktiviteter som sker när spelaren inte aktivt spelar eller styr sin karraktär)";
- mes "3. Inget spammande/floodande (inklusive meddelanden om byteshandel)";
- mes "4. Tigg inte";
- mes "5. Prata bara engelska i den offentliga chatten";
- mes "6. Behandla andra som du vill bli behandlad";
+ mes "1) Förolämpa inte medspelare (svordomar och annat riktat till att skada en eller flera individer)";
+ mes "2) Inga bottar (med bottande avses ALLA aktiviteter som sker när spelaren inte aktivt spelar eller styr sin karraktär)";
+ mes "3) Inget spammande/floodande (inklusive meddelanden om byteshandel)";
+ mes "4) Tigg inte";
+ mes "5) Prata bara engelska i den offentliga chatten";
+ mes "6) Behandla andra som du vill bli behandlad";
mes "Vid misstankar om bottande kontrolleras detta genom att prata med spelaren under dess kringvandrande eller attackerande.";
goto L_End;
L_Portuguese:
mes "ATTENTION: this translation is outdated. Please refer to the English version and submit a patch.";
mes "Jogadores que quebrarem as regras que se seguem serao banidos (temporariamente ou permanentemente), ou a possibilidade dos caracteres serem limpos a descricao do Mestre do Jogo (GM).";
- mes "1. Nao tratar mal os outros jogadores (isto, insultar, dizer palavroes ou chamar nomes a pessoas em particular, etc.)";
- mes "2. Proibido \"botting\", que quer dizer qualquer actividade do caracter enquanto o jogador estiver longe do teclado.";
- mes "3. Nao abusar da caixa de texto com mensagens repetitivas, ou abusar da funcao de trocar com outros jogadores.";
- mes "4. Pedintes serao ignorados, ou banidos.";
- mes "5. Fale ingles em lugares publicos.";
- mes "6. Trate os outros da mesma maneira que quer ser tratado(a).";
+ mes "1) Nao tratar mal os outros jogadores (isto, insultar, dizer palavroes ou chamar nomes a pessoas em particular, etc.)";
+ mes "2) Proibido \"botting\", que quer dizer qualquer actividade do caracter enquanto o jogador estiver longe do teclado.";
+ mes "3) Nao abusar da caixa de texto com mensagens repetitivas, ou abusar da funcao de trocar com outros jogadores.";
+ mes "4) Pedintes serao ignorados, ou banidos.";
+ mes "5) Fale ingles em lugares publicos.";
+ mes "6) Trate os outros da mesma maneira que quer ser tratado(a).";
mes "O \"botting\" sera determinado, falando com os jogadores que se movem e/ou atacam.";
goto L_End;
L_Polish:
mes "ATTENTION: this translation is outdated. Please refer to the English version and submit a patch.";
mes "Konta graczy lamiacych nastepujace zasady moga zostac zablokowane (w niektorych przypadkach nawet nieodwolalnie) lub zresetowane przez GM:";
- mes "1. Nie wykorzystuj innych graczy (wymuszenia, przeklinanie, itp.)";
- mes "2. Zabrania sie korzystania z botow (przez boty rozumiemy kazda aktywnosc gdy gracz przebywa z dala od klawiatury)";
- mes "3. Zabrania sie spamowania / flodowania (wliczajac takze natarczywe oferty handlowe)";
- mes "4. Zabrania sie zebrania";
- mes "5. Na publicznym kanale rozmawiamy po angielsku";
- mes "6. Traktuj innych tak jak sam chcesz byc traktowany";
+ mes "1) Nie wykorzystuj innych graczy (wymuszenia, przeklinanie, itp.)";
+ mes "2) Zabrania sie korzystania z botow (przez boty rozumiemy kazda aktywnosc gdy gracz przebywa z dala od klawiatury)";
+ mes "3) Zabrania sie spamowania / flodowania (wliczajac takze natarczywe oferty handlowe)";
+ mes "4) Zabrania sie zebrania";
+ mes "5) Na publicznym kanale rozmawiamy po angielsku";
+ mes "6) Traktuj innych tak jak sam chcesz byc traktowany";
mes "Uzywanie botow zostanie okreslone na podstawie rozmow z innymi graczami podczas aktywnosci gracza.";
goto L_End;
L_Italian:
mes "Gli account dei giocatori che infrangeranno le seguenti regole verranno bloccati (anche permanentemente) o i loro personaggi saranno resettati, a discrezione dei GM:";
- mes "1. Non trattare male gli altri giocatori (questo include insulti, imprecazioni, e simili, diretti verso una persona in particolare o verso gruppi di persone)";
- mes "2. Non usare bot (ossia non effettuare NESSUNA attività quando non si è al computer)";
- mes "3. Non effettuare spam o scrivere ripetutamente messaggi inutili (incluso spam con richieste di scambio)";
- mes "4. Non fare il mendicante, ovvero non importunare gli altri chiedendo soldi o oggetti";
- mes "5. Non parlare altre lingue al di fuori dell'inglese nella chat pubblica";
- mes "6. Non fare agli altri ciò che non vuoi sia fatto a te.";
+ mes "1) Non trattare male gli altri giocatori (questo include insulti, imprecazioni, e simili, diretti verso una persona in particolare o verso gruppi di persone)";
+ mes "2) Non usare bot (ossia non effettuare NESSUNA attività quando non si è al computer)";
+ mes "3) Non effettuare spam o scrivere ripetutamente messaggi inutili (incluso spam con richieste di scambio)";
+ mes "4) Non fare il mendicante, ovvero non importunare gli altri chiedendo soldi o oggetti";
+ mes "5) Non parlare altre lingue al di fuori dell'inglese nella chat pubblica";
+ mes "6) Non fare agli altri ciò che non vuoi sia fatto a te.";
mes "I bot saranno individuati scrivendo ai giocatori sospetti che attaccano o camminano, esaminandone le risposte e i movimenti.";
mes "Chiunque segua automaticamente un altro giocatore senza dimostrare di non essere un bot, verrà considerato come tale.";
goto L_End;
+L_zhHant:
+ mes "以下為TMW的遊戲規則,違反的玩家會被封鎖(有機會永久封鎖)或重設遊戲資料:";
+ mes "1) 不要謾罵其他玩家 (侮辱, 粗言穢語, 或針對某玩家的攻擊)";
+ mes "2) 禁止外掛(所有玩家離開電腦時的活動)";
+ mes "3) 禁止外掛(所有玩家離開電腦時的活動)";
+ mes "4) 不可乞討";
+ mes "5) 在公開場合需說英語";
+ mes "6) 己所不欲,勿施於人";
+ mes "離開鍵盤的外掛玩家會經對話的方式識別。";
+ goto L_End;
+
+L_Russian:
+ mes "Игроки, уличенные в нарушении следующих правил, могут быть забанены (включая пожизненный бан) или столкнутся с тем, что их игровая статистика и опыт будут понижены, на усмотрение модераторов GM:";
+ mes "1) Не обижайте других игроков (оскорбления, ругательства и иное, направленное на унижения достоинства отдельного человека или людей).";
+ mes "2) Никаких ботов (включая любую активность, происходящую без взаимодействия с клавиатурой (AFK), а также автоматическое следование за игроком).";
+ mes "3) Никакого спама и флуда (включая навязчивую торговлю).";
+ mes "4) Запрещено попрошайничество.";
+ mes "5) Во время публичного общения надлежит использовать английский язык.";
+ mes "6) Обращайтесь с другими так, как вы хотели, чтобы другие с вами обращались.";
+ mes "Активность, происходящая без взаимодействия с клавиатурой (AFK) будет определяться путем общения с авто- перемещающимися и атакующими игроками.";
+ mes "Автоматическое следование за игроком будет выявляться путем наблюдения.";
+ goto L_End;
+
L_End:
if (TUT_var == 0)
set TUT_var, gettimetick(2);
diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt
index cf331060..7d380b0c 100644
--- a/world/map/npc/functions/global_event_handler.txt
+++ b/world/map/npc/functions/global_event_handler.txt
@@ -1,43 +1,37 @@
-017-9,0,0,0|script|#GlobalHandler|-1
+// This is the global event dispatcher
+// Do not add code to this file. Please only add callfuncs
+//
+// Author: meko
+
+-|script|#GlobalHandler|32767
{
end;
-OnPCLoginEvent: // this does not work yet but as soon as it is implemented it will start working
- callfunc "ClearVariables";
+OnPCLoginEvent:
+ set @login_event, 1;
+ callfunc "getHeadStyles"; // converts class, color and hair
+ callfunc "ClearVariables"; // removes / converts old variables
+ callfunc "DisplayMOTD"; // send the motd to the client, if enabled
+ callfunc "getBroadcast"; // get the scheduled broadcast, if any
+ // add more here
+ set @login_event, 2;
end;
OnPCKillEvent:
- set Death_Kill, Death_Kill + 1; // this counts the number of players you have killed
+ callfunc "elanore_decrease_exp"; // decrease heal exp for doing bad things
end;
OnPCKilledEvent:
- goto L_Fightclub_Killed; // this is used by the 1v1 arena
+ callfunc "fightclub_event_killed"; // this is used by the 1v1 arena
+ end;
OnPCDieEvent:
callfunc "fightclub_GoBack"; // this used by the battle master
- goto L_Fightclub_Die; // this is used by the 1v1 arena
-
-// custom handlers below
-
-L_Fightclub_Killed:
- set @duel_killer, 0;
- if(@Duel_Fighter != 1) goto L_End;
- if(getmap() != "009-7") goto L_End;
- set $@duel_loser, getcharid(3); // grab the rid of the victim
- set $@duel_winner, @killerrid; // grab the rid of the killer
- set @killerrid, 0; // reset killerid
- callfunc "fightclub_death";
- goto L_End;
-
-L_Fightclub_Die:
- set @duel_killer, 0;
- if(@Duel_Fighter != 1) goto L_End;
- if(getmap() != "009-7") goto L_End;
- set @killerrid, 0; // since the player was not murdered, the killerrid is 0
- set $@duel_loser, getcharid(3); // grab the rid of the victim
- callfunc "fightclub_death";
- goto L_End;
+ callfunc "fightclub_event_die"; // this is used by the 1v1 arena
+ end;
-L_End:
+OnInit:
+ callfunc "ClearGlobalVars";
+ callfunc "MOTD"; // set the MOTD array
end;
}
diff --git a/world/map/npc/functions/gm_island.txt b/world/map/npc/functions/gm_island.txt
index 5efe105e..89c0790a 100644
--- a/world/map/npc/functions/gm_island.txt
+++ b/world/map/npc/functions/gm_island.txt
@@ -1,5 +1,5 @@
// Add Localized Warp in town centers and Message to GM Island
--|script|#GmConfig|-1
+-|script|#GmConfig|32767
{
end;
@@ -16,11 +16,6 @@ function|script|GmWarp
}
function|script|GmDebug
{
- if (getgmlevel() < 60)
- goto L_Return;
- goto L_Main;
-
-L_Main:
mes "[Gm Debug]";
mes "What do you want to do?";
menu
@@ -31,22 +26,14 @@ L_GmStart:
enablenpc "Gm Event#1";
enablenpc "Gm Event#2";
enablenpc "Gm Event#3";
- goto L_Return;
+ return;
L_GmStop:
disablenpc "Gm Event#1";
disablenpc "Gm Event#2";
disablenpc "Gm Event#3";
- goto L_Return;
-
-L_Return:
return;
}
-017-9,32,21,0|script|Gm Event Debug|368
-{
- callfunc "GmDebug";
- close;
-}
001-1,49,68,0|script|Gm Event#1|368,0,0
{
callfunc "GmWarp";
diff --git a/world/map/npc/functions/inn.txt b/world/map/npc/functions/inn.txt
index ffa75582..7cf281bd 100644
--- a/world/map/npc/functions/inn.txt
+++ b/world/map/npc/functions/inn.txt
@@ -2,12 +2,13 @@
function|script|Inn
{
+ if(@npcname$ == "") set @npcname$, strnpcinfo(1);
mes "[" + @npcname$ + "]";
mes "\"Would you like to rest? It's only " + @cost + " gp.\"";
next;
menu
"Yes", L_Next,
- "No", L_No;
+ "No", L_Close;
L_Next:
if (Zeny < @cost)
@@ -17,15 +18,19 @@ L_Next:
mes "[" + @npcname$ + "]";
mes "\"Sleep well!\"";
- close;
+ next;
+ goto L_Close;
-L_No:
+L_Close:
mes "[" + @npcname$ + "]";
mes "\"See you.\"";
- close;
+ set @npcname$, "";
+ close2;
+ return;
L_NoMoney:
mes "[" + @npcname$ + "]";
mes "\"You don't have enough money to stay here.\"";
- close;
+ next;
+ goto L_Close;
}
diff --git a/world/map/npc/functions/magic.txt b/world/map/npc/functions/magic.txt
index 38acb817..aaa8a618 100644
--- a/world/map/npc/functions/magic.txt
+++ b/world/map/npc/functions/magic.txt
@@ -13,7 +13,7 @@
function|script|MagicGainBasic
{
set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_DRANK_POTION;
- close;
+ return;
}
// ------------------------------------------------------------
diff --git a/world/map/npc/functions/mob_points.txt b/world/map/npc/functions/mob_points.txt
index 7f1cb1db..d60c68b6 100644
--- a/world/map/npc/functions/mob_points.txt
+++ b/world/map/npc/functions/mob_points.txt
@@ -138,8 +138,8 @@ function|script|MobPoints
if (MPQUEST == 1)
set Mobpt, Mobpt + @points[@mobID - 1002];
- callfunc "ValonState";
- if (((@valon_state >= 2) && (@valon_state < 6)) && (@mobID == $@ValonMob[@valon_mob]))
+ callfunc "ValonCount";
+ if (((QL_VALON >= 2) && (QL_VALON < 6)) && (@mobID == $@ValonMob[@valon_mob]))
goto L_ValonMobKill;
goto L_NatureKarma;
@@ -184,20 +184,17 @@ L_NatureKarma:
set @value, 3;
if (@value == 0)
- goto L_end;
+ goto L_Return;
callfunc "QuestSagathaAnnoy";
- goto L_end;
+ goto L_Return;
L_good:
set @value, 1;
callfunc "QuestSagathaHappy";
- goto L_end;
-
-L_end:
- set @value, 0;
- end;
+ goto L_Return;
L_Return:
+ set @value, 0;
return;
}
diff --git a/world/map/npc/functions/motd.txt.example b/world/map/npc/functions/motd.txt.example
new file mode 100644
index 00000000..082d31d6
--- /dev/null
+++ b/world/map/npc/functions/motd.txt.example
@@ -0,0 +1,11 @@
+function|script|MOTD
+{
+ setarray $@MOTD$,
+
+ "Welcome to The Mana World! (running on tmwAthena)",
+ "[@@http://ow.ly/MCesp|Website & Wiki@@] [@@http://ow.ly/MCeBR|Vote For GMs@@] [@@http://ow.ly/MCehc|Bug Reports@@] [@@http://ow.ly/MCe5W|Live Support@@]",
+ "Like us on [@@http://ow.ly/MCdZW|Facebook@@] [@@http://ow.ly/MCdTt|G+@@] [@@http://ow.ly/MCdJR|Youtube@@] [@@http://ow.ly/MCePp|Twitter@@]",
+ "You can report abuse by typing in chat: @wgm Player XYZ is abusing me";
+
+ return;
+}
diff --git a/world/map/npc/functions/motdconfig.txt b/world/map/npc/functions/motdconfig.txt
new file mode 100644
index 00000000..9ad2b43f
--- /dev/null
+++ b/world/map/npc/functions/motdconfig.txt
@@ -0,0 +1,40 @@
+function|script|MOTDConfig
+{
+ mes "[MOTD]";
+ mes "lines:";
+ mes "---";
+ set @line, 0;
+ callsub S_Lines;
+ mes "---";
+ mes "Enabled: " + !($@MOTD_Disabled);
+ next;
+ menu
+ "toggle|Toggle MOTD", L_Toggle;
+
+L_Toggle:
+ gmlog strcharinfo(0) + " enabled or disabled the MOTD.";
+ set $@MOTD_Disabled, !$@MOTD_Disabled;
+ close2;
+ return;
+
+S_Lines:
+ mes @line + ": "+ $@MOTD$[@line];
+ set @line, @line + 1;
+ if(@line != getarraysize($@MOTD$)) goto S_Lines;
+ return;
+}
+
+function|script|DisplayMOTD
+{
+ if($@MOTD_Disabled || $@MOTD$[0] == "") goto L_Return;
+ goto L_MOTD;
+
+L_MOTD:
+ message strcharinfo(0), "##7Server : " + $@MOTD$[@motd_index];
+ set @motd_index, @motd_index + 1;
+ if($@MOTD$[@motd_index] == "") goto L_Return;
+ goto L_MOTD;
+
+L_Return:
+ return;
+}
diff --git a/world/map/npc/functions/slot_machine.txt b/world/map/npc/functions/slot_machine.txt
index c25dba03..cc8e5a70 100644
--- a/world/map/npc/functions/slot_machine.txt
+++ b/world/map/npc/functions/slot_machine.txt
@@ -27,16 +27,17 @@ L_Play:
mes "Congratulations! You won!";
mes "You get 10 casino coins";
getitem "CasinoCoins", 10;
- close;
+ goto L_Close;
L_Lost:
mes "You lost!";
- close;
+ goto L_Close;
L_NoCoin:
mes "Insert coin";
- close;
+ goto L_Close;
L_Close:
- close;
+ close2;
+ return;
}
diff --git a/world/map/npc/functions/stat_reset.txt b/world/map/npc/functions/stat_reset.txt
index d8f484ff..fdb833f7 100644
--- a/world/map/npc/functions/stat_reset.txt
+++ b/world/map/npc/functions/stat_reset.txt
@@ -8,7 +8,7 @@ function|script|StatReset
set @cost, BaseLevel * 100;
- mes "[" + @NpcName$ + "]";
+ mes "[" + @npcname$ + "]";
mes "\"I have come across a spell that will";
mes "reset your status points.";
mes "Normally this spell is expensive, but";
@@ -31,19 +31,19 @@ L_Reset:
set Zeny, Zeny-@cost;
resetstatus;
- mes "[" + @NpcName$ + "]";
+ mes "[" + @npcname$ + "]";
mes "\"There you are.";
mes "";
mes "Good as new!\"";
goto L_Return;
L_Pass:
- mes "[" + @NpcName$ + "]";
+ mes "[" + @npcname$ + "]";
mes "\"Very well then, see you.\"";
goto L_Return;
L_NoMoney:
- mes "[" + @NpcName$ + "]";
+ mes "[" + @npcname$ + "]";
mes "\"Oh dear, the price cannot be bargained.";
mes "";
mes "Perhaps you can borrow from a friend?\"";
diff --git a/world/map/npc/functions/superdebug.txt b/world/map/npc/functions/superdebug.txt
new file mode 100644
index 00000000..b9f067de
--- /dev/null
+++ b/world/map/npc/functions/superdebug.txt
@@ -0,0 +1,61 @@
+// all-in-one debug
+// author: meko
+
+function|script|SuperDebug
+{
+ goto L_Main;
+
+L_Main:
+ mes "[Numa]";
+ mes "How may I help you?";
+ next;
+ menu
+ "Announcements", L_StoneBoard,
+ "MOTD", L_MOTD,
+ "Holiday debug", L_Holiday,
+ "Event debug", L_Event;
+ // todo: generic npcs (in a future PR)
+ // todo: map list (in a future PR)
+ // todo: quest log debug (in a future PR)
+
+L_Holiday:
+ if(getgmlevel() < 40) goto L_GM;
+ mes "[Numa]";
+ mes "What holiday do you want to debug?";
+ next;
+ menu
+ "Xmas.", L_XmasDebug,
+ "Halloween.", L_HalloweenDebug;
+
+L_XmasDebug:
+ gmlog strcharinfo(0) + " accessed the Xmas debug.";
+ callfunc "XmasDebug";
+ end;
+
+L_HalloweenDebug:
+ gmlog strcharinfo(0) + " accessed the Halloween debug.";
+ callfunc "HalloweenDebug";
+ end;
+
+L_Event:
+ if(getgmlevel() < 60) goto L_GM;
+ gmlog strcharinfo(0) + " accessed the GM event debug.";
+ callfunc "GmDebug";
+ close;
+
+L_StoneBoard:
+ if (getgmlevel() < 30) goto L_GM;
+ callfunc "SBConfig";
+ close;
+
+L_MOTD:
+ if (getgmlevel() < 40) goto L_GM;
+ callfunc "MOTDConfig";
+ close;
+
+L_GM:
+ mes "[Numa]";
+ mes "I'm awfully sorry.";
+ mes "You do not have the required GM level to perform this action.";
+ close;
+}
diff --git a/world/map/npc/functions/time.txt b/world/map/npc/functions/time.txt
index 7d16a200..e1daf974 100644
--- a/world/map/npc/functions/time.txt
+++ b/world/map/npc/functions/time.txt
@@ -75,6 +75,7 @@ function|script|HumanTime
if(@seconds) set @ms, @ms + (@seconds * 1000);
if(@minutes) set @ms, @ms + (@minutes * 60000);
if(@days) set @ms, @ms + (@days * 1440000);
+ if(@ms < 0) goto L_TooShort;
if(@ms < 1000) goto L_Millis; // under 1 second we have nothing to count
set @seconds, @ms / 1000;
set @ms, @ms % 1000;
@@ -90,6 +91,10 @@ function|script|HumanTime
if(@days) goto L_Days;
goto L_Clean;
+L_TooShort:
+ debugmes "HumanTime: negative value: "+@ms+" @ "+ strnpcinfo(0);
+ mapexit;
+
L_Millis:
set @time$, @ms + "ms";
return;
diff --git a/world/map/npc/functions/travelers.txt b/world/map/npc/functions/travelers.txt
index 07b084d9..aec700d0 100644
--- a/world/map/npc/functions/travelers.txt
+++ b/world/map/npc/functions/travelers.txt
@@ -6,7 +6,7 @@
// Costs Zeny
// Contains all warp points to find
-017-9,27,28,0|script|#TravelConfig|-1
+017-9,27,28,0|script|#TravelConfig|32767
{
end;
@@ -43,28 +43,11 @@ OnInit:
end;
}
-function|script|TravelerTut
-{
- //Explain Travelers
- mes "["+@NpcName$+"]";
- mes "\"We travelers are found all over the world. Once you have found another traveler, we can create a link and send you between us.\"";
- next;
- if (TravelFound & $@tut_bit)
- goto L_Return;
- goto L_SetBit;
-
-L_SetBit:
- set TravelFound, TravelFound | $@tut_bit;
- goto L_Return;
-
-L_Return:
- return;
-}
-
function|script|Traveler
{
- mes "["+@NpcName$+"]";
- mes "\"Greetings. I am "+@NpcName$+" the Traveler.\"";
+ if(@npcname$ == "") set @npcname$, strnpcinfo(1);
+ mes "["+@npcname$+"]";
+ mes "\"Greetings. I am "+@npcname$+" the Traveler.\"";
next;
if (TravelFound & $@tut_bit)
@@ -83,12 +66,20 @@ L_BitTravelSet:
goto L_Start;
L_TravelTut:
- callfunc "TravelerTut";
+ mes "["+@npcname$+"]";
+ mes "\"We travelers are found all over the world. Once you have found a traveler at a certain location, you can be sent back there instantly by another traveler.\"";
+ next;
+ if (TravelFound & $@tut_bit)
+ goto L_Main;
+ goto L_SetBit;
+
+L_SetBit:
+ set TravelFound, TravelFound | $@tut_bit;
goto L_Main;
L_SetTravelBit:
- mes "["+@NpcName$+"]";
- mes "\"Uplink Set. You can now return to this spot for a fee.\"";
+ mes "["+@npcname$+"]";
+ mes "\"Uplink set. You can now return to this spot for a fee.\"";
next;
set TravelFound, TravelFound | @NpcTravelBit;
goto L_BitTravelSet;
@@ -120,7 +111,7 @@ L_TravelChecks:
goto L_TravelPlayer;
L_TravelPlayer:
- mes "["+@NpcName$+"]";
+ mes "["+@npcname$+"]";
mes "\"Be fearless!\"";
close2;
set Zeny, Zeny - @NextLocationCost;
@@ -223,30 +214,31 @@ L_TravelCandor:
goto L_TravelChecks;
L_TravelNo:
- mes "["+@NpcName$+"]";
- mes "\"Perhaps some day you will have the courage to help us.\"";
+ mes "["+@npcname$+"]";
+ mes "\"Perhaps you will have the courage to help us some day.\"";
close2;
goto L_Clearvars;
L_NoMoney:
- mes "["+@NpcName$+"]";
- mes "\"Sorry, but you don't have enough money. Maybe next time.\"";
+ mes "["+@npcname$+"]";
+ mes "\"I'm sorry, but you don't have enough money. Maybe next time.\"";
close2;
goto L_Clearvars;
L_NoFound:
- mes "["+@NpcName$+"]";
- mes "\"Sorry, but you haven't visited a traveler yet at that location. You should talk to a traveler there so you can quickly travel there in the future.\"";
+ mes "["+@npcname$+"]";
+ mes "\"Sorry, but you haven't visited a traveler yet at that location. You should find and talk to a traveler there so you can quickly return to that location in the future.\"";
close2;
goto L_Clearvars;
L_AlreadyThere:
- mes "["+@NpcName$+"]";
- mes "\"Umm, you are already here. Are you sure you know where you are going?\"";
+ mes "["+@npcname$+"]";
+ mes "\"Uh... You're already here. Are you sure you know where you are going?\"";
close2;
goto L_Clearvars;
L_Clearvars:
+ set @npcname$, "";
set @Cost, 0;
set @NextLocationBit, 0;
set @NextLocationCost, 0;
diff --git a/world/map/npc/functions/undead_debug.txt b/world/map/npc/functions/undead_debug.txt
index b0466f65..15e3bcd9 100644
--- a/world/map/npc/functions/undead_debug.txt
+++ b/world/map/npc/functions/undead_debug.txt
@@ -78,7 +78,8 @@ L_TeroganItems:
goto L_Main;
L_Close:
- close;
+ close2;
+ return;
}
// Debug for Krukan
diff --git a/world/map/npc/functions/water_bottle.txt b/world/map/npc/functions/water_bottle.txt
index b9a73740..e5f80766 100644
--- a/world/map/npc/functions/water_bottle.txt
+++ b/world/map/npc/functions/water_bottle.txt
@@ -8,7 +8,7 @@ function|script|WaterBottle
input @count;
if (@count == 0)
- close;
+ goto L_Close;
set @cost, @count * @COST_PER_BOTTLE;
set @empty, countitem("EmptyBottle");
@@ -25,17 +25,21 @@ function|script|WaterBottle
set Zeny, Zeny - @cost;
delitem "EmptyBottle", @count;
getitem "BottleOfWater", @count;
- close;
+ goto L_Close;
L_NotEnoughBottles:
mes "You don't have that many empty bottles!";
- close;
+ goto L_Close;
L_NotEnoughMoney:
mes "You don't have enough gp! You need " + @cost + "gp.";
- close;
+ goto L_Close;
L_NotEnoughSlots:
mes "You don't have room for these bottles!";
- close;
+ goto L_Close;
+
+L_Close:
+ close2;
+ return;
}
diff --git a/world/map/npc/items/check_wand.txt b/world/map/npc/items/check_wand.txt
index 43190a85..5a339049 100644
--- a/world/map/npc/items/check_wand.txt
+++ b/world/map/npc/items/check_wand.txt
@@ -48,8 +48,7 @@ L_Loop:
L_SetWand:
set @Wand, $@WandsPwr[@wand_loop];
set @WandID, $@WandsAnim[@wand_loop];
- callfunc "MorganState";
- if (@morgan == 2)
+ if (QL_MORGAN == 2)
goto L_SetCastOnce;
goto L_Return;
@@ -60,8 +59,7 @@ L_LoopAgain:
goto L_Loop;
L_SetCastOnce:
- set @morgan_tmp, 3;
- callfunc "SetMorganMask";
+ set QL_MORGAN, 3;
goto L_Return;
L_Return:
diff --git a/world/map/npc/items/magic_gm_top_hat.txt b/world/map/npc/items/magic_gm_top_hat.txt
index f4f6b078..129aa5c0 100644
--- a/world/map/npc/items/magic_gm_top_hat.txt
+++ b/world/map/npc/items/magic_gm_top_hat.txt
@@ -9,7 +9,7 @@ function|script|ActivateMagicGMTophat
// Display an effect
misceffect FX_CHANNELLING_CAST, strcharinfo(0);
// Log the usage of this spell
- gmcommand "@l "+strcharinfo(0)+" used the Magic GM Top Hat.";
+ gmlog strcharinfo(0)+" used the Magic GM Top Hat.";
return;
L_Inventory:
diff --git a/world/map/npc/items/require_stat.txt b/world/map/npc/items/require_stat.txt
index 40200ea9..87ecf22a 100644
--- a/world/map/npc/items/require_stat.txt
+++ b/world/map/npc/items/require_stat.txt
@@ -4,23 +4,20 @@
// This is passed automagically when called in an equip script.
// @bStat The stat to check against.
// Usually one of: bStr, bAgi, bVit, bInt, bDex, bLuk;
-// but can be anything that works with readparam().
+// but can be anything that works with .
// @minbStatVal The minimum stat value to accept this item.
// ------------------------------------------------------------
function|script|RequireStat
{
- set @bStatVal, readparam(@bStat);
+ set @bStatVal, @bStat;
// If the requirement isn't met, we set an unequip trigger.
// The item is now removed.
- if (@bStatVal < @minbStatVal)
+ if (@bStat < @minbStatVal)
goto L_Unequip;
- goto L_Return;
+ return;
L_Unequip:
callfunc "UnequipLater";
- goto L_Return;
-
-L_Return:
return;
}
diff --git a/world/map/npc/items/restricted_item.txt b/world/map/npc/items/restricted_item.txt
index c0084408..9bd1c3d5 100644
--- a/world/map/npc/items/restricted_item.txt
+++ b/world/map/npc/items/restricted_item.txt
@@ -13,8 +13,8 @@ function|script|RestrictedItem
message strcharinfo(0), "This item repells you with extreme force. It does not seem to be meant for you.";
callfunc "UnequipLater";
if (getgmlevel()) goto L_Return;
- gmcommand "@wgm Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'.";
- gmcommand "@l Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'.";
+ wgm "Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'.";
+ gmlog "Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'.";
goto L_Return;
L_Return:
diff --git a/world/map/npc/items/scissors.txt b/world/map/npc/items/scissors.txt
index 44dbbac8..640cc1c5 100644
--- a/world/map/npc/items/scissors.txt
+++ b/world/map/npc/items/scissors.txt
@@ -5,10 +5,10 @@ function|script|useScissors
message strcharinfo(0), "Whoops!";
heal -20 - rand(Hp >> 1), 0;
getitem "Scissors", 1;
- end;
+ return;
L_Change:
setlook LOOK_HAIR_STYLE, rand(20);
getitem "Scissors", 1;
- end;
+ return;
}
diff --git a/world/map/npc/items/shock_sweet.txt b/world/map/npc/items/shock_sweet.txt
index 1ae787e3..4de758d1 100644
--- a/world/map/npc/items/shock_sweet.txt
+++ b/world/map/npc/items/shock_sweet.txt
@@ -4,12 +4,12 @@ function|script|useShockSweet
goto L_Change;
message strcharinfo(0), "Yuck, this tastes like earwax!";
heal -20 - (Hp >> 2), 0;
- end;
+ return;
L_Change:
setlook LOOK_HAIR_COLOR, HC_WHITE;
message strcharinfo(0), "Gah! That was some strong stuff!";
sc_start sc_poison, 1, 20;
misceffect 15, strcharinfo(0);
- end;
+ return;
}
diff --git a/world/map/npc/items/unequipcb.txt b/world/map/npc/items/unequipcb.txt
index 1d269d3a..649b2912 100644
--- a/world/map/npc/items/unequipcb.txt
+++ b/world/map/npc/items/unequipcb.txt
@@ -1,8 +1,6 @@
-// For now this has to use a real map name, but the effect happens
-// on any map because of the -1 at the end.
// Note: the client (I think) has a display bug if this is called
// during the intial connection's equip hook
-017-9,0,0,0|script|UnequipCB|-1
+-|script|UnequipCB|32767
{
end;
diff --git a/world/map/npc/items/warpTowels.txt b/world/map/npc/items/warpTowels.txt
index e1ca89ee..dd8bc71e 100644
--- a/world/map/npc/items/warpTowels.txt
+++ b/world/map/npc/items/warpTowels.txt
@@ -152,7 +152,7 @@ L_End:
set @NextLocationX, 0;
set @NextLocationY, 0;
set @warpTowelName$, "";
- end;
+ return;
}
function|script|MultiWarpTowel
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index 1414f681..e2603c8e 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -19,6 +19,8 @@ npc: npc/functions/time.txt
npc: npc/functions/water_bottle.txt
npc: npc/functions/evil_obelisk.txt
npc: npc/functions/debug.txt
+npc: npc/functions/superdebug.txt
+npc: npc/functions/announcements.txt
npc: npc/functions/lockpicking.txt
npc: npc/functions/default_npc_checks.txt
npc: npc/functions/undead_debug.txt
@@ -28,6 +30,8 @@ npc: npc/functions/stat_reset.txt
npc: npc/functions/quiz.txt
npc: npc/functions/dynamic_menu.txt
npc: npc/functions/DyeConfig.txt
+npc: npc/functions/motd.txt
+npc: npc/functions/motdconfig.txt
// Item Functions
npc: npc/items/magic_gm_top_hat.txt