[Help Thread] Please post your questions here.

09/29/2015 19:26 kastuki#5176
The menu open, i can up my stuff but i can't open his shop :/
09/29/2015 20:28 ThunderNikk#5177
4. At any point that one of these fails is there any message in the chat window or game server window?

5. If there is a message what is it?
09/30/2015 20:31 Sherock#5178
how to create 9.1 launcher ?
10/01/2015 17:44 Player95#5179
Dumb question... how can I find out what client version/epic version my client has?

I just found a pretty old Rappelz installer and was wondering how old it is.

EDIT: Nvm, it is Dragonic Age.
10/02/2015 07:25 Sherock#5180
Quote:
2015/10/02 07:19:32 DB COM ERROR(Thread:0, HRESULT:80040E57, GUID:0C733A63-2A1C-11CE-ADE5-00AA0044773D) : DB_GetCommercialStorageInfo(dbo.smp_check_purchase d_item) : Arithmetic overflow error converting expression to data type int.
i'm using ismokedrow's telecaster with his fixes
i delete Billing and same
i make N:billing.use:0 and same

some help plz

i solve it :(

but i had another problem

Quote:
================================================== ============================

------------------------------------------------------------------------------
Thread Information
------------------------------------------------------------------------------

00 Thread name : IOCP 00
00 job info : 7
00 job id : 0
00 counter : 0
00 execute time : 2037173
01 Thread name : IOCP 01
01 job info : 5
01 job id : 0
01 counter : 0
01 execute time : 2037176
02 Thread name : IOCP 02
02 job info : 219
02 job id : 0
02 counter : 0
02 execute time : 2037171
03 Thread name : IOCP 03
03 job info : 5
03 job id : 0
03 counter : 0
03 execute time : 2037175
04 Thread name : Scheduler 00
04 job info : StructMonster(0x29CD3320)
04 job id : 0
04 counter : 0
04 execute time : 2037179
05 Thread name : Scheduler 01
05 job info : StructPlayer(0x061B38C0)
05 job id : 0
05 counter : 0
05 execute time : 2037171
06 Thread name : Scheduler 02
06 job info : StructMonster(0x2AE00DB0)
06 job id : 0
06 counter : 0
06 execute time : 2037178
07 Thread name : Scheduler 03
07 job info : StructPlayer(0x061EB3C0)
07 job id : 0
07 counter : 0
07 execute time : 2037175


------------------------------------------------------------------------------
Basic Information
------------------------------------------------------------------------------

Program Name : Arcadia
EXE : C:\Users\Administrator\Desktop\Server Files\GameEngine\Game_bin\CaptainHerlockServer.exe
User : Administrator
Computer : VMI49026

Program :
Exception : C0000005 (ACCESS_VIOLATION)
Fault Address: Undeterminable(62027860 00:00000000)
Mem Usage : 2881356KB / 2828752KB

------------------------------------------------------------------------------
Allocation Count Info(by _MEM_USAGE_DEBUG)
------------------------------------------------------------------------------

Type: StructSummon Allocated: [Current: 131]/[Peek Concurrent: 135]/[Total: 426]
Type: StructQuestManager Allocated: [Current: 52]/[Peek Concurrent: 53]/[Total: 251]
Type: StructPlayer Allocated: [Current: 52]/[Peek Concurrent: 53]/[Total: 251]
Type: AutoAuctionInfo Allocated: [Current: 46]/[Peek Concurrent: 46]/[Total: 46]
Type: GuildInfo Allocated: [Current: 13]/[Peek Concurrent: 13]/[Total: 17]
Type: PartyInfo Allocated: [Current: 40]/[Peek Concurrent: 43]/[Total: 89]
Type: StructItem Allocated: [Current: 8539]/[Peek Concurrent: 9073]/[Total: 188685]
Type: ItemKeepingInfo Allocated: [Current: 6]/[Peek Concurrent: 10]/[Total: 7]
Type: StructFieldProp Allocated: [Current: 59704]/[Peek Concurrent: 59821]/[Total: 62123]
Type: StructNPC Allocated: [Current: 7285]/[Peek Concurrent: 7285]/[Total: 7285]
Type: StructSkill Allocated: [Current: 27060]/[Peek Concurrent: 27157]/[Total: 88539]
Type: StructTitleCondition Allocated: [Current: 882]/[Peek Concurrent: 905]/[Total: 3440]
Type: StructPet Allocated: [Current: 36]/[Peek Concurrent: 38]/[Total: 151]
Type: StructTitle Allocated: [Current: 571]/[Peek Concurrent: 590]/[Total: 2313]
Type: StructQuest Allocated: [Current: 8]/[Peek Concurrent: 13]/[Total: 44]
Type: StructSkillProp Allocated: [Current: 1]/[Peek Concurrent: 7]/[Total: 1617]
Type: AuctionInfo Allocated: [Current: 17]/[Peek Concurrent: 19]/[Total: 18]


------------------------------------------------------------------------------
x86 Registers
------------------------------------------------------------------------------

RAX=0000000061FBD9B8 RBX=0000000062185848 RCX=0000000062185848 RDX=0000000062185848
ESI=0000000002D44549 EDI=0000000062185848 EBP=00000000061694C0
DS =002B ES=002B FS=0053 GS:002B
CS:RIP=0033:0000000062027860
SS:RSP=002B:0000000002D43028
Flags=00010206


------------------------------------------------------------------------------
Environment dump
------------------------------------------------------------------------------
CodePage : 1256
app.checksum : 00E1E978
app.cmdline : "C:\Users\Administrator\Desktop\Server Files\GameEngine\Game_bin\CaptainHerlockServer.exe "
app.filesize : 5393648
app.filetime : 2014/09/12-15:29:42
app.name : game001
auth.connect : complete
auth.server_idx : 1
auth.server_name : Heroes
console.allow_ip : IP
console.port : PORT
db.c.name : Arcadia
db.c.server : IP
db.trace : 1
db.trace_refresh_period : 0
db.user.exec_query : 22
db.user.name : Telecaster
db.user.remain_query : 0
db.user.server : IP
db.user.thread : 4
db.user.thread_active : 0
db.user.thread_total : 0
db.user.work_active : 0
db.user.work_pending : 0
db.user.work_total : 737003
engine.ar_time : 2039017
engine.count_client : 52
engine.count_movable : 46167
engine.count_static : 59767
engine.lock : 1
engine.region_size : 180
engine.scheduler.0.instruction : 181700
engine.scheduler.0.object : 440
engine.scheduler.1.instruction : 181816
engine.scheduler.1.object : 470
engine.scheduler.2.instruction : 181983
engine.scheduler.2.object : 452
engine.scheduler.3.instruction : 182116
engine.scheduler.3.object : 439
engine.scheduler.destroy_cnt : 92791
engine.scheduler.destroy_loop : 186328
engine.scheduler.destroy_pend : 0
engine.use_region_debug : 0
engine.wait : 7
game.AdultServer : 0
game.AutoOpenOnly : 0
game.FindDuplicatePos : 57641
game.FirstLineCount : 54865
game.GamePerformanceLogingInterval : 10000
game.LineCount : 6874296
game.PKPenaltyLevel : 10
game.PKServer : 1
game.PathFindingCount : 68718
game.ProcessingMonsterCount : 16554463
game.ProcessingMonsterTime : 17182882
game.ProcessingPlayerCount : 5435062
game.ProcessingPlayerTime : 1193401
game.ProcessingSummonCount : 72875
game.ProcessingSummonTime : 13187
game.RandomMove : 312832
game.ServiceServer : 1
game.TracingGamePerformance : 1
game.allowed_special_char :
game.ally_pcbang_bonus_rate : 0.100000
game.ally_pcbang_chaos_bonus_rate : 0.100000
game.apply_stamina_bonus_in_premium_pcbang : 0
game.auction_process_request_min_interval : 100
game.auction_search_request_min_interval : 300
game.bUseLockDelayLogging : 0
game.base_ethereal_durability_consumption_on_damag e : 98
game.base_ethereal_durability_consumption_on_norma l_attack : 31
game.base_ethereal_durability_consumption_on_skill _attack : 51
game.battle_arena_reconnect_wait_duration : 18000
game.broadcast_event_item_pickup : 0
game.cash_item_dropable : 0
game.cash_usable_server : 0
game.chaos_drop_rate : 1.000000
game.check_storage_security_always : 1
game.disable_booth : 0
game.disable_buy_booth : 0
game.disable_dungeon_raid_siege : 0
game.disable_huntaholic : 0
game.disable_pk_on : 0
game.disable_trade : 0
game.enhance_fail_type : 2
game.exp_rate : 1800.000000
game.farm_growth_summon_exp : 37087982
game.farm_normal_summon_exp : 145763
game.forbidden_script :
game.forbidden_script_init : 1
game.force_unregister_account_on_kick_fail : 0
game.gold_drop_rate : 50.000000
game.guild_icon_base_url : [Only registered and activated users can see links. Click Here To Register...]
game.helpdesk_url : [Only registered and activated users can see links. Click Here To Register...]
game.ignore_random_damage : 0
game.item_count : 8539
game.item_drop_rate : 100.000000
game.item_hold_time : 2500
game.item_loading : complete
game.limit_adv_chat_count : 1
game.limit_booth_openable_layer_to_zero : 0
game.limit_field_logout : 0
game.limit_game_time : 0
game.loading : complete
game.local_flag : 8192
game.log_monster_pathfinding : 1
game.log_required_item_list :
game.log_required_state_list :
game.log_scheduling_status : 1
game.log_vulcanus_dungeon : 0
game.logout_timer : 1000
game.map_height : 1000000
game.map_width : 700000
game.max_characters_per_account : 6
game.max_game_time_limited_age : 17
game.max_healthy_game_time : 1080000
game.max_layer : 256
game.max_level : 180
game.max_storage_item_count : 1000
game.max_tired_game_time : 1800000
game.min_booth_startable_level : 0
game.min_global_chat_usable_level : 130
game.mod : 0.000000
game.monster_collision_line : 1
game.monster_drop_respawn : 0
game.monster_pathfinding : 1
game.monster_respawn_cnt : 123012
game.monster_respawn_object_cnt : 32710
game.monster_respawn_try_cnt : 298400
game.monster_wandering : 1
game.newbiehelp_asura_url : [Only registered and activated users can see links. Click Here To Register...]
game.newbiehelp_deva_url : [Only registered and activated users can see links. Click Here To Register...]
game.newbiehelp_gaia_url : [Only registered and activated users can see links. Click Here To Register...]
game.no_collision_check : 0
game.no_skill_cooltime : 0
game.party_exp_rate_0 : 1.000000
game.party_exp_rate_1 : 1.000000
game.party_exp_rate_2 : 1.000000
game.party_exp_rate_3 : 1.000000
game.party_exp_rate_4 : 1.000000
game.party_exp_rate_5 : 1.000000
game.party_exp_rate_6 : 1.000000
game.period_of_security_solution_check : 30000
game.play_point_accumulate_amount : 1
game.play_point_accumulate_term : 60
game.premium_pcbang_bonus_rate : 1.200000
game.premium_pcbang_chaos_bonus_drop_rate : 1.000000
game.premium_pcbang_chaos_bonus_rate : 0.100000
game.premium_pcbang_gold_bonus_drop_rate : 1.000000
game.premium_pcbang_item_bonus_drop_rate : 1.000000
game.premium_pcbang_play_point_bonus_rate : 2.000000
game.pvp_damage_rate_for_player : 0.025000
game.pvp_damage_rate_for_summon : 0.050000
game.restrict_banword_for_booth : 0
game.restrict_special_char : 1
game.script.2068.time : 2036479
game.script.2068.trigger : open_market( 'Hossam_1_1' )
game.script.4288.time : 2034808
game.script.4288.trigger : NPC_TeleportTown_2_Secroute_contact()
game.script.4492.time : 2036519
game.script.4492.trigger : RunTeleport( 150000 , 146188 , 135579 )
game.script.4688.time : 2033785
game.script.4688.trigger : open_market( 'Hossam_4_2' )
game.security_solution_exceptional_ip :
game.security_solution_response_timeout : 3000
game.security_solution_type : 0
game.server_screenshot_url : [Only registered and activated users can see links. Click Here To Register...]
game.server_version : 9.1.0.0
game.skip_loading_attribute : 0
game.speed_unit : 30
game.stamina_bonus_rate : 1.000000
game.super_save_bonus_rate : 2.000000
game.super_save_level_max_limit_0 : 130
game.super_save_level_max_limit_1 : 140
game.super_save_level_max_limit_2 : 150
game.super_save_level_max_limit_3 : 160
game.super_save_level_max_limit_4 : 160
game.super_save_level_max_limit_5 : 170
game.super_save_level_max_limit_6 : 180
game.super_save_level_min_limit_0 : 1
game.super_save_level_min_limit_1 : 121
game.super_save_level_min_limit_2 : 131
game.super_save_level_min_limit_3 : 141
game.super_save_level_min_limit_4 : 121
game.super_save_level_min_limit_5 : 151
game.super_save_level_min_limit_6 : 171
game.term_for_time_based_event_db : 60
game.term_for_time_based_event_script : 120
game.tile_size : 42.000000
game.update.version : 24
game.url_list : guild_icon_upload.ip|IP|guild_icon_upload.port|461 5|guild.url|[Only registered and activated users can see links. Click Here To Register...]
game.use_account_authority_db : 0
game.use_auto_jail : 0
game.use_auto_trap : 0
game.use_delete_security : 0
game.use_guild_donation_point : 0
game.use_login_logout_debug : 0
game.use_play_point : 0
game.use_security : 0
game.use_storage_security : 0
game.use_time_based_event_db : 0
game.use_time_based_event_script : 1
game.user_count : 52
io.auth.ip : IP
io.connection : 56
io.ip_address : IP
io.port : PORT
io.recv_byte : 70599665
io.recv_count : 3368618
io.send_byte : 1163961024
io.send_count : 17475549
io.upload.ip : IP
io.upload.port : PORT
io.use_message_statistics : 0
iocp.2068.script : Quest_Link_6_1()
iocp.4288.script : Quest_Link_6_2()
iocp.4492.script : quest_start_3600()
iocp.4688.script : quest_start_3600()
iocp.active : 4
iocp.bufsize : 8192
iocp.dis_count : 168
iocp.instruction : 13093138
iocp.max_realloc_size : 1196032
iocp.recv_count : 1584663
iocp.recv_rest_bytes : 0
iocp.recv_traffic : 70600110
iocp.send_count : 11507879
iocp.send_rest_bytes : 1687
iocp.send_traffic : 1160694249
iocp.total : 4
log.chat.working : 0
log.connect_ : 1
log.connect_IOCP 00 : 1
log.connect_IOCP 01 : 1
log.connect_IOCP 02 : 1
log.connect_IOCP 03 : 1
log.connect_Main : 1
log.connect_Scheduler 00 : 1
log.connect_Scheduler 01 : 1
log.connect_Scheduler 02 : 1
log.connect_Scheduler 03 : 1
log.server_name : game001
log.working : 1
memory.item_heap_size : 422656
memory.monster_heap_size : 373828
memory.player_heap_size : 25344
memory.summon_heap_size : 95200
process.id : 4568
process.load : 16
process.load_kernel : 96
process.load_user : 3
process.memory : 2884364
process.memory_peak : 2884364
process.paged_memory : 2829420
process.paged_memory_peak : 2829424
process.start : 2015/10/02-09:45:26
process.uptime : 5 Hour 39 Minute 50 Second
thread.db.0.proc : DB_UpdateSkill
thread.db.1.proc : DB_UpdateCharacter
thread.db.2.proc : DB_UpdateSummon
thread.db.3.proc : DB_UpdateCharacter
thread.iocp.0.proc : 7
thread.iocp.1.proc : 5
thread.iocp.2.proc : 219
thread.iocp.3.proc : 5
thread.scheduler.0.proc : StructMonster
thread.scheduler.1.proc : StructPlayer
thread.scheduler.2.proc : StructMonster
thread.scheduler.3.proc : StructPlayer
upload.connect : complete


------------------------------------------------------------------------------
Application-specific log
------------------------------------------------------------------------------

Server Version : v9.1.0.0
PlayerHeapSize : 25344 kb
MonsterHeapSize : 373828 kb
ItemHeapSize : 422656 kb
SummonHeapSize : 95200 kb
PetHeapSize : 9336 kb
SkillHeapSize : 53760 kb
QuestHeapSize : 5760 kb
TitleHeapSize : 1440 kb
TitleConditionHeapSize: 1440 kb
ProcHeapSize : 2400 kb
DBHeapSize : 21523 kb



------------------------------------------------------------------------------
Call Stack (Short)
------------------------------------------------------------------------------

Address Frame Function SourceFile
0000000062027860 0000000002D43020 Undeterminable(0000:00000000) (e126)
000000013F3217B1 0000000002D43060 ?fillItemBaseInfo@@YAXPEAUTS_ITEM_BASE_INFO@@PEAUS tructItem@@@Z+41
000000013F32586A 0000000002D470E0 ?SendItemList@@YAXPEAUStructPlayer@@_N@Z+16A
000000013F308F60 0000000002D47140 ?onArrangeItem@@YAXPEAUStructPlayer@@PEAUTS_CS_ARR ANGE_ITEM@@@Z+E0
000000013F31A880 0000000002D4F330 ?onReadEvent@@YAXHPEAUIStreamSocketConnection@@@Z+ EE0
000000013F545247 0000000002D4F360 ?onConnectionEvent@XIOCP@@CA_NPEAUIOCPTAG@@HPEAUXO VERLAPPED@@H@Z+87
000000013F545D7B 0000000002D4F8B0 ?IOCPWorkerThread@XIOCP@@CAIPEAX@Z+95B
000000013F55994F 0000000002D4F8E0 _endthreadex+3B
000000013F5599E3 0000000002D4F910 _endthreadex+CF
0000000076F959BD 0000000002D4F940 BaseThreadInitThunk+D
00000000771CA671 0000000002D4F990 RtlUserThreadStart+21




------------------------------------------------------------------------------
Memory Dump
------------------------------------------------------------------------------

Fault address may be corrupted. Memory dump is terminated.

================================================== ============================
10/04/2015 11:11 colonelx#5181
what are the usage of these commands




qouted from prev post
10/04/2015 12:48 NTOverload#5182
Quote:
Originally Posted by colonelx View Post
what are the usage of these commands




qouted from prev post
These are triggers made for special events in the .opt.

e.g.
game.script.4688.time: has been activated at {d/m/y %d:%d:%d:%d-> 2033785}
what will be activated? ->game.script.4688.trigger : open_market( 'Hossam_4_2' )

basicly means that this npc has been opened at the above set time (and will show function (open_market("')) in this case.

basicly; its the threading (handle) since these ware the last 3 npcs used / spawned / functioning before the crash.

Quote:
Originally Posted by Sherock View Post
i'm using ismokedrow's telecaster with his fixes
i delete Billing and same
i make N:billing.use:0 and same

some help plz

i solve it :(

but i had another problem


2015/10/02 07:19:32 DB COM ERROR(Thread:0, HRESULT:80040E57, GUID:0C733A63-2A1C-11CE-ADE5-00AA0044773D) : DB_GetCommercialStorageInfo(dbo.smp_check_purchase d_item) : Arithmetic overflow error converting expression to data type int.
As above stated check your smp dbo.smp_check_purchase and set the parameter of d_item to int. save it and you'll be done.
10/04/2015 16:16 ThunderNikk#5183
Quote:
Originally Posted by NTOverload View Post
As above stated check your smp dbo.smp_check_purchase and set the parameter of d_item to int. save it and you'll be done.

The SMP is check_purchased_item there is no d_item

Here is mine but I may have the same errors you have if it is with ismokes billing corrections...

Code:
USE [telecaster]
GO
/****** Object:  StoredProcedure [dbo].[smp_check_purchased_item]    Script Date: 3/29/2015 6:06:47 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- smp_read_purchased_item_list

-- start of smp_check_purchased_item   某浆袍 芒绊俊 酒捞袍 乐绰瘤 咯何 八荤
ALTER PROCEDURE [dbo].[smp_check_purchased_item]
@IN_ACCOUNT_ID			INT,
@IN_CHARACTER_ID		INT,
@OUT_TOTAL_ITEM_COUNT	INT		OUTPUT,
@OUT_NEW_ITEM_COUNT		INT		OUTPUT,
@OUT_PREMIUM_TICKET		INT		OUTPUT,
@OUT_PREMIUM_REST_TIME	INT		OUTPUT,
@OUT_STAMINA_REGEN_TIME	INT		OUTPUT

 
AS
SET NOCOUNT ON

	SET @OUT_PREMIUM_TICKET  = 0
	SET @OUT_PREMIUM_REST_TIME = 0
	SET @OUT_STAMINA_REGEN_TIME = 0

	SELECT @OUT_PREMIUM_TICKET = COUNT(*), @OUT_PREMIUM_REST_TIME = DATEDIFF( second, GETDATE(), MAX( valid_time ) ) FROM dbo.PaidItem WHERE taken_account_id = @IN_ACCOUNT_ID AND item_code = 910000 AND valid_time > GETDATE() AND isCancel = 0

	IF @OUT_PREMIUM_TICKET < 1
	BEGIN
		SET @OUT_PREMIUM_REST_TIME = 0

		DECLARE @LOGOUT_TIME		DATETIME
		SET @LOGOUT_TIME = GETDATE()

		SELECT @LOGOUT_TIME = logout_time FROM Character WITH (NOLOCK) WHERE account_id = @IN_ACCOUNT_ID AND sid = @IN_CHARACTER_ID
		SELECT @OUT_STAMINA_REGEN_TIME = DATEDIFF( minute, @LOGOUT_TIME, MAX( valid_time ) ) FROM dbo.PaidItem WHERE taken_account_id = @IN_ACCOUNT_ID AND item_code = 910000 AND valid_time > @LOGOUT_TIME AND isCancel = 0

		IF @OUT_STAMINA_REGEN_TIME < 1 OR @OUT_STAMINA_REGEN_TIME IS NULL
		BEGIN
			SET @OUT_STAMINA_REGEN_TIME = 0
		END

	DECLARE @NO_LV INT
	DECLARE @NO_Total_JP INT
	SELECT @NO_LV = MAX(lv), @NO_Total_JP = MAX(total_jp) from character WITH(NOLOCK) WHERE account_id = @IN_ACCOUNT_ID AND Name not like '@%'

	IF  @NO_LV < 30 AND @NO_Total_JP < 100000
	BEGIN
	SET @OUT_PREMIUM_TICKET  = 1
	SET @OUT_PREMIUM_REST_TIME = 3600 * 5
	END

END

--IF  @OUT_PREMIUM_REST_TIME < 3600 * 5
--BEGIN
	
	--DECLARE @LV INT
	--DECLARE @Total_JP INT
	--SELECT @LV = MAX(lv), @Total_JP = MAX(total_jp) from character WITH(NOLOCK) WHERE account_id = @IN_ACCOUNT_ID AND Name not like '@%'

	--IF  @LV < 30 AND @Total_JP < 100000
	--BEGIN
	--SET @OUT_PREMIUM_TICKET  = 1
	--SET @OUT_PREMIUM_REST_TIME = 3600 * 5
	--END
--END


	SELECT @OUT_TOTAL_ITEM_COUNT = COUNT(*) from dbo.PaidItem WHERE taken_account_id = @IN_ACCOUNT_ID AND item_code <> 910000 AND rest_item_count > 0  AND valid_time > GETDATE() AND isCancel = 0
	SELECT @OUT_NEW_ITEM_COUNT   = COUNT(*) from dbo.PaidItem WHERE taken_account_id = @IN_ACCOUNT_ID AND item_code <> 910000 AND rest_item_count > 0  AND confirmed = 0 AND valid_time > GETDATE() AND isCancel = 0

RETURN @@ERROR
This may not be caused by the SMP but rather could have been caused by something in the item box that it is checking that is abnormal.
10/04/2015 18:35 khshe#5184
I installed the 9.1 server and I want that master class could only take on quests! help me to do it. Now I have the master class no quests
10/04/2015 21:30 ThunderNikk#5185
It is probably the NPC_JobChange.lua you are using. Try using mine if it doesn't work I will attach my original.

Code:
-- Lua 스크립트 암호�*
function get_module_name()
             return "NPC_JobChange"
end

function NPC_JobChange_get_resetcount()
	local reset_count = get_flag( 'reset_count' )
	
	if reset_count == '' then
		return 0
	else
		return reset_count
	end
end

   --============================================================
   --             <<<<<< 전직 NPC (공통) >>>>>>
   --============================================================
function NPC_JobChange_contact()
	-- 임시 변수 선언과 동시에 NPC ID 가져오기
	local npc_id = get_npc_id()
	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_title( "@90400401" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_title( "@90100401" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_title( "@90200401" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_title( "@90600401" )
	-- 도시 유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_title( "@90703201" )
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_title( "@90700401" )
	
	end -- if 끝
	
	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_text( "@90400403" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_text( "@90100403" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_text( "@90200403" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_text( "@90600403" )
	-- 도시 유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_text( "@90703203" )				
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_text( "@90700403" )
	end -- if 끝
			
	dlg_menu( "@90010060", "NPC_JobChange_change_job()" )
	dlg_menu( "@90010252", "NPC_JobChange_change_race()" )
	dlg_menu( "@90010002", " " )
	dlg_show()
end

function NPC_JobChange_change_race()
	local npc_id = get_npc_id()
	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_title( "@90400401" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_title( "@90100401" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_title( "@90200401" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_title( "@90600401" )
	-- 도시 유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_title( "@90703201" )
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_title( "@90700401" )
	--수련자의 섬 일 때 (3019)
	elseif npc_id == 3019 then
		dlg_title( "@90300401" )
		
	end -- if 끝
	
	if has_item(601100284) >= 1 then
		dlg_text( "@90010256" )

		local race = get_value( "race" )
	
		if race ~= 4 then
			dlg_menu( "@90010253", "NPC_JobChange_set_race(4)" )
		end
	
		if race ~= 5 then 
			dlg_menu( "@90010254", "NPC_JobChange_set_race(5)" )
		end
	
		if race ~= 3 then 
			dlg_menu( "@90010255", "NPC_JobChange_set_race(3)" )
		end
	
		dlg_show()
	else
		dlg_text( "@90010257" )
		dlg_menu( "@90010002", " " )
		dlg_show()
		
	end
	
end

function NPC_JobChange_set_race( changed_race )
	if has_item(601100284) >= 1 then -- 심장 있는지 체크 (아까 체크했지만 스크립트 �*어 놓고 이것저것 할수있으므로 다시체크)
		local success = set_race( changed_race )
		local npc_id = get_npc_id()
		-- 가이아 일 때 (4004)
		if npc_id == 4004 then
			dlg_title( "@90400401" )
		-- 데바 일 때 (1004)
		elseif npc_id == 1004 then
			dlg_title( "@90100401" )
		-- 아수라 일 때 (2004)
		elseif npc_id == 2004 then
			dlg_title( "@90200401" )
		-- 론도 일 때 (6004)
		elseif npc_id == 6004 then
			dlg_title( "@90600401" )
		-- 도시 유적 일 때 (7032)
		elseif npc_id == 7032 then
			dlg_title( "@90703201" )
		-- 시크루트 일 때 (7004)
		elseif npc_id == 7004 then
			dlg_title( "@90700401" )
		--수련자의 섬 일 때 (3019)
		elseif npc_id == 3019 then
			dlg_title( "@90300401" )		
		end -- if 끝
	
		if success == 1 then
			delete_item( get_item_handle( 601100284 ), 1 )
			dlg_text( "@90010258" )
			dlg_menu( "@90010002", " " )
		else
			dlg_text( "@90010259" )
			dlg_menu( "@90010002", " " )
		end
	else
		dlg_text( "@90010257" )
		dlg_menu( "@90010002", " " )
	end

	dlg_show()
end

function NPC_JobChange_change_job()
	-- 임시 변수 선언과 동시에 NPC ID 가져오기
	local npc_id = get_npc_id()
	-- 국가 코드 읽어오기
		-- get_local_info()의 반환값들
		--LOCAL_INFO_KOREA                      = 1
		--LOCAL_INFO_HONGKONG                   = 2
		--LOCAL_INFO_AMERICA                    = 4
		--LOCAL_INFO_EUROPE                     = 8
		--LOCAL_INFO_JAPAN                      = 16
		--LOCAL_INFO_TAIWAN                     = 32
		--LOCAL_INFO_CHINA                      = 64
		
	local state_code = get_local_info()
	local reset_count = NPC_JobChange_get_resetcount()
	
	
	
	--reset_count = 0
	
	
	--================================================================================
	-- 전직 불가능한 경우 골라내기
	--================================================================================
	
	--local reset_count

	-- 기본직업일 때 Lv이나 JLv이 10 미만이면 전직불가.
	if get_value( "job_depth" ) == 0 then
		if get_value( "level" ) < 10 or get_value( "job_level" ) < 10 then

			-- 가이아 일 때 (4004)
			if npc_id == 4004 then
				dlg_title( "@90400401" )
			-- 데바 일 때 (1004)
			elseif npc_id == 1004 then
				dlg_title( "@90100401" )
			-- 아수라 일 때 (2004)
			elseif npc_id == 2004 then
				dlg_title( "@90200401" )
			-- 론도 일 때 (6004)
			elseif npc_id == 6004 then
				dlg_title( "@90600401" )
			-- 도시 유적 일 때 (7032)
			elseif npc_id == 7032 then
				dlg_title( "@90703201" )
			-- 시크루트 일 때 (7004)
			elseif npc_id == 7004 then
				dlg_title( "@90700401" )
			end -- if 끝
			
			-- 가이아 일 때 (4004)
			if npc_id == 4004 then
				dlg_text( "@90400403" )
			-- 데바 일 때 (1004)
			elseif npc_id == 1004 then
				dlg_text( "@90100403" )
			-- 아수라 일 때 (2004)
			elseif npc_id == 2004 then
				dlg_text( "@90200403" )
			-- 론도 일 때 (6004)
			elseif npc_id == 6004 then
				dlg_text( "@90600403" )
			-- 도시 유적 일 때 (7032)
			elseif npc_id == 7032 then
				dlg_text( "@90703203" )
				
			-- 시크루트 일 때 (7004)
			elseif npc_id == 7004 then
				dlg_text( "@90700403" )
			end -- if 끝
		
			dlg_menu( "@90010002", "" )
		
			dlg_show()

			return
		end

	-- 1차 직업일 때 Lv50 미만 JLv이 40 미만이면 전직불가.
	elseif get_value( "job_depth" ) == 1 then
	
		-- 중국은 2차 직업 막음. 2007.9.4. 중국 판호 관련으로 임시 해제.
	 	--if state_code == 2 then
			-- 더 이상 전직이 불가능하다는 멘트
	      --dlg_text( "@90100411" )
		
		  --dlg_menu( "@90010002", "" )
		
          	--dlg_show()

	      --return
	      --end
		
		-- 전직 불가능한 조건이면 튕김
		if get_value( "level" ) < 50 or get_value( "job_level" ) < 40 then
		
			-- 가이아 일 때 (4004)
			if npc_id == 4004 then
				dlg_title( "@90400401" )
			-- 데바 일 때 (1004)
			elseif npc_id == 1004 then
				dlg_title( "@90100401" )
			-- 아수라 일 때 (2004)
			elseif npc_id == 2004 then
				dlg_title( "@90200401" )
			-- 론도 일 때 (6004)
			elseif npc_id == 6004 then
				dlg_title( "@90600401" )
			-- 도시 유적 일 때 (7032)
			elseif npc_id == 7032 then
				dlg_title( "@90703201" )				
			-- 시크루트 일 때 (7004)
			elseif npc_id == 7004 then
				dlg_title( "@90700401" )
			end -- if 끝
			
			-- 가이아 일 때 (4004)
			if npc_id == 4004 then
				if is_able_to_jobchange() == true then
					dlg_text( "@90400409" )
				else
					dlg_text( "@90400402" )
				end
			-- 데바 일 때 (1004)
			elseif npc_id == 1004 then
				if is_able_to_jobchange() == true then
					dlg_text( "@90100409" )
				else
					dlg_text( "@90100402" )
				end
			-- 아수라 일 때 (2004)
			elseif npc_id == 2004 then
				if is_able_to_jobchange() == true then
					dlg_text( "@90200409" )
				else
					dlg_text( "@90200402" )
				end
			-- 론도 일 때 (6004)
			elseif npc_id == 6004 then
				if is_able_to_jobchange() == true then
					dlg_text( "@90600409" )
				else
					dlg_text( "@90600402" )
				end
			-- 도시 유적 일 때 (7032)
			elseif npc_id == 7032 then
				if is_able_to_jobchange() == true then
					dlg_text( "@90703209" )
				else
					dlg_text( "@90703202" )
				end
			-- 시크루트 일 때 (7004)
			elseif npc_id == 7004 then
				if is_able_to_jobchange() == true then
					dlg_text( "@90700409" )
				else
					dlg_text( "@90700402" )
				end
			end -- if 끝

			dlg_menu( "@90010002", "" )
			dlg_show()
			return

		-- 전직 가능할 때 테섭이 아니면 튕김.
	
		else
			if is_able_to_jobchange() == false then
				-- 가이아 일 때 (4004)
				if npc_id == 4004 then
					dlg_title( "@90400401" )
				-- 데바 일 때 (1004)
				elseif npc_id == 1004 then
					dlg_title( "@90100401" )
				-- 아수라 일 때 (2004)
				elseif npc_id == 2004 then
					dlg_title( "@90200401" )
				-- 론도 일 때 (6004)
				elseif npc_id == 6004 then
					dlg_title( "@90600401" )
				-- 도시 유적 일 때 (7032)
				elseif npc_id == 7032 then
					dlg_title( "@90703201" )
				-- 시크루트 일 때 (7004)
				elseif npc_id == 7004 then
					dlg_title( "@90700401" )
				end -- if 끝
				
				-- 가이아 일 때 (4004)
				if npc_id == 4004 then
					dlg_text( "@90400402" )
				-- 데바 일 때 (1004)
				elseif npc_id == 1004 then
					dlg_text( "@90100402" )
				-- 아수라 일 때 (2004)
				elseif npc_id == 2004 then
					dlg_text( "@90200402" )
				-- 론도 일 때 (6004)
				elseif npc_id == 6004 then
					dlg_text( "@90600402" )
				-- 도시 유적 일 때 (7032)
				elseif npc_id == 7032 then
					dlg_text( "@90703202" )
				-- 시크루트 일 때 (7004)
				elseif npc_id == 7004 then
					dlg_text( "@90700402" )
				end -- if 끝
				dlg_menu( "@90010002", "" )
				dlg_show()
				return
			end
		end

	-- 여기까지 오면 2차직업인 상태. 3차로의 전직은 불가능함
	elseif get_value( "job_depth" ) == 3 then
	
		-- 가이아 일 때 (4004)
		if npc_id == 4004 then
			dlg_title( "@90400401" )
		-- 데바 일 때 (1004)
		elseif npc_id == 1004 then
			dlg_title( "@90100401" )
		-- 아수라 일 때 (2004)
		elseif npc_id == 2004 then
			dlg_title( "@90200401" )
		-- 론도 일 때 (6004)
		elseif npc_id == 6004 then
			dlg_title( "@90600401" )
		-- 도시유적 일 때 (7032)
		elseif npc_id == 7032 then
			dlg_title( "@90703201" )
			
		-- 시크루트 일 때 (7004)
		elseif npc_id == 7004 then
			dlg_title( "@90700401" )

		end -- if 끝


		
		if reset_count == 0 then
			dlg_text( "@90604793" )
		elseif reset_count == 1 then
			dlg_text( "@90604794" )
		elseif reset_count == 2 then
			dlg_text( "@90604795" )
		elseif reset_count == 3 then
			dlg_text( "@90604796" )
		elseif reset_count == 4 then
			dlg_text( "@90604797" )
		elseif reset_count == 5 then
			dlg_text( "@90604798" )
		elseif reset_count == 6 then
			dlg_text( "@90604799" )
		elseif reset_count == 7 then
			dlg_text( "@90604800" )
		elseif reset_count == 8 then
			dlg_text( "@90604801" )
		elseif reset_count == 9 then
			dlg_text( "@90604802" )
		end
				

		-- 마스터 클래스 초기�* 스킬 가능 멘트					
		

			
		
		-- 루피로 초기�*하기		
		dlg_menu( "@90604803", "gold_skill_reset_check(npc_id)")
		-- JP로 초기�*하기
		dlg_menu( "@90604804", "jp_skill_reset_check(npc_id)")
		
		-- 아이템 테스트용
		--dlg_menu( "Skill reset count Init", "Skill_reset_count_init()")		
		--dlg_menu( "Item skill reset", "item_skill_reset()")
							
		dlg_menu( "@90010002", "" )
			
		
		dlg_show()

		return
	
	else
		-- 가이아 일 때 (4004)
		if npc_id == 4004 then
			dlg_title( "@90400401" )
		-- 데바 일 때 (1004)
		elseif npc_id == 1004 then
			dlg_title( "@90100401" )
		-- 아수라 일 때 (2004)
		elseif npc_id == 2004 then
			dlg_title( "@90200401" )
		-- 론도 일 때 (6004)
		elseif npc_id == 6004 then
			dlg_title( "@90600401" )
		-- 도시유적 일 때 (7032)
		elseif npc_id == 7032 then
			dlg_title( "@90703201" )
			
		-- 시크루트 일 때 (7004)
		elseif npc_id == 7004 then
			dlg_title( "@90700401" )
		end -- if 끝

		-- 더 이상 전직이 불가능하다는 멘트
		-- dlg_text( "@90100411" )
		-- 마스터 클래스로 전직을 원한다면 영웅 헥토르를 만나라는 멘트
		dlg_text( "@91002563" )	
					
		dlg_menu( "@90010002", "" )
		
		dlg_show()

		return
	end

	

	-- 여기까지 왔으면 전직 가능
	
	local race = get_value( "race" )
	local job_name1, job1, job_name2, job2, job_name3, job3, number_job, current_job

	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_title( "@90400401" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_title( "@90100401" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_title( "@90200401" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_title( "@90600401" )
	-- 도시 유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_title( "@90703201" )
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_title( "@90700401" )
	end -- if 끝

	-- 전직 가능한 직업의 개수를 초기�*. 기본이 3이니 그냥 3으로...
	number_job = 3
	
	-- 현재 직업 ID를 받아 놓는다.
	current_job = get_value( "job" )

	--================================================================================
	-- 1차 전직일 경우.		(테이블에�* 못읽어오므로 전직정보는 여기�* 고치자)
	--================================================================================
	if get_value( "job_depth" ) == 0 then

		dlg_text( "@90100404" )
		-- 전직 가능한 직업의 개수를 설정. 1차 전직이므로 모두 3 이다.
		number_job = 3
	
		--============================================================================
		-- 얘가 데바면 파이터 201, 클레릭 202, 테이머 203
		if race == 4 then
			job_name1 =  "@10201" 
			job1 = 201
			job_name2 =  "@10202" 
			job2 = 202
			job_name3 =  "@10203" 
			job3 = 203

		--============================================================================
		-- 아수라면 스트라이더 301, 매지션 302, �*모너 303
		elseif race == 5 then
			job_name1 =  "@10301" 
			job1 = 301
			job_name2 =  "@10302" 
			job2 = 302
			job_name3 =  "@10303" 
			job3 = 303
	
		--============================================================================
		-- 가이아라면 투사 101, 주술자 102, 야수사 103
		else
			job_name1 =  "@10101" 
			job1 = 101
			job_name2 =  "@10102" 
			job2 = 102
			job_name3 =  "@10103" 
			job3 = 103
		end

	--================================================================================
	-- 2차 전직일 경우.		(테이블에�* 못읽어오므로 전직정보는 여기�* 고치자)
	--================================================================================
	elseif get_value( "job_depth" ) == 1 then
	
		dlg_text( "@90700410" )

		--============================================================================
		-- 데바일 때
		if race == 4 then

			-- 파이터 전직 전직		
			if current_job == 201 then
				-- 나이트 210, 워리어 211
				number_job = 2
				
				job_name1 =  "@10210"
				job1 = 210
				job_name2 =  "@10211"
				job2 = 211

			-- 클레릭의 전직
			elseif current_job == 202 then
				-- 메이지 212, 프리스트 213
				number_job = 2
				
				job_name1 =  "@10212" 
				job1 = 212
				job_name2 =  "@10213" 
				job2 = 213
				

			-- 테이머의 전직		
			elseif current_job == 203 then
				-- 브리더
				number_job = 1
				
				job_name1 =  "@10214" 
				job1 = 214
				
				
			-- 이도저도 아니면 아무것도 아니다.
			else
				number_job = 0
			end

		--============================================================================
		-- 아수라
		elseif race == 5 then

			-- 스트라이더의 전직		
			if current_job == 301 then
				-- 어쌔신 310, 레인저 311
				number_job = 2
				
				job_name1 =  "@10310" 
				job1 = 310
				job_name2 =  "@10311" 
				job2 = 311

			-- 다크매지션의 전직		
			elseif current_job == 302 then
				-- 소�*러 312, 다크매지션 313
				number_job = 2
				
				job_name1 =  "@10312" 
				job1 = 312
				job_name2 =  "@10313" 
				job2 = 313

			-- �*모너 전직		
			elseif current_job == 303 then
				-- 
				number_job = 1
				
				job_name1 =  "@10314" 
				job1 = 314
				
				
			-- (무시.)
			else
				number_job = 0
			end
	
		--============================================================================
		-- 가이아
		else
			-- 투사의 전직	101	
			if current_job == 101 then
				-- 전사 110, 궁사 111
				number_job = 2
				
				job_name1 =  "@10110" 
				job1 = 110
				job_name2 =  "@10111" 
				job2 = 111

			-- 주술사의 전직
			elseif current_job == 102 then
				-- 마도사 112, 마투사 113
				number_job = 2
				
				job_name1 =  "@10112" 
				job1 = 112
				job_name2 =  "@10113" 
				job2 = 113

			-- 야수사의 전직
			elseif current_job == 103 then
				-- 마수사 114
				number_job = 1
				
				job_name1 =  "@10114" 
				job1 = 114
			-- 이도저도 아니면 아무것도 아니다.
			else
				number_job = 0
			end	
		end

	end
	
	if number_job == 1 then
		dlg_menu( job_name1 , "Run_JobChange_check_common( '" .. job_name1 .. "' , " .. job1 .. " )" )
		
	elseif number_job == 2 then
		dlg_menu( job_name1 , "Run_JobChange_check_common( '" .. job_name1 .. "' , " .. job1 .. " )" )
		dlg_menu( job_name2 , "Run_JobChange_check_common( '" .. job_name2 .. "' , " .. job2 .. " )" )
	
	elseif number_job == 3 then
		dlg_menu( job_name1 , "Run_JobChange_check_common( '" .. job_name1 .. "' , " .. job1 .. " )" )
		dlg_menu( job_name2 , "Run_JobChange_check_common( '" .. job_name2 .. "' , " .. job2 .. " )" )
		dlg_menu( job_name3 , "Run_JobChange_check_common( '" .. job_name3 .. "' , " .. job3 .. " )" )

	else
	
	end
		
	dlg_menu( "@90010001", '' )
 
	dlg_show()
	
end

----------------------------------------------------------------------------------------------------------------------
function NPC_master_partdevil_contact()
 
	-- 임시 변수 선언과 동시에 NPC ID 가져오기
	local npc_id = get_npc_id()
	-- 국가 코드 읽어오기
		-- get_local_info()의 반환값들
		--LOCAL_INFO_KOREA                      = 1
		--LOCAL_INFO_HONGKONG                   = 2
		--LOCAL_INFO_AMERICA                    = 4
		--LOCAL_INFO_EUROPE                     = 8
		--LOCAL_INFO_JAPAN                      = 16
		--LOCAL_INFO_TAIWAN                     = 32
		--LOCAL_INFO_CHINA                      = 64
	
	local state_code = get_local_info()

	local quest_progress3322 = get_quest_progress(3322)		

	--================================================================================
	-- 전직 불가능한 경우 골라내기
	--================================================================================
	-- 마스터 클래스 전직 가능 여부			
	if get_value( "job_depth" ) == 2 then
	
	
		-- 전직 불가능한 조건이면 튕김
		-- 전직 조건 변경 : 145 -> 148 2011년 4월 18일 우상욱
		if get_value( "level" ) < 147 or get_value( "job_level" ) < 49 then
			-- 마스터 사탄소녀
			dlg_title( "@91002405" )
						
				if is_able_to_jobchange() == true then
					dlg_text( "@91002407" )
					dlg_menu( "@90010003", "goto_hactor()" )
				else
					--지금은 마스터클래스로의 전직이 불가능한 상태입니다.
					dlg_text( "@91002406" )
					dlg_menu( "@90010003", "goto_hactor()" )
				end

			dlg_menu( "@90010002", "" )
			dlg_show()
			return

		-- 전직 가능할 때 테섭이 아니면 튕김.
		else
			if is_able_to_jobchange() == false then
				dlg_title( "@91002405" )
				dlg_text( "@91002406" )
						
				dlg_menu( "@90010002", "" )
				dlg_show()
				return
			end
		end

	-- 이미 3차직업인 상태. 더이상 전직은 불가능함
	elseif get_value("job_depth") == 3 then
		
		dlg_title( "@91002405" )
		-- 더 이상 전직이 불가능하다는 멘트
		dlg_text( "@91002408" )
		
		--TP 포인트란?
		dlg_menu( "@91002550", "tp_point_2()")
		
		
		dlg_menu( "@90010003", 'goto_hactor()' )
		
		dlg_menu( "@90010002", "" )
		
		dlg_show()

		return
	-- 1차 직업이 여기�* 뭐하니? 누구랑 왔니? 전직 하고 와라 -_-
	else
		dlg_title( "@91002405" )

		if get_value("job") == 200 then
			job_name = "@1356"
		elseif get_value("job") == 201 then
			job_name = "@1357"
		elseif get_value("job") == 202 then
			job_name = "@1358"
		elseif get_value("job") == 203 then
			job_name = "@1359"
		elseif get_value("job") == 100 then
			job_name = "@1342"
		elseif get_value("job") == 101 then
			job_name = "@1343"
		elseif get_value("job") == 102 then
			job_name = "@1344"
		elseif get_value("job") == 103 then
			job_name = "@1345"
		elseif get_value("job") == 300 then
			job_name = "@1372"
		elseif get_value("job") == 301 then
			job_name = "@1373"
		elseif get_value("job") == 302 then
			job_name = "@1374"
		elseif get_value("job") == 303 then
			job_name = "@1375"
		end
		

		dlg_text_without_quest_menu(sconv("@91002426", "#@job_name@#",job_name))
		
		dlg_menu( "@90010002", "" )
		dlg_show()

		return
	end

	

	-- 여기까지 왔으면 전직 가능
	
	local race = get_value( "race" )
	local job_name1, job1, job_name2, job2, job_name3, job3, number_job, current_job

	dlg_title( "@91002405" )
	

	-- 전직 가능한 직업의 개수를 초기�*. 기본이 3이니 그냥 3으로...
	number_job = 3
	
	-- 현재 직업 ID를 받아 놓는다.
	current_job = get_value( "job" )


	--================================================================================
	-- 마스터 클래스 전직일 경우.		(테이블에�* 못읽어오므로 전직정보는 여기�* 고치자)
	--================================================================================
	if get_value( "job_depth" ) == 2 then
		
		
		-- 퀘스트 상태 체크 	get_quest_progress(ID)  
		-- 반환값 -1 : 아무것도 아님  /  0 : 수락가  /  1 : 수행중  /  2 : 종료가능  /  255 : 이미종료
		--if quest_progress3322 == 255 then


			dlg_text( "@91002409" ) --마스터클래스 전직 대상자 대사
			--============================================================================
			-- 데바일 때
			if race == 4 then

				-- 나이트 전직 전직		
				if current_job == 210 then
					-- 가즈나이트 220
					number_job = 1
				
					job_name1 =  "@10220"
					job1 = 220
					

				-- 워리어 전직 전직		
				elseif current_job == 211 then
					-- 히어로 221
					number_job = 1
				
					job_name1 =  "@10221"
					job1 = 221

				-- 메이지의 전직
				elseif current_job == 212 then
					-- 아크메이지 222
					number_job = 1
				
					job_name1 =  "@10222" 
					job1 = 222
				
				-- 프리스트의 전직
				elseif current_job == 213 then
					--  세인트 223
					number_job = 1
				
					job_name1 =  "@10223" 
					job1 = 223

				-- 브리더의 전직		
				elseif current_job == 214 then
				
					-- 마에스트로 224
					number_job = 1
				
					job_name1 =  "@10224" 
					job1 = 224
				
				
				-- 이도저도 아니면 아무것도 아니다.
				else
					number_job = 0
			end

--============================================================================
			-- 아수라
			elseif race == 5 then

				-- 어쌔신의 전직		
				if current_job == 310 then
					-- 스펙터 320
					number_job = 1
				
					job_name1 =  "@10320" 
					job1 = 320


				-- 레인져의 전직		
				elseif current_job == 311 then
					--  섀도우스토커 321
					number_job = 1
				
					job_name1 =  "@10321" 
					job1 = 321

				-- 소�*러의 전직		
				elseif current_job == 312 then
					-- 둠세이어 322
					number_job = 1
				
					job_name1 =  "@10322" 
					job1 = 322


				-- 다크매지션의 전직		
				elseif current_job == 313 then
					-- 소울리버 323
					number_job = 1

					job_name1 =  "@10323" 
					job1 = 323

				-- 배틀�*모너 전직		
				elseif current_job == 314 then
				
				-- 길가메쉬 324
					number_job = 1
				
					job_name1 =  "@10324" 
					job1 = 324
									
				-- (무시.)
				else
					number_job = 0
				end

--============================================================================
			-- 가이아
			else
				-- 전사의 전직	
				if current_job == 110 then
					-- 투신 120
					number_job = 1
					
					job_name1 =  "@10120" 
					job1 = 120

	
				-- 궁사의 전직	
				elseif current_job == 111 then
					-- 신궁 121
					number_job = 1
					
					job_name1 =  "@10121" 
					job1 = 121
	

				-- 마도사의 전직
				elseif current_job == 112 then
					-- 현자 122
					number_job = 1
					
					job_name1 =  "@10122" 
					job1 = 122


				-- 마투사의 전직
				elseif current_job == 113 then
					-- 금�* 123
					number_job = 1
					
					job_name1 =  "@10123" 
					job1 = 123

				-- 마수사의 전직
				elseif current_job == 114 then
					-- 나찰 124
					number_job = 1
				
					job_name1 =  "@10124" 
					job1 = 124

				-- 이도저도 아니면 아무것도 아니다.
				else
					number_job = 0
				end
			end

		else
			-- 모든 시련을 이겨내고 여기까지 온 것을 축하합니다.<(version:7.3)>			
			dlg_title( "@90300401" )
			dlg_text( "@91002486" )
		
		
			dlg_menu( "@90010003", 'goto_hactor()' )
		
			dlg_menu( "@90010002", " " )
		
			dlg_show()
			return
		end

	

	if number_job == 1 then
		dlg_menu( job_name1 , "Run_JobChange_check_common( '" .. job_name1 .. "' , " .. job1 .. " )" )
		
	elseif number_job == 2 then
		dlg_menu( job_name1 , "Run_JobChange_check_common( '" .. job_name1 .. "' , " .. job1 .. " )" )
		dlg_menu( job_name2 , "Run_JobChange_check_common( '" .. job_name2 .. "' , " .. job2 .. " )" )
	
	elseif number_job == 3 then
		dlg_menu( job_name1 , "Run_JobChange_check_common( '" .. job_name1 .. "' , " .. job1 .. " )" )
		dlg_menu( job_name2 , "Run_JobChange_check_common( '" .. job_name2 .. "' , " .. job2 .. " )" )
		dlg_menu( job_name3 , "Run_JobChange_check_common( '" .. job_name3 .. "' , " .. job3 .. " )" )

	else
	
	end

	dlg_menu( "@90010003", 'goto_hactor()' )
	
	dlg_menu( "@90010001", '' )
 
	dlg_show()
	
end


function goto_hactor()

	warp( 138645, 75174, gv("layer") )

end


function tp_point()

	-- 다이얼로그 출력
	dlg_title( "@90999851" )
	dlg_text( "@91002551" )


	--특성 스킬이란?
	dlg_menu( "@91002554", "tp_skill()")

	-- 대�*종료 
	--dlg_menu( "@90010003","NPC_master_partdevil_contact()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end		

function tp_skill()

	-- 다이얼로그 출력
	dlg_title( "@90999851" )

	--TP 포인트 분배는 어쩌구 저쩌구
	dlg_text( "@91002553" )

	--상위 특성 스킬이란?
	dlg_menu( "@91002556", "upper_tp_skill()")
	
	-- 하위 특성 스킬이란?
	dlg_menu( "@91002558", "lower_tp_skill()")

	-- 대�*종료 

	dlg_menu( "@90010003","tp_point()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end	

function 	upper_tp_skill()

	-- 다이얼로그 출력
	dlg_title( "@90999851" )

	-- 상위 특성 스킬은 어쩌구 저쩌구
	dlg_text( "@91002557" )

	-- 대�*종료 

	dlg_menu( "@90010003","tp_skill()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end

function 	lower_tp_skill()

	-- 다이얼로그 출력
	dlg_title( "@90999851" )

	-- 하위 특성 스킬은 어쩌구 저쩌구
	dlg_text( "@91002559" )


	-- 대�*종료 

	dlg_menu( "@90010003","tp_skill()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end


-----------------------------------------------------------
-- 사탄소녀 TP 포인트 설명
function tp_point_2()

	-- 다이얼로그 출력
	dlg_title( "@91002405" )
	dlg_text( "@91002551" )


	--특성 스킬이란?
	dlg_menu( "@91002554", "tp_skill_2()")

	-- 대�*종료 
	dlg_menu( "@90010003","NPC_master_partdevil_contact()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end		

function tp_skill_2()

	-- 다이얼로그 출력
	dlg_title( "@91002405" )

	--TP 포인트 분배는 어쩌구 저쩌구
	dlg_text( "@91002553" )

	--상위 특성 스킬이란?
	dlg_menu( "@91002556", "upper_tp_skill_2()")
	
	-- 하위 특성 스킬이란?
	dlg_menu( "@91002558", "lower_tp_skill_2()")

	-- 대�*종료 

	dlg_menu( "@90010003","tp_point_2()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end	

function 	upper_tp_skill_2()

	-- 다이얼로그 출력
	dlg_title( "@91002405" )

	-- 상위 특성 스킬은 어쩌구 저쩌구
	dlg_text( "@91002557" )

	-- 대�*종료 

	dlg_menu( "@90010003","tp_skill_2()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end

function 	lower_tp_skill_2()

	-- 다이얼로그 출력
	dlg_title( "@91002405" )

	-- 하위 특성 스킬은 어쩌구 저쩌구
	dlg_text( "@91002559" )


	-- 대�*종료 

	dlg_menu( "@90010003","tp_skill_2()" )	-- 돌아가기

	dlg_menu( "@90010002", " " )
	dlg_show()

end
------------------------------------------------------------------------------------------------------------------------
function Run_JobChange_check_common( job_name , job_id )

	-- 임시 변수 선언과 동시에 NPC ID 가져오기
	local npc_id = get_npc_id()
	local jobid = job_id

	-- 클릭 실수했을지도 모르므로 확실한지 확인해줌.

	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_title( "@90400401" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_title( "@90100401" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_title( "@90200401" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_title( "@90600401" )
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_title( "@90700401" )
	-- 마스터 사탄소녀
	elseif npc_id == 11555 then
		dlg_title( "@91002405" )
	end -- if 끝

	
	
		
	if jobid == 210 then
		dlg_text_without_quest_menu("@90700411")
	elseif jobid == 211 then
		dlg_text_without_quest_menu("@90700412")
	elseif jobid == 212 then
		dlg_text_without_quest_menu("@90700413")
	elseif jobid == 213 then
		dlg_text_without_quest_menu("@90700414")
	elseif jobid == 214 then
		dlg_text_without_quest_menu("@90700415")
	elseif jobid == 310 then
		dlg_text_without_quest_menu("@90700416")
	elseif jobid == 311 then
		dlg_text_without_quest_menu("@90700417")
	elseif jobid == 312 then
		dlg_text_without_quest_menu("@90700418")
	elseif jobid == 313 then
		dlg_text_without_quest_menu("@90700419")
	elseif jobid == 314 then
		dlg_text_without_quest_menu("@90700420")
	elseif jobid == 110 then
		dlg_text_without_quest_menu("@90700421")
	elseif jobid == 111 then
		dlg_text_without_quest_menu("@90700422")
	elseif jobid == 112 then
		dlg_text_without_quest_menu("@90700423")
	elseif jobid == 113 then
		dlg_text_without_quest_menu("@90700424")
	elseif jobid == 114 then
		dlg_text_without_quest_menu("@90700425")
	elseif jobid == 101 then
	    dlg_text_without_quest_menu("@90301919")
  	elseif jobid == 102 then
	    dlg_text_without_quest_menu("@90301920")
	elseif jobid == 103 then
	    dlg_text_without_quest_menu("@90301921")
	elseif jobid == 201 then
	    dlg_text_without_quest_menu("@90301913")
	elseif jobid == 202 then
	    dlg_text_without_quest_menu("@90301914")
	elseif jobid == 203 then
	    dlg_text_without_quest_menu("@90301915")
  	elseif jobid == 301 then
	    dlg_text_without_quest_menu("@90301916")
	elseif jobid == 302 then
	    dlg_text_without_quest_menu("@90301917")
	elseif jobid == 303 then
	    dlg_text_without_quest_menu("@90301918")
	elseif jobid == 120 then --투신이란
	    dlg_text_without_quest_menu("@91002410")
	elseif jobid == 121 then --신궁이란
	    dlg_text_without_quest_menu("@91002411")
	elseif jobid == 122 then --현자란
	    dlg_text_without_quest_menu("@91002412")
	elseif jobid == 123 then --금�*이란
	    dlg_text_without_quest_menu("@91002413")
	elseif jobid == 124 then --나찰이란
	    dlg_text_without_quest_menu("@91002414")
	elseif jobid == 220 then --가즈나이트란
	    dlg_text_without_quest_menu("@91002415")
	elseif jobid == 221 then --히어로란
	    dlg_text_without_quest_menu("@91002416")
	elseif jobid == 222 then --아크메이지란
	    dlg_text_without_quest_menu("@91002417")
	elseif jobid == 223 then --세인트란
	    dlg_text_without_quest_menu("@91002418")
	elseif jobid == 224 then --마에스트로란
	    dlg_text_without_quest_menu("@91002419")
	elseif jobid == 320 then --스펙터란
	    dlg_text_without_quest_menu("@91002420")
	elseif jobid == 321 then --섀도우스토커란
	    dlg_text_without_quest_menu("@91002421")
	elseif jobid == 322 then --둠세이어란
	    dlg_text_without_quest_menu("@91002422")
	elseif jobid == 323 then --소울리버란
	    dlg_text_without_quest_menu("@91002423")
	elseif jobid == 324 then --길가메쉬란
	    dlg_text_without_quest_menu("@91002424")
	end
	
	dlg_menu( "@90010007", "Run_JobChange_common( '" .. job_name .. "' , "  .. job_id ..' )' )

	dlg_menu( "@90010001", '' )
		
	dlg_show()
	
end


function Run_JobChange_common( job_name , job_id )

	
	local current_job, current_jlv, job_depth
	
	-- 임시 변수 선언과 동시에 NPC ID 가져오기
	local npc_id = get_npc_id()
	
	-- 시작
	-- NPC 대�* 최종 단계에�* 마스터 클래스 전직 조건 한번 더 하기
	-- 마스터 사탄소녀
	if npc_id == 11555 then
		--================================================================================
		-- 전직 불가능한 경우 골라내기
		--================================================================================
		-- 마스터 클래스 전직 가능 여부	
		if get_value( "job_depth" ) == 2 then
		
		
			-- 전직 불가능한 조건이면 튕김
			-- 전직 조건 변경 : 145 -> 148 2011년 4월 18일 우상욱
			if get_value( "level" ) < 147 or get_value( "job_level" ) < 49 then
				-- 마스터 사탄소녀
				dlg_title( "@91002405" )
							
					if is_able_to_jobchange() == true then
						dlg_text( "@91002407" )
						dlg_menu( "@90010003", "goto_hactor()" )
					else
						--지금은 마스터클래스로의 전직이 불가능한 상태입니다.
						dlg_text( "@91002406" )
						dlg_menu( "@90010003", "goto_hactor()" )
					end

				dlg_menu( "@90010002", "" )
				dlg_show()
				return

			-- 전직 가능할 때 테섭이 아니면 튕김.
			else
				if is_able_to_jobchange() == false then
					dlg_title( "@91002405" )
					dlg_text( "@91002406" )
							
					dlg_menu( "@90010002", "" )
					dlg_show()
					return
				end
			end

		-- 이미 3차직업인 상태. 더이상 전직은 불가능함
		elseif get_value("job_depth") == 3 then
			
			dlg_title( "@91002405" )
			-- 더 이상 전직이 불가능하다는 멘트
			dlg_text( "@91002408" )
			
			--TP 포인트란?
			dlg_menu( "@91002550", "tp_point_2()")
			
			
			dlg_menu( "@90010003", 'goto_hactor()' )
			
			dlg_menu( "@90010002", "" )
			
			dlg_show()

			return
		-- 1차 직업이 여기�* 뭐하니? 누구랑 왔니? 전직 하고 와라 -_-
		else
			dlg_title( "@91002405" )

			if get_value("job") == 200 then
				job_name = "@1356"
			elseif get_value("job") == 201 then
				job_name = "@1357"
			elseif get_value("job") == 202 then
				job_name = "@1358"
			elseif get_value("job") == 203 then
				job_name = "@1359"
			elseif get_value("job") == 100 then
				job_name = "@1342"
			elseif get_value("job") == 101 then
				job_name = "@1343"
			elseif get_value("job") == 102 then
				job_name = "@1344"
			elseif get_value("job") == 103 then
				job_name = "@1345"
			elseif get_value("job") == 300 then
				job_name = "@1372"
			elseif get_value("job") == 301 then
				job_name = "@1373"
			elseif get_value("job") == 302 then
				job_name = "@1374"
			elseif get_value("job") == 303 then
				job_name = "@1375"
			end
			

			dlg_text_without_quest_menu(sconv("@91002426", "#@job_name@#",job_name))
			
			dlg_menu( "@90010002", "" )
			dlg_show()

			return
		end	
	
	end -- if 끝
	-- NPC 대�* 최종 단계에�* 마스터 클래스 전직 조건 한번 더 하기
	--종료
	

	-- 에헤라디야~~ 전직이요~

	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_title( "@90400401" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_title( "@90100401" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_title( "@90200401" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_title( "@90600401" )
	-- 도시 유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_title( "@90703201" )
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_title( "@90700401" )
	-- 마스터 사탄소녀
	elseif npc_id == 11555 then
		dlg_title( "@91002405" )
	end -- if 끝
	
	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_text_without_quest_menu(sconv("@90400406", "#@job_name@#",job_name))
		--##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_text_without_quest_menu(sconv("@90100406", "#@job_name@#",job_name))
		--##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_text_without_quest_menu(sconv("@90200406", "#@job_name@#",job_name))
		--##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_text_without_quest_menu(sconv("@90600406", "#@job_name@#",job_name))
		--##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	-- 도시 유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_text_without_quest_menu(sconv("@90703206", "#@job_name@#",job_name))
		--##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_text_without_quest_menu(sconv("@90700406", "#@job_name@#",job_name))
		--##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	-- 마스터 사탄소녀
	elseif npc_id == 11555 then
		dlg_text_without_quest_menu(sconv("@91002425", "#@job_name@#",job_name))
		local master_up = sconv("@246", "#@user_name@#", get_value("name"),"#@job_name@#",job_name)		
		announce( master_up )

		--##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	end -- if 끝
	

	dlg_menu( "@90010002", '' )
	
	dlg_show()
	
	-- 전직 전 직업과 잡레벨을 저장한다.
	current_job = get_value( "job" )
	current_jlv = get_value( "job_level" )
	job_depth = get_value( "job_depth" )
	if job_depth == 0 then
		set_value( "job_0", current_job )
		set_value( "jlv_0", current_jlv )
		--0차에�* 1차 전직할때 "신성한 불꽃의 힘" 아이템을 1개 지급해준다. 해당 아이템은 잡�*상점에�*도 판매한다.
		--insert_item( 2013081, 1 ) --아이템 능력치가 너무 좋아�* 미적용으로 수정
		--cprint( "@90606144" )
	elseif job_depth == 1 then
		set_value( "job_1", current_job )
		set_value( "jlv_1", current_jlv )
	elseif job_depth == 2 then
		set_value( "job_2", current_job )
		set_value( "jlv_2", current_jlv )

	--마스터클래스 전직 전 직업과 잡레벨 저장
	elseif job_depth == 3 then
		set_value( "job_3", current_job )
		set_value( "jlv_3", current_jlv )
	end
	
	job_depth = job_depth + 1
	-- 전직 시키기.
	set_value( "job" , job_id )
	set_value( "job_level" , 1 )
	set_value( "job_depth" , job_depth )
	--##시작
	message( sconv("@90010017", "#@job_name@#",job_name) )
    --끝 #@job_name@# (/으)로 전직했습니다

	
end


function NPC_TestServer_Support()
 
	-- 임시 변수 선언과 동시에 NPC ID 가져오기
	local npc_id = get_npc_id()
	-- 국가 코드 읽어오기
		-- get_local_info()의 반환값들
		--LOCAL_INFO_KOREA                      = 1
		--LOCAL_INFO_HONGKONG                   = 2
		--LOCAL_INFO_AMERICA                    = 4
		--LOCAL_INFO_EUROPE                     = 8
		--LOCAL_INFO_JAPAN                      = 16
		--LOCAL_INFO_TAIWAN                     = 32
		--LOCAL_INFO_CHINA                      = 64
		
	local state_code = get_local_info()

	

	-- 0차, 2차 직업일때 도우미 �*비스 받을 수 없다.
	if get_value( "job_depth" ) == 0 then

		dlg_title( "@91002016" )
		dlg_text( "@91002018" )
		dlg_menu( "@90010002", "" )
		
		dlg_show()
		
		return
	
	end
	
	
	local race = get_value( "race" )
	local job_name1, job1, job_name2, job2, job_name3, job3, number_job, current_job


		
	-- 현재 직업 ID를 받아 놓는다.
	current_job = get_value( "job" )



	--================================================================================
	-- 1차 직업일때 레벨업110, 잡레벨50, 5랭크 지원 아이템을 받을 수 있다.
	--================================================================================
	if get_value( "job_depth" ) == 1 then
	
		dlg_title( "@91002016" )
		dlg_text( "@91002019" )
		dlg_menu( "@91002020", "TestServer_Support_lv_jp()" )
		dlg_menu( "@91002021", "TestServer_Support_5rank_item()" )
		dlg_menu( "@90010002", " " )
		
		dlg_show()
		
		return	
	
	end
	
	if get_value( "job_depth" ) == 2 then
	
		dlg_title( "@91002016" )
		dlg_text( "@91002019" )
		dlg_menu( "@91002020", "TestServer_Support_jp()" )
		dlg_menu( "@91002027", "TestServer_Support_rupee()" )
		dlg_menu( "@90010002", " " )
		
		dlg_show()
		
		return	
	
	end
	
	dlg_menu( "@90010002", " " )	
	 
	dlg_show()
	
end

--2차전직 후 잡 레벨 지원
function TestServer_Support_jp()
 
		
	set_value( "job_level" , 50 )

	dlg_title( "@91002016" )
	dlg_text( "@91002022" )
	dlg_menu( "@90010002", "" )
	dlg_show()
	
end

--2차전직 후 루피 지원
function TestServer_Support_rupee()
	dlg_title( "@91002016" )

	if get_flag( "designteam_bless" ) ~= 1 then
		dlg_text( "@91002025" ) -- <(version:7.2)>루피와 루나칩을 지원해준다는 내용
		
		-- 잡포인트 설정
		add_value( "jp" , 83120300 )
		add_value( "gold" , 500001 )
		
		insert_item( 690303, 4521 )
		cprint( "@91000778" ) -- <(version:7.2)><#6DD66D>아이템을 획득 하였습니다.
		
		--루피지원 플래그 설정
		set_flag( "designteam_bless", 1 )
	else
		dlg_text( "@91002026" ) -- <(version:7.2)>이미 지원을 받으셨네요~ 즐거운 하루 되세요!
		--add_state( 1013, 10, 120000) -- 이동속도 증가( 10레벨 , 20분)
	end
	
	dlg_menu( "@90010002", "" )
	dlg_show()
end

function TestServer_Support_lv_jp()
 
	-- 레벨 및 잡포인트 설정
		
	set_value( "level" , 109 )
	set_value( "job_level" , 50 )

	dlg_title( "@91002016" )
	dlg_text( "@91002022" )
	dlg_menu( "@90010002", "" )
	dlg_show()

	
end

function TestServer_Support_5rank_item()

	-- 넣어줄 아이템ID, 개수
		insert_item ( 18000040, 1 )
		insert_item ( 18000041, 1 )
		insert_item ( 18000042, 1 )
		insert_item ( 18000043, 1 )
		insert_item ( 18000044, 1 )
		insert_item ( 18000045, 1 )
		insert_item ( 18000046, 1 )
		insert_item ( 18000047, 1 )
		insert_item ( 18000048, 1 )
		insert_item ( 18000049, 1 )
		insert_item ( 18000050, 1 )
		insert_item ( 18000051, 1 )
		insert_item ( 18000052, 1 )
		insert_item ( 18000053, 1 )
		insert_item ( 18000054, 1 )
		insert_item ( 18000055, 1 )
		insert_item ( 18000056, 1 )
		insert_item ( 18000057, 1 )
		insert_item ( 18000058, 1 )
		insert_item ( 18000059, 1 )
		insert_item ( 18000060, 1 )
		insert_item ( 18000061, 1 )
		insert_item ( 18000062, 1 )
		insert_item ( 18000063, 1 )
		insert_item ( 18000064, 1 )
		insert_item ( 18000065, 1 )
		insert_item ( 18000066, 1 )
		insert_item ( 18000067, 1 )
		insert_item ( 18000068, 1 )
		insert_item ( 18000069, 1 )
		insert_item ( 18000070, 1 )
		insert_item ( 18000071, 1 )
		insert_item ( 18000072, 1 )
		insert_item ( 18000073, 1 )
		insert_item ( 18000074, 1 )
		insert_item ( 18000075, 1 )

	dlg_title( "@91002016" )
	dlg_text( "@91002022" )
	dlg_menu( "@90010002", "" )
	dlg_show()

end


--------------------------------------------------------------------------------------------------------------------------




------------------------------------------------------------------------------------------------------------------------
------------------------- 수련자의 섬 잡 �*포터는 튜토리얼에 있습니다. 이건 사용하지 않습니다. -------------------------
------------------------------------------------------------------------------------------------------------------------



	--=====================================================
	-- 초보자섬 섬 용
	--=====================================================

function NPC_JobChange_Beginner_contact()
 

	--================================================================================
	-- 전직 불가능한 경우 골라내기
	--================================================================================

	-- 기본직업일 때 Lv이나 JLv이 10 미만이면 전직불가.
	if get_value( "job_depth" ) == 0 then
		if get_value( "level" ) < 10 or get_value( "job_level" ) < 10 then
			dlg_title( "@90300401" )
			dlg_text( "@90300403" )
		
			dlg_menu( "@90010002", "" )
			dlg_show()

			return
		end

	-- 1차 직업일 때 Lv50 미만 JLv이 40 미만이면 전직불가. (해제) 2차 직업 전직 모두 막기.
	elseif get_value( "job_depth" ) == 1 then
		if get_value( "level" ) < 50 or get_value( "job_level" ) < 40 then
			dlg_title( "@90300401" )
--			dlg_text( "@90300409" )
			dlg_text( "@90300402" )		--> 임시 : 2차전직 불가능하다는 안내메세지

			dlg_menu( "@90010002", "" )
			dlg_show()
	
			return
		
		else

			dlg_title( "@90300401" )
			dlg_text( "@90300402" )		--> 임시 : 2차전직 불가능하다는 안내메세지

			dlg_menu( "@90010002", "" )
		
			dlg_show()

			return
	
		end

	-- 여기까지 오면 2차직업인 상태. 3차로의 전직은 불가능함.
	else
		dlg_title( "@90300401" )
		dlg_text( "@90300402" )			--> 지금은 3차전직 안된다는 대사

		dlg_menu( "@90010002", "" )
		
		dlg_show()

		return
	end

	

	-- 여기까지 왔으면 전직 가능
	
	local race = get_value( "race" )
	local job_name1, job1, job_name2, job2, job_name3, job3, number_job, current_job

	dlg_title( "@90300401" )

	-- 전직 가능한 직업의 개수를 초기�*. 기본이 3이니 그냥 3으로...
	number_job = 3
	
	-- 현재 직업 ID를 받아 놓는다.
	current_job = get_value( "job" )

	--================================================================================
	-- 1차 전직일 경우.		(테이블에�* 못읽어오므로 전직정보는 여기�* 고치자)
	--================================================================================
	if get_value( "job_depth" ) == 0 then

		dlg_text( "@90300404" )
		-- 전직 가능한 직업의 개수를 설정. 1차 전직이므로 모두 3 이다.
		number_job = 3
	
		--============================================================================
		-- 얘가 데바면 디바인솔져 201 또는 클레릭 203, 브리더 204가 될 수 있다.
		if race == 4 then
			job_name1 =  "@10201" 
			job1 = 201
			job_name2 =  "@10202" 
			job2 = 202
			job_name3 =  "@10203" 
			job3 = 203

		--============================================================================
		-- 아수라면 스트라이더301나 다크매지션303, 소�*러304가 될 수 있다.
		elseif race == 5 then
			job_name1 =  "@10301" 
			job1 = 301
			job_name2 =  "@10302" 
			job2 = 302
			job_name3 =  "@10303" 
			job3 = 303
	
		--============================================================================
		-- 데바도 아수라도 아니면 가이아겠지. 투사 101, 주술사 103, 마수사 104 가 될 수 있다.
		else
			job_name1 =  "@10101" 
			job1 = 101
			job_name2 =  "@10102" 
			job2 = 102
			job_name3 =  "@10103" 
			job3 = 103
		end

	
	end
		
	if number_job == 1 then
		dlg_menu( job_name1 , "Run_JobChange_Beginner_check( '" .. job_name1 .. "' , " .. job1 .. " )" )
		
	elseif number_job == 2 then
		dlg_menu( job_name1 , "Run_JobChange_Beginner_check( '" .. job_name1 .. "' , " .. job1 .. " )" )
		dlg_menu( job_name2 , "Run_JobChange_Beginner_check( '" .. job_name2 .. "' , " .. job2 .. " )" )
	
	elseif number_job == 3 then
		dlg_menu( job_name1 , "Run_JobChange_Beginner_check( '" .. job_name1 .. "' , " .. job1 .. " )" )
		dlg_menu( job_name2 , "Run_JobChange_Beginner_check( '" .. job_name2 .. "' , " .. job2 .. " )" )
		dlg_menu( job_name3 , "Run_JobChange_Beginner_check( '" .. job_name3 .. "' , " .. job3 .. " )" )

	else
	
	end


	dlg_menu( "@90010001", '' )
 
	dlg_show()
	
end

function Run_JobChange_Beginner_check( job_name , job_id )

	-- 클릭 실수했을지도 모르므로 확실한지 확인해줌.

	cprint( job_name )

	dlg_title( "@90300401" )
	--##시작
	--dlg_text( job_name ..  "@90300405"  )
	dlg_text_without_quest_menu(sconv("@90300405", "#@job_name@#",job_name))
    --##끝 #@job_name@# (/으)로의 전직이라...<BR>좋은 직업을 골랐군.<BR>확실한가?
	
	dlg_menu( "@90010007", "Run_JobChange_Beginner( '" .. job_name .. "' , "  .. job_id ..' )' )
	dlg_menu( "@90010001", '' )
	
	dlg_show()
	
end


function Run_JobChange_Beginner( job_name , job_id )

	local current_job, current_jlv

	-- 에헤라디야~~ 전직이요~

	dlg_title( "@90300401" )
	--##시작
	dlg_text_without_quest_menu(sconv("@90300406", "#@job_name@#", job_name))
    --##끝 축하하네!!<BR>지금 이순간부터 자넨 #@job_name@#(/이)라는 직업을 가지게 되었어.<BR>보다 높은 곳을 향해 정진하도록 하게.'
	
	dlg_menu( "@90010002", '' )
	
	dlg_show()

	-- 전직 전 직업과 잡레벨을 저장한다.
	current_job = get_value( "job" )
	current_jlv = get_value( "job_level" )
	
	if get_value( "job_depth" ) == 0 then
		set_value( "job_0", current_job )
		set_value( "jlv_0", current_jlv )
	elseif get_value( "job_depth" ) == 1 then
		set_value( "job_1", current_job )
		set_value( "jlv_1", current_jlv )
	elseif get_value( "job_depth" ) == 2 then
		set_value( "job_2", current_job )
		set_value( "jlv_2", current_jlv )
	end
	
	job_depth = job_depth + 1
	-- 전직 시키기.
	set_value( "job" , job_id )
	set_value( "job_level" , 1 )
	set_value( "job_depth" , job_depth )
	--##시작
	message( sconv("@90010017", "#@job_name@#",job_name) )
    --##끝 #@job_name@# (/으)로 전직했습니다.

	
end


------------------------------------------------------------------------------------------------------------------------
------------------------- 수련자의 섬 잡 �*포터는 튜토리얼에 있습니다. 이건 사용하지 않습니다. -------------------------
------------------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------------------

--마스터 클래스 스킬 초기�* 스크립트 메인

--루피로 초기�* 하기

function gold_skill_reset_check( npc_id )
 
	local reset_gold = { 10000, 2500000, 5000000, 10000000, 25000000, 50000000, 100000000, 500000000, 1000000000, 2000000000 }
	local reset_count = NPC_JobChange_get_resetcount()
	local cost_gold = reset_gold[ reset_count + 1 ]
	local gold = get_value( 'gold' )	
	
	local npc_id = get_npc_id()
	
	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_title( "@90400401" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_title( "@90100401" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_title( "@90200401" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_title( "@90600401" )
	-- 도시유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_title( "@90703201" )
		
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_title( "@90700401" )

	end -- if 끝
	

	if gold >= cost_gold then
        
        set_value( 'gold', gold - cost_gold )
		reset_skill( 3 )
		
		if reset_count < 9 then
			set_flag( 'reset_count', reset_count + 1 )
		
			dlg_text( "@90604805" )

			dlg_menu( "@90010002", "" )
		
			dlg_show()
		
			return
		
		else
		
			set_flag( 'reset_count', 9 )
		
			dlg_text( "@90604805" )

			dlg_menu( "@90010002", "" )
		
			dlg_show()
		
			return
		end		
		
	else
		dlg_text( "@90604806" )

		dlg_menu( "@90010002", "" )
		
		dlg_show()
		
		return
		
	end
		
end



--JP로 초기�* 하기

function jp_skill_reset_check( npc_id )
 
	local reset_jp = { 2000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 100000000, 200000000, 400000000 }
	local reset_count = NPC_JobChange_get_resetcount()
	local cost_jp = reset_jp[ reset_count + 1 ]
	local jp = get_value( 'jp' )	
	
	local npc_id = get_npc_id()
	
	-- 가이아 일 때 (4004)
	if npc_id == 4004 then
		dlg_title( "@90400401" )
	-- 데바 일 때 (1004)
	elseif npc_id == 1004 then
		dlg_title( "@90100401" )
	-- 아수라 일 때 (2004)
	elseif npc_id == 2004 then
		dlg_title( "@90200401" )
	-- 론도 일 때 (6004)
	elseif npc_id == 6004 then
		dlg_title( "@90600401" )
	-- 도시유적 일 때 (7032)
	elseif npc_id == 7032 then
		dlg_title( "@90703201" )
		
	-- 시크루트 일 때 (7004)
	elseif npc_id == 7004 then
		dlg_title( "@90700401" )

	end -- if 끝
	
	if jp >= cost_jp then
        
        set_value( 'jp', jp - cost_jp )
		reset_skill( 3 )
		
		if reset_count < 9 then
			set_flag( 'reset_count', reset_count + 1 )
		
			dlg_text( "@90604805" )

			dlg_menu( "@90010002", "" )
		
			dlg_show()
		
			return
		
		else
		
			set_flag( 'reset_count', 9 )
		
			dlg_text( "@90604805" )

			dlg_menu( "@90010002", "" )
		
			dlg_show()
		
			return
		end		
		
	else
		dlg_text( "@90604806" )

		dlg_menu( "@90010002", "" )
		
		dlg_show()
		
		return
		
	end
	
		
end

--마스터 클래스 스킬 초기�* 카운터 증가 없이 실행

function item_skill_reset()

	
	reset_skill( 3 )
	cprint("@90604808")
	
	return

		
end

--마스터 클래스 초기�* 카운터 초기�* 하기

function Skill_reset_count_init()

	local reset_count = NPC_JobChange_get_resetcount()
	
		
 
	set_flag( 'reset_count', 0 )
	cprint("@90604807")
		
	return

		
end

--성별 변환 하기

function Change_Character_Gender()

	local transgender = get_value("sex")
		
	if transgender == 1 then
		set_value("sex", 2) -- 성별 바꿔주고
	
	elseif transgender == 2 then
		set_value("sex", 1)
	
	end
end






-------------------------------------------------------------------------------------------------------------------------
10/05/2015 07:08 khshe#5186

I need that like on the official server. so the master class was for quests
10/05/2015 15:19 ThunderNikk#5187
That's what I posted.
10/10/2015 10:54 Sherock#5188
i had a problem which it in skill state remaining time

when i use the any skill has a buff , at the first time everything is ok
after that the remaining time go less and less
i use official 9.1 files
i have change the SQL server to another twice and the problem still there

any help ?

notice that when i logoff and login the skill buff remain time back to normal
after 5 mins the problem come back again ! :(
10/17/2015 23:41 ghostfcc#5189
Hello guys,

I'm trying to make NPC walking as guards patrols (which are monsters).
Also I tried to modify, in NPCResource table, columns : is_roam (1) , roaming_id (ex : 4004), standard_walk_speed (40), standard_run_speed (80), walk_speed (40) and run_speed (80)

Gameserver crash when roaming_id > 0

I took my roaming_id from RoamingResource table, but I think it is a different table for NPCs ...

Is someone have tried to make NPC moving?

Thanks
Wen
10/17/2015 23:55 SilentWisdom#5190
Quote:
Originally Posted by ghostfcc View Post
Hello guys,

I'm trying to make NPC walking as guards patrols (which are monsters).
Also I tried to modify, in NPCResource table, columns : is_roam (1) , roaming_id (ex : 4004), standard_walk_speed (40), standard_run_speed (80), walk_speed (40) and run_speed (80)

Gameserver crash when roaming_id > 0

I took my roaming_id from RoamingResource table, but I think it is a different table for NPCs ...

Is someone have tried to make NPC moving?

Thanks
Wen
I have tried this before as-well with a similar result. It is my belief that this feature for NPC was not implemented completely (like lightning in the weather effects) just bad cleanup on the developers part.