//===== rAthena Script ======================================
//= Quest Manager
//===== By: ==================================================
//= Cretino
//= Aeromesi (Found a bug.)
//===== Current Version: =====================================
//= 1.0b (Little improvement and others bugs fixed)
//===== Description: =========================================
//= Create new quests with various requirements and prizes. (eg: Hunt monsters and collect items in same quest and so on...)
//===== Additional Comments: =================================
//= 1.0 Initial version [Cretino]
// TODO: Need revise all script with comments for spelling errors.
// Bug fixed. Thanks to [Aeromesi]:[Hercules]
// Little improvement and others bugs fixed [Cretino]
//============================================================
prontera,146,202,5 script Quest Manager 4_F_HUWOMAN,{
function show_quest;
function del_var;
{
NPC_QUEST_FIRST_MENU:
.@selected
= select("Check quests:Setting quests:Cancel");
if (.@selected == 1)
goto PLAYER_NPC_START;
else if (.@selected == 3)
{
mes "Come back whenever you need me!";
}
NPC_QUEST_SECOND_MENU:
.@selected
= select("Show quests:Add new quest:Erase quests:Back");
if (.@selected == 4)
goto NPC_QUEST_FIRST_MENU;
switch(.@selected)
{
case 1:
{
mes "There is no quests.";
}
else
{
{
show_quest($dq_id[.@i], $dq_name$[.@i], $dq_desc_name$[.@i], $dq_type[.@i], $dq_count[.@i], "$dq_hunting_id_" + $dq_id[.@i],
"$dq_hunting_amount_" + $dq_id[.@i], "$dq_collect_id_" + $dq_id[.@i], "$dq_collect_amount_" + $dq_id[.@i],
"$dq_prize_id_" + $dq_id
[.@i
],
"$dq_prize_amount_" + $dq_id
[.@i
],
getd("$dq_zeny_cost_" + $dq_id
[.@i
]),
getd("$dq_cash_cost_" + $dq_id
[.@i
]),
getd("$dq_kafra_point_cost_" + $dq_id
[.@i
]),
getd("$dq_req_lv_" + $dq_id
[.@i
]),
getd("$dq_max_lv_" + $dq_id
[.@i
]),
getd("$dq_zeny_prize_" + $dq_id
[.@i
]),
getd("$dq_cash_prize_" + $dq_id
[.@i
]),
getd("$dq_kafra_point_prize_" + $dq_id
[.@i
]),
getd("$dq_bexp_prize_" + $dq_id
[.@i
]),
getd("$dq_jobexp_prize_" + $dq_id
[.@i
]),
getd("$dq_delay_" + $dq_id
[.@i
]));
}
if (.@free == 1)
}
goto NPC_QUEST_SECOND_MENU;
case 2:
.@q_id = $dq_generate_id;
mes "Quest ID: ^FF0000" + .@q_id
+ "^000000";
NPC_QUEST_NAME:
mes "Put the quest name:";
if (.@q_name$
== "" ||
compare(.@q_name$,
":"))
{
mes "Invalid quest name.";
.@selected
= select("Yes:No");
goto (.@selected == 1) ? NPC_QUEST_NAME : NPC_QUEST_SECOND_MENU;
}
mes "Quest name: ^FF0000" + .@q_name$
+ "^000000.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
goto (.@selected == 2) ? NPC_QUEST_NAME : NPC_QUEST_SECOND_MENU;
NPC_QUEST_DESC:
mes "Put the quest description:";
.@q_desc_name$
= replacestr(.@q_desc_name$,
":",
"");
if (.@q_desc_name$
== "" ||
compare(.@q_desc_name$,
":"))
{
mes "Invalid quest description.";
.@selected
= select("Yes:No");
goto (.@selected == 1) ? NPC_QUEST_DESC : NPC_QUEST_SECOND_MENU;
}
mes "Quest description: ^FF0000" + .@q_desc_name$
+ "^000000.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
goto (.@selected == 2) ? NPC_QUEST_DESC : NPC_QUEST_SECOND_MENU;
mes "Choose the quest type:";
.@selected
= select("Global:Account:Character:Back");
if (.@selected == 4)
goto NPC_QUEST_SECOND_MENU;
.@q_type = .@selected;
NPC_QUEST_AMOUNT:
mes "How many times this quest can be done?";
mes "If you put '0', will be can done unlimited times without delay time.";
mes "Quest type: ^FF0000" + ((.@q_type
== 1) ?
"Global" : (.@q_type
== 2) ?
"Account" : "Character") + "^000000.";
mes ((.@q_count
== 0) ?
"^FF0000Unlimited^000000" : "^FF0000" + .@q_count
+ "^000000 times") + ".";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
goto (.@selected == 2) ? NPC_QUEST_AMOUNT : NPC_QUEST_SECOND_MENU;
if (.@q_count == 0)
{
.@q_delay = 0;
goto NPC_QUEST_MENU_REQ;
}
NPC_QUEST_DELAY:
mes "Put the quest delay time in seconds:";
mes "If quest have limit and don't have delay, the quest can only be done up to the limit.";
mes "^FF0000" + ((.@q_delay
== 0) ?
"No delay" : callfunc("Time2Str",
(gettimetick(2) + .@q_delay
))) + "^000000.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
goto (.@selected == 2) ? NPC_QUEST_DELAY : NPC_QUEST_SECOND_MENU;
NPC_QUEST_MENU_REQ:
mes "Choose the quest requirements:";
set .@req_menu$, .@req_menu$
+ ((.@q_hunting_count >
0 && getarraysize(.
q_hunting_id) >
0) ?
"" : "Hunting monsters") + ":";
set .@req_menu$, .@req_menu$
+ ((.@q_collect_count >
0 && getarraysize(.
q_collect_id) >
0) ?
"" : "Collect items") + ":";
set .@req_menu$, .@req_menu$
+ ((.@q_zeny_cost >
0) ?
"" : "Zeny") + ":";
set .@req_menu$, .@req_menu$
+ ((.@q_cash_cost >
0) ?
"" : "Cash Points") + ":";
set .@req_menu$, .@req_menu$
+ ((.@q_kafra_point_cost >
0) ?
"" : "Kafra Points") + ":";
set .@req_menu$, .@req_menu$
+ ((.@q_min_lv >
0) ?
"" : "Min level") + ":";
set .@req_menu$, .@req_menu$
+ ((.@q_max_lv >
0) ?
"" : "Max level") + ":";
set .@req_menu$, .@req_menu$
+ "Advance" + ":";
set .@req_menu$, .@req_menu$
+ "Back";
.@selected
= select(.@req_menu$
);
if (.@selected == 9)
{
.@q_prize_count = 0;
.@q_zeny_prize = 0;
.@q_cash_prize = 0;
.@q_kafra_point_prize = 0;
.@q_bexp_prize = 0;
.@q_jobexp_prize = 0;
.@q_hunting_count = 0;
.@q_collect_count = 0;
.@q_zeny_cost = 0;
.@q_cash_cost = 0;
.@q_kafra_point_cost = 0;
.@q_min_lv = 0;
.@q_max_lv = 0;
goto NPC_QUEST_SECOND_MENU;
}
switch(.@selected)
{
case 1:
NPC_QUEST_HUNTING:
mes "Put the amount of monsters you want hunt:";
input .@q_hunting_count,
1;
mes "^FF0000" + .@q_hunting_count
+ "^000000 monsters.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_hunting_count = 0;
goto (.@selected == 2) ? NPC_QUEST_HUNTING : NPC_QUEST_MENU_REQ;
}
for(.@i = 0; .@i < .@q_hunting_count; .@i++)
{
NPC_QUEST_HUNTING_ID:
mes "Put the monster ID: [" + (.@i
+ 1) + "/" + .@q_hunting_count
+ "]";
input .
q_hunting_id[.@i
],
0;
.@q_monster_name$
= strmobinfo(1, .
q_hunting_id[.@i
]);
if (.@q_monster_name$ == "")
{
mes "Invalid monster ID: ^FF0000" + .
q_hunting_id[.@i
] + "^000000 [" + (.@i
+ 1) + "/" + .@q_hunting_count
+ "]";
mes "NOTE: If you select 'No', you will lose all monsters configured.";
.@selected
= select("Yes:No");
if (.@selected == 2)
{
.@q_hunting_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_MENU_REQ : NPC_QUEST_HUNTING_ID;
}
mes "Monster: ^FF0000" + .@q_monster_name$
+ "^000000 (ID: " + .
q_hunting_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_hunting_count
+ "].";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
{
.@q_hunting_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_HUNTING_ID : NPC_QUEST_MENU_REQ;
}
NPC_QUEST_HUNTING_COUNT:
mes "Put the amount of ^FF0000" + .@q_monster_name$
+ "^000000 (ID: " + .
q_hunting_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_hunting_count
+ "] you want hunt:";
input .
q_hunting_amount[.@i
],
1;
mes "^FF0000" + .
q_hunting_amount[.@i
] + "^000000x ^FF0000" + .@q_monster_name$
+ "^000000 (ID: " + .
q_hunting_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_hunting_count
+ "].";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
{
.@q_hunting_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_HUNTING_COUNT : NPC_QUEST_MENU_REQ;
}
}
goto NPC_QUEST_MENU_REQ;
case 2:
NPC_QUEST_COLLECT:
mes "Put the amount of items you want collect:";
input .@q_collect_count,
1;
mes "^FF0000" + .@q_collect_count
+ "^000000 items.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_collect_count = 0;
goto (.@selected == 2) ? NPC_QUEST_COLLECT : NPC_QUEST_MENU_REQ;
}
for(.@i = 0; .@i < .@q_collect_count; .@i++)
{
NPC_QUEST_COLLECT_ID:
mes "Put the item ID: [" + (.@i
+ 1) + "/" + .@q_collect_count
+ "]";
input .
q_collect_id[.@i
],
0;
if (.@q_item_name$ == "null")
{
mes "Invalid item ID: ^FF0000" + .
q_collect_id[.@i
] + "^000000 [" + (.@i
+ 1) + "/" + .@q_collect_count
+ "]";
mes "NOTE: If you select 'No', you will lose all items configured.";
.@selected
= select("Yes:No");
if (.@selected == 2)
{
.@q_collect_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_MENU_REQ : NPC_QUEST_COLLECT_ID;
}
mes "Item: ^FF0000" + .@q_item_name$
+ "^000000 (ID: " + .
q_collect_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_collect_count
+ "].";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
{
.@q_collect_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_COLLECT_ID : NPC_QUEST_MENU_REQ;
}
NPC_QUEST_COLLECT_COUNT:
mes "Put the amount of ^FF0000" + .@q_item_name$
+ "^000000 (ID: " + .
q_collect_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_collect_count
+ "] you want collect:";
input .
q_collect_amount[.@i
],
1;
mes "^FF0000" + .
q_collect_amount[.@i
] + "^000000x ^FF0000" + .@q_item_name$
+ "^000000 (ID: " + .
q_collect_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_collect_count
+ "].";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
{
.@q_collect_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_COLLECT_COUNT : NPC_QUEST_MENU_REQ;
}
}
goto NPC_QUEST_MENU_REQ;
case 3:
NPC_QUEST_ZENY_COST:
mes "Put the amount of Zeny you want to charge:";
input .@q_zeny_cost,
1, MAX_ZENY;
mes "^FF0000" + callfunc("F_InsertComma", .@q_zeny_cost
) + "^000000z.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_zeny_cost = 0;
goto (.@selected == 2) ? NPC_QUEST_ZENY_COST : NPC_QUEST_MENU_REQ;
}
goto NPC_QUEST_MENU_REQ;
case 4:
NPC_QUEST_CASH_COST:
mes "Put the amount of Cash Points you want to charge:";
mes "^FF0000" + callfunc("F_InsertComma", .@q_cash_cost
) + "^000000 Cash Points.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_cash_cost = 0;
goto (.@selected == 2) ? NPC_QUEST_CASH_COST : NPC_QUEST_MENU_REQ;
}
goto NPC_QUEST_MENU_REQ;
case 5:
NPC_QUEST_KAFRA_COST:
mes "Put the amount of Kafra Points you want to charge:";
input .@q_kafra_point_cost,
1;
mes "^FF0000" + callfunc("F_InsertComma", .@q_kafra_point_cost
) + "^000000 Kafra Points.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_kafra_point_cost = 0;
goto (.@selected == 2) ? NPC_QUEST_KAFRA_COST : NPC_QUEST_MENU_REQ;
}
goto NPC_QUEST_MENU_REQ;
case 6:
NPC_QUEST_REQ_LEVEL:
mes "Put the min level:";
input .@q_min_lv,
1, MAX_LEVEL;
if (.@q_min_lv == .@q_max_lv || (.@q_min_lv > .@q_max_lv && .@q_max_lv > 0))
{
mes "Invalid min level, min level can't be upper or equal max level.";
mes "Min level: ^FF0000" + .@q_min_lv
+ "^000000. Max level: ^FF0000" + .@q_max_lv
+ "^000000.";
.@q_min_lv = 0;
.@selected
= select("Yes:No");
goto (.@selected == 2) ? NPC_QUEST_MENU_REQ : NPC_QUEST_REQ_LEVEL;
}
mes "Min Lv. ^FF0000" + .@q_min_lv
+ "^000000.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_min_lv = 0;
goto (.@selected == 2) ? NPC_QUEST_REQ_LEVEL : NPC_QUEST_MENU_REQ;
}
goto NPC_QUEST_MENU_REQ;
case 7:
NPC_QUEST_MAX_LEVEL:
mes "Put the max level:";
input .@q_max_lv,
1, MAX_LEVEL;
if (.@q_max_lv == .@q_min_lv || .@q_max_lv < .@q_min_lv)
{
mes "Invalid max level, max level can't be lower or equal required level.";
mes "Min level: ^FF0000" + .@q_min_lv
+ "^000000. Max level: ^FF0000" + .@q_max_lv
+ "^000000.";
.@q_max_lv = 0;
.@selected
= select("Yes:No");
goto (.@selected == 2) ? NPC_QUEST_MENU_REQ : NPC_QUEST_MAX_LEVEL;
}
mes "Max Lv. ^FF0000" + .@q_max_lv
+ "^000000.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_max_lv = 0;
goto (.@selected == 2) ? NPC_QUEST_MAX_LEVEL : NPC_QUEST_MENU_REQ;
}
goto NPC_QUEST_MENU_REQ;
case 8:
if (!(.@q_hunting_count >
0 && getarraysize(.
q_hunting_id) >
0) && !(.@q_collect_count >
0 && getarraysize(.
q_collect_id) >
0) && !(.@q_zeny_cost >
0) && !(.@q_cash_cost >
0) && !(.@q_kafra_point_cost >
0) && !(.@q_req_lv >
0))
{
mes "You don't added any requirement.";
goto NPC_QUEST_MENU_REQ;
}
}
NPC_QUEST_MENU_PRIZE:
mes "Choose the prizes you want to give:";
set .@prize_menu$, .@prize_menu$
+ ((.@q_prize_count >
0 && getarraysize(.
q_prize_id) >
0) ?
"" : "Item") + ":";
set .@prize_menu$, .@prize_menu$
+ ((.@q_zeny_prize >
0) ?
"" : "Zeny") + ":";
set .@prize_menu$, .@prize_menu$
+ ((.@q_cash_prize >
0) ?
"" : "Cash Points") + ":";
set .@prize_menu$, .@prize_menu$
+ ((.@q_kafra_point_prize >
0) ?
"" : "Kafra Points") + ":";
set .@prize_menu$, .@prize_menu$
+ ((.@q_bexp_prize >
0) ?
"" : "Base Exp") + ":";
set .@prize_menu$, .@prize_menu$
+ ((.@q_jobexp_prize >
0) ?
"" : "Job Exp") + ":";
set .@prize_menu$, .@prize_menu$
+ "Advance" + ":";
set .@prize_menu$, .@prize_menu$
+ "Back";
.@selected
= select(.@prize_menu$
);
if (.@selected == 8)
{
.@q_prize_count = 0;
.@q_zeny_prize = 0;
.@q_cash_prize = 0;
.@q_kafra_point_prize = 0;
.@q_bexp_prize = 0;
.@q_jobexp_prize = 0;
.@q_hunting_count = 0;
.@q_collect_count = 0;
.@q_zeny_cost = 0;
.@q_cash_cost = 0;
.@q_kafra_point_cost = 0;
.@q_min_lv = 0;
.@q_max_lv = 0;
goto NPC_QUEST_SECOND_MENU;
}
switch(.@selected)
{
case 1:
NPC_QUEST_PRIZE_ITEM:
mes "Put the amount of items prize you want:";
input .@q_prize_count,
1;
mes "^FF0000" + .@q_prize_count
+ "^000000 items.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_prize_count = 0;
goto (.@selected == 2) ? NPC_QUEST_PRIZE_ITEM : NPC_QUEST_MENU_PRIZE;
}
for(.@i = 0; .@i < .@q_prize_count; .@i++)
{
NPC_QUEST_PRIZE_ITEM_ID:
mes "Put the item ID: [" + (.@i
+ 1) + "/" + .@q_prize_count
+ "]";
input .
q_prize_id[.@i
],
0;
if (.@q_item_name$ == "null")
{
mes "Invalid item ID: ^FF0000" + .
q_prize_id[.@i
] + "^000000 [" + (.@i
+ 1) + "/" + .@q_prize_count
+ "]";
mes "NOTE: If you select 'No', you will lose all items configured.";
.@selected
= select("Yes:No");
if (.@selected == 2)
{
.@q_prize_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_MENU_PRIZE : NPC_QUEST_PRIZE_ITEM_ID;
}
mes "Item: ^FF0000" + .@q_item_name$
+ "^000000 (ID: " + .
q_prize_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_prize_count
+ "].";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
{
.@q_prize_count = 0;
}
goto (.@selected == 2) ? NPC_QUEST_PRIZE_ITEM_ID : NPC_QUEST_MENU_PRIZE;
}
NPC_Q_PRIZE_ITEM_COUNT:
mes "Put the amount of ^FF0000" + .@q_item_name$
+ "^000000 (ID: " + .
q_prize_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_prize_count
+ "] you want give:";
input .
q_prize_amount[.@i
],
1;
mes "^FF0000" + .
q_prize_amount[.@i
] + "^000000x ^FF0000" + .@q_item_name$
+ "^000000 (ID: " + .
q_prize_id[.@i
] + ") - [" + (.@i
+ 1) + "/" + .@q_prize_count
+ "].";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
{
.@q_prize_count = 0;
}
goto (.@selected == 2) ? NPC_Q_PRIZE_ITEM_COUNT : NPC_QUEST_MENU_PRIZE;
}
}
goto NPC_QUEST_MENU_PRIZE;
case 2:
NPC_QUEST_ZENY_PRIZE:
mes "Put the amount of Zeny you want to give:";
input .@q_zeny_prize,
1, MAX_ZENY;
mes "^FF0000" + callfunc("F_InsertComma", .@q_zeny_prize
) + "^000000z.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_zeny_prize = 0;
goto (.@selected == 2) ? NPC_QUEST_ZENY_PRIZE : NPC_QUEST_MENU_PRIZE;
}
goto NPC_QUEST_MENU_PRIZE;
case 3:
NPC_QUEST_CASH_PRIZE:
mes "Put the amount of Cash Points you want to give:";
mes "^FF0000" + callfunc("F_InsertComma", .@q_cash_prize
) + "^000000 Cash Points.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_cash_prize = 0;
goto (.@selected == 2) ? NPC_QUEST_CASH_PRIZE : NPC_QUEST_MENU_PRIZE;
}
goto NPC_QUEST_MENU_PRIZE;
case 4:
NPC_QUEST_KAFRA_PRIZE:
mes "Put the amount of Kafra Points you want to give:";
input .@q_kafra_point_prize,
1;
mes "^FF0000" + callfunc("F_InsertComma", .@q_kafra_point_prize
) + "^000000 Kafra Points.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_kafra_point_prize = 0;
goto (.@selected == 2) ? NPC_QUEST_KAFRA_PRIZE : NPC_QUEST_MENU_PRIZE;
}
goto NPC_QUEST_MENU_PRIZE;
case 5:
NPC_QUEST_BEXP_PRIZE:
mes "Put the amount of Base Exp you want to give:";
mes "^FF0000" + callfunc("F_InsertComma", .@q_bexp_prize
) + "^000000 Base Exp.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_bexp_prize = 0;
goto (.@selected == 2) ? NPC_QUEST_BEXP_PRIZE : NPC_QUEST_MENU_PRIZE;
}
goto NPC_QUEST_MENU_PRIZE;
case 6:
NPC_QUEST_JOBEXP_PRIZE:
mes "Put the amount of Job Exp you want to give:";
input .@q_jobexp_prize,
1;
mes "^FF0000" + callfunc("F_InsertComma", .@q_jobexp_prize
) + "^000000 Job Exp.";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
{
if (.@selected == 3)
.@q_jobexp_prize = 0;
goto (.@selected == 2) ? NPC_QUEST_JOBEXP_PRIZE : NPC_QUEST_MENU_PRIZE;
}
goto NPC_QUEST_MENU_PRIZE;
case 7:
if (!(.@q_prize_count >
0 && getarraysize(.
q_prize_id) >
0) && !(.@q_bexp_prize >
0) && !(.@q_jobexp_prize >
0) && !(.@q_cash_prize >
0) && !(.@q_kafra_point_prize >
0) && !(.@q_zeny_prize >
0))
{
mes "You don't added any prize.";
goto NPC_QUEST_MENU_PRIZE;
}
}
show_quest(.@q_id, .@q_name$, .@q_desc_name$, .@q_type, .@q_count, ".q_hunting_id", ".q_hunting_amount",
".q_collect_id", ".q_collect_amount", ".q_prize_id", ".q_prize_amount", .@q_zeny_cost,
.@q_cash_cost, .@q_kafra_point_cost, .@q_min_lv, .@q_max_lv, .@q_zeny_prize, .@q_cash_prize,
.@q_kafra_point_prize, .@q_bexp_prize, .@q_jobexp_prize, ((.@q_delay == 0) ? -1 : .@q_delay));
.@selected
= select("Yes:No");
if (.@selected == 2)
{
.@q_zeny_cost = 0;
.@q_cash_cost = 0;
.@q_kafra_point_cost = 0;
.@q_min_lv = 0;
.@q_max_lv = 0;
.@q_zeny_prize = 0;
.@q_cash_prize = 0;
.@q_kafra_point_prize = 0;
.@q_bexp_prize = 0;
.@q_jobexp_prize = 0;
.@q_prize_count = 0;
.@q_hunting_count = 0;
.@q_collect_count = 0;
.@q_count = 0;
.@q_type = 0;
.@q_delay = 0;
.@q_name$ = "";
.@q_desc_name$ = "";
goto NPC_QUEST_SECOND_MENU;
}
mes "Quest successfully added !!";
setarray .@q_hunting_array$
[0],
"$dq_hunting_id_" + .@q_id
+ "[0]",
"$dq_hunting_amount_" + .@q_id
+ "[0]";
setarray .@q_collect_array$
[0],
"$dq_collect_id_" + .@q_id
+ "[0]",
"$dq_collect_amount_" + .@q_id
+ "[0]";
setarray .@q_prize_array$
[0],
"$dq_prize_id_" + .@q_id
+ "[0]",
"$dq_prize_amount_" + .@q_id
+ "[0]";
setd "$dq_zeny_cost_" + .@q_id,
(!.@q_zeny_cost
) ?
-1 : .@q_zeny_cost;
setd "$dq_cash_cost_" + .@q_id,
(!.@q_cash_cost
) ?
-1 : .@q_cash_cost;
setd "$dq_kafra_point_cost_" + .@q_id,
(!.@q_kafra_point_cost
) ?
-1 : .@q_kafra_point_cost;
setd "$dq_req_lv_" + .@q_id,
(!.@q_min_lv
) ?
-1 : .@q_min_lv;
setd "$dq_max_lv_" + .@q_id,
(!.@q_max_lv
) ?
-1 : .@q_max_lv;
setd "$dq_zeny_prize_" + .@q_id,
(!.@q_zeny_prize
) ?
-1 : .@q_zeny_prize;
setd "$dq_cash_prize_" + .@q_id,
(!.@q_cash_prize
) ?
-1 : .@q_cash_prize;
setd "$dq_kafra_point_prize_" + .@q_id,
(!.@q_kafra_point_prize
) ?
-1 : .@q_kafra_point_prize;
setd "$dq_bexp_prize_" + .@q_id,
(!.@q_bexp_prize
) ?
-1 : .@q_bexp_prize;
setd "$dq_jobexp_prize_" + .@q_id,
(!.@q_jobexp_prize
) ?
-1 : .@q_jobexp_prize;
setd "$dq_delay_" + .@q_id,
(!.@q_delay
) ?
-1 : .@q_delay;
$dq_generate_id++;
.@q_zeny_cost = 0;
.@q_cash_cost = 0;
.@q_kafra_point_cost = 0;
.@q_min_lv = 0;
.@q_max_lv = 0;
.@q_zeny_prize = 0;
.@q_cash_prize = 0;
.@q_kafra_point_prize = 0;
.@q_bexp_prize = 0;
.@q_jobexp_prize = 0;
.@q_prize_count = 0;
.@q_hunting_count = 0;
.@q_collect_count = 0;
.@q_count = 0;
.@q_type = 0;
.@q_delay = 0;
.@q_name$ = "";
.@q_desc_name$ = "";
goto NPC_QUEST_SECOND_MENU;
case 3:
NPC_QUEST_ERASE:
.@selected
= select("Erase a quest:Erase all quests:Back");
if (.@selected == 3)
goto NPC_QUEST_SECOND_MENU;
{
mes "There is no quest.";
goto NPC_QUEST_SECOND_MENU;
}
else if (.@selected == 1)
{
NPC_QUEST_ERASE_CHOOSE:
mes "Choose the quest you want erase:";
set .@
menu$,
((.@
menu$
== "") ? $dq_id
[.@i
] + " - " + $dq_name$
[.@i
] + " - " + $dq_desc_name$
[.@i
] + "." : .@
menu$
+ ":" + $dq_id
[.@i
] + " - " + $dq_name$
[.@i
] + " - " + $dq_desc_name$
[.@i
] + ".");
if (.@free == 1)
goto NPC_QUEST_ERASE;
show_quest($dq_id[.@i], $dq_name$[.@i], $dq_desc_name$[.@i], $dq_type[.@i], $dq_count[.@i], "$dq_hunting_id_" + $dq_id[.@i],
"$dq_hunting_amount_" + $dq_id[.@i], "$dq_collect_id_" + $dq_id[.@i], "$dq_collect_amount_" + $dq_id[.@i],
"$dq_prize_id_" + $dq_id
[.@i
],
"$dq_prize_amount_" + $dq_id
[.@i
],
getd("$dq_zeny_cost_" + $dq_id
[.@i
]),
getd("$dq_cash_cost_" + $dq_id
[.@i
]),
getd("$dq_kafra_point_cost_" + $dq_id
[.@i
]),
getd("$dq_req_lv_" + $dq_id
[.@i
]),
getd("$dq_max_lv_" + $dq_id
[.@i
]),
getd("$dq_zeny_prize_" + $dq_id
[.@i
]),
getd("$dq_cash_prize_" + $dq_id
[.@i
]),
getd("$dq_kafra_point_prize_" + $dq_id
[.@i
]),
getd("$dq_bexp_prize_" + $dq_id
[.@i
]),
getd("$dq_jobexp_prize_" + $dq_id
[.@i
]),
getd("$dq_delay_" + $dq_id
[.@i
]));
mes "You really want remove this quest?";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
goto (.@selected == 2) ? NPC_QUEST_ERASE_CHOOSE : NPC_QUEST_ERASE;
mes "Quest successfully erased !!";
setd "$dq_" + $dq_id
[.@i
] + "_info$",
"";
del_var($dq_id[.@i], $dq_type);
setarray .@q_hunting_array$
[0],
"$dq_hunting_id_" + $dq_id
[.@i
],
"$dq_hunting_amount_" + $dq_id
[.@i
];
setarray .@q_collect_array$
[0],
"$dq_collect_id_" + $dq_id
[.@i
],
"$dq_collect_amount_" + $dq_id
[.@i
];
setarray .@q_prize_array$
[0],
"$dq_prize_id_" + $dq_id
[.@i
],
"$dq_prize_amount_" + $dq_id
[.@i
];
setd "$dq_zeny_cost_" + $dq_id
[.@i
],
0;
setd "$dq_cash_cost_" + $dq_id
[.@i
],
0;
setd "$dq_kafra_point_cost_" + $dq_id
[.@i
],
0;
setd "$dq_req_lv_" + $dq_id
[.@i
],
0;
setd "$dq_max_lv_" + $dq_id
[.@i
],
0;
setd "$dq_zeny_prize_" + $dq_id
[.@i
],
0;
setd "$dq_cash_prize_" + $dq_id
[.@i
],
0;
setd "$dq_kafra_point_prize_" + $dq_id
[.@i
],
0;
setd "$dq_bexp_prize_" + $dq_id
[.@i
],
0;
setd "$dq_jobexp_prize_" + $dq_id
[.@i
],
0;
setd "$dq_delay_" + $dq_id
[.@i
],
0;
goto NPC_QUEST_ERASE;
}
mes "You really want remove all quests?";
.@selected
= select("Yes:No:Back");
if (.@selected == 2 || .@selected == 3)
goto (.@selected == 2) ? NPC_QUEST_ERASE : NPC_QUEST_SECOND_MENU;
mes "All quests have been successfully erased !!";
{
setd "$dq_" + $dq_id
[.@i
] + "_info$",
"";
del_var($dq_id[.@i], $dq_type);
setarray .@q_hunting_array$
[0],
"$dq_hunting_id_" + $dq_id
[.@i
],
"$dq_hunting_amount_" + $dq_id
[.@i
];
setarray .@q_collect_array$
[0],
"$dq_collect_id_" + $dq_id
[.@i
],
"$dq_collect_amount_" + $dq_id
[.@i
];
setarray .@q_prize_array$
[0],
"$dq_prize_id_" + $dq_id
[.@i
],
"$dq_prize_amount_" + $dq_id
[.@i
];
setd "$dq_zeny_cost_" + $dq_id
[.@i
],
0;
setd "$dq_cash_cost_" + $dq_id
[.@i
],
0;
setd "$dq_kafra_point_cost_" + $dq_id
[.@i
],
0;
setd "$dq_req_lv_" + $dq_id
[.@i
],
0;
setd "$dq_max_lv_" + $dq_id
[.@i
],
0;
setd "$dq_zeny_prize_" + $dq_id
[.@i
],
0;
setd "$dq_cash_prize_" + $dq_id
[.@i
],
0;
setd "$dq_kafra_point_prize_" + $dq_id
[.@i
],
0;
setd "$dq_bexp_prize_" + $dq_id
[.@i
],
0;
setd "$dq_jobexp_prize_" + $dq_id
[.@i
],
0;
setd "$dq_delay_" + $dq_id
[.@i
],
0;
}
if (.@free == 1)
goto NPC_QUEST_SECOND_MENU;
}
}
else
{
PLAYER_NPC_START:
{
mes "There is no quests at moment.";
{
goto NPC_QUEST_FIRST_MENU;
}
else
}
PLAYER_NPC_MENU_CHOOSE:
mes "Choose the quest you want:";
set .@
menu$,
((.@
menu$
== "") ?
"^FF0000" + $dq_name$
[.@i
] + "^000000" : .@
menu$
+ ":" + "^FF0000" + $dq_name$
[.@i
] + "^000000");
if (.@free == 1)
{
goto NPC_QUEST_FIRST_MENU;
else
{
mes "Come back whenever you need me!";
}
}
explode(.@tmp_values$,
getd("$dq_" + $dq_id
[.@i
] + "_info$"),
":");
.@delay
= getd("$dq_delay_" + $dq_id
[.@i
]);
.@global_count
= atoi(.@tmp_values$
[0]);
.@global_value
= atoi(.@tmp_values$
[1]);
.@global_accept
= atoi(.@tmp_values$
[3]);
switch($dq_type[.@i])
{
// Global
case 1:
// Get delay of global variable
.@tmp_delay
= atoi(.@tmp_values$
[2]);
explode(.@tmp_values$,
getd(.@qs_type$
+ $dq_id
[.@i
] + "_info$"),
":");
.@tmp_value
[0] = atoi(.@tmp_values$
[0]);
.@tmp_value
[1] = atoi(.@tmp_values$
[1]);
.@tmp_accept
= atoi(.@tmp_values$
[3]);
// Account
case 2:
explode(.@tmp_values$,
getd(.@qs_type$
+ $dq_id
[.@i
] + "_info$"),
":");
.@tmp_value
[0] = atoi(.@tmp_values$
[0]);
.@tmp_value
[1] = atoi(.@tmp_values$
[1]);
.@tmp_delay
= atoi(.@tmp_values$
[2]);
.@tmp_accept
= atoi(.@tmp_values$
[3]);
// Character
case 3:
explode(.@tmp_values$,
getd(.@qs_type$
+ $dq_id
[.@i
] + "_info$"),
":");
.@tmp_value
[0] = atoi(.@tmp_values$
[0]);
.@tmp_value
[1] = atoi(.@tmp_values$
[1]);
.@tmp_delay
= atoi(.@tmp_values$
[2]);
.@tmp_accept
= atoi(.@tmp_values$
[3]);
}
if ((($dq_type[.@i] == 1) ? .@global_value : .@tmp_value[1]) >= $dq_count[.@i] && $dq_count[.@i] > 0)
{
if (.@tmp_delay >
0 && .@tmp_delay >
gettimetick(2) && .@delay
!= -1)
{
mes "You can't do this quest.";
mes "This quest was complete ^FF0000" + .@global_count
+ "^000000 times.";
mes (.@tmp_value
[0] >
0) ?
"You have completed ^FF0000" + .@tmp_value
[0] + "^000000 times." : "You failed to complete.";
mes "Please wait ^FF0000" + callfunc("Time2Str", .@tmp_delay
) + "^000000 to do again.";
goto PLAYER_NPC_MENU_CHOOSE;
}
else if (.@delay == -1)
{
mes "You can't do this quest.";
mes "Because it has already been completed ^FF0000" + $dq_count
[.@i
] + "^000000 times.";
mes (.@tmp_value
[0] >
0) ?
"You have completed ^FF0000" + .@tmp_value
[0] + "^000000 times." : "You failed to complete.";
goto PLAYER_NPC_MENU_CHOOSE;
}
}
setarray .@hunting_array$
[0],
"$dq_hunting_id_" + $dq_id
[.@i
],
"$dq_hunting_amount_" + $dq_id
[.@i
];
setarray .@collect_array$
[0],
"$dq_collect_id_" + $dq_id
[.@i
],
"$dq_collect_amount_" + $dq_id
[.@i
];
setarray .@prize_array$
[0],
"$dq_prize_id_" + $dq_id
[.@i
],
"$dq_prize_amount_" + $dq_id
[.@i
];
.@zeny_cost
= getd("$dq_zeny_cost_" + $dq_id
[.@i
]);
.@cash_cost
= getd("$dq_cash_cost_" + $dq_id
[.@i
]);
.@kafra_point_cost
= getd("$dq_kafra_point_cost_" + $dq_id
[.@i
]);
.@min_lv
= getd("$dq_req_lv_" + $dq_id
[.@i
]);
.@max_lv
= getd("$dq_max_lv_" + $dq_id
[.@i
]);
.@zeny_prize
= getd("$dq_zeny_prize_" + $dq_id
[.@i
]);
.@cash_prize
= getd("$dq_cash_prize_" + $dq_id
[.@i
]);
.@kafra_point_prize
= getd("$dq_kafra_point_prize_" + $dq_id
[.@i
]);
.@bexp_prize
= getd("$dq_bexp_prize_" + $dq_id
[.@i
]);
.@jobexp_prize
= getd("$dq_jobexp_prize_" + $dq_id
[.@i
]);
if (.@global_count > 0)
{
mes "This quest was complete ^FF0000" + .@global_count
+ "^000000 times.";
mes (.@tmp_value
[0] >
0) ?
"You have completed ^FF0000" + .@tmp_value
[0] + "^000000 times." : "You failed to complete.";
}
show_quest($dq_id[.@i], $dq_name$[.@i], $dq_desc_name$[.@i], $dq_type[.@i], $dq_count[.@i], .@hunting_array$[0],
.@hunting_array$[1], .@collect_array$[0], .@collect_array$[1], .@prize_array$[0], .@prize_array$[1], .@zeny_cost,
.@cash_cost, .@kafra_point_cost, .@min_lv, .@max_lv, .@zeny_prize, .@cash_prize, .@kafra_point_prize, .@bexp_prize,
.@jobexp_prize, .@delay);
if (.dq_player_accept == 1)
{
if (.@tmp_accept == 0)
{
mes "You want to accept this quest?";
.@selected
= select("Yes:No");
if (.@selected == 1)
{
.@result
[0] = (.@tmp_delay >
0 && .@tmp_delay <
gettimetick(2) && .@delay
!= -1);
if ($dq_type[.@i] == 1 && .@global_accept == 0)
{
.@result[1] = (.@result[0] == 1 && .@global_value >= $dq_count[.@i] && $dq_count[.@i] > 0);
setd "$dq_" + $dq_id
[.@i
] + "_info$", .@global_count
+ ":" + ((.@result
[1] == 1) ?
0 : .@global_value
) + ":" + ((.@result
[0] == 1) ?
0 : .@tmp_delay
) + ":" + 1;
}
.@result[1] = (.@result[0] == 1 && .@tmp_value[1] >= $dq_count[.@i] && $dq_count[.@i] > 0);
setd .@qs_type$
+ $dq_id
[.@i
] + "_info$", .@tmp_value
[0] + ":" + ((.@result
[1] == 1) ?
0 : .@tmp_value
[1]) + ":" + ((.@result
[0] == 1) ?
0 : .@tmp_delay
) + ":" + 1;
mes "Quest [^FF0000" + $dq_id
[.@i
] + "^000000] accepted !!";
mes "Quest name: ^FF0000" + $dq_name$
[.@i
] + "^000000.";
}
goto PLAYER_NPC_MENU_CHOOSE;
}
}
else
{
if (.@tmp_accept == 0)
{
.@result
[0] = (.@tmp_delay >
0 && .@tmp_delay <
gettimetick(2) && .@delay
!= -1);
if ($dq_type[.@i] == 1 && .@global_accept == 0)
{
.@result[1] = (.@result[0] == 1 && .@global_value >= $dq_count[.@i] && $dq_count[.@i] > 0);
setd "$dq_" + $dq_id
[.@i
] + "_info$", .@global_count
+ ":" + ((.@result
[1] == 1) ?
0 : .@global_value
) + ":" + ((.@result
[0] == 1) ?
0 : .@tmp_delay
) + ":" + 1;
}
.@result[1] = (.@result[0] == 1 && .@tmp_value[1] >= $dq_count[.@i] && $dq_count[.@i] > 0);
setd .@qs_type$
+ $dq_id
[.@i
] + "_info$", .@tmp_value
[0] + ":" + ((.@result
[1] == 1) ?
0 : .@tmp_value
[1]) + ":" + ((.@result
[0] == 1) ?
0 : .@tmp_delay
) + ":" + 1;
}
}
mes "You have all requirements?";
.@selected
= select("Yes:No");
if (.@selected == 2)
goto PLAYER_NPC_MENU_CHOOSE;
if (.@min_lv > BaseLevel && .@min_lv > 0)
{
mes "You need more ^FF0000" + (.@min_lv
- BaseLevel) + "^000000 levels.";
goto PLAYER_NPC_MENU_CHOOSE;
}
if (.@max_lv < BaseLevel && .@max_lv > 0)
{
mes "You can't do this quest.";
mes "Max Lv. ^FF0000" + .@max_lv
+ "^000000.";
goto PLAYER_NPC_MENU_CHOOSE;
}
.@need = 0;
set .@tmp_var$, .@qs_type$
+ $dq_id
[.@i
] + "_hunting_count$";
{
.@hunting_id
= getd(.@hunting_array$
[0] + "[" + .@j
+ "]");
.@hunting_kill
= getd(.@hunting_array$
[1] + "[" + .@j
+ "]");
.@found = 0;
for(.@k = 0; .@k < .@tmp_size; .@k++)
{
explode(.@tmp_values$, .@tmp_kill$
[.@k
],
":");
.@tmp_id
= atoi(.@tmp_values$
[0]);
.@tmp_count
= atoi(.@tmp_values$
[1]);
if (.@tmp_count < .@hunting_kill && .@hunting_id == .@tmp_id)
{
mes "You need hunt ^FF0000" + (.@hunting_kill
- .@tmp_count
) + "^000000x ^FF0000" + strmobinfo(1, .@hunting_id
) + "^000000.";
if (.@need == 0)
.@need = 1;
}
if (.@hunting_id == .@tmp_id)
.@found = 1;
}
if (.@found == 0)
{
mes "You need hunt ^FF0000" + .@hunting_kill
+ "^000000x ^FF0000" + strmobinfo(1, .@hunting_id
) + "^000000.";
if (.@need == 0)
.@need = 1;
}
}
{
.@id
= getd(.@collect_array$
[0] + "[" + .@j
+ "]");
if (.@tmp_count[0] < .@tmp_count[1])
{
mes "You need collect ^FF0000" + (.@tmp_count
[1] - .@tmp_count
[0]) + "^000000x ^FF0000" + getitemname(.@id
) + "^000000.";
if (.@need == 0)
.@need = 1;
}
}
if (.@zeny_cost > Zeny && .@zeny_cost > 0)
{
mes "You need ^FF0000" + callfunc("F_InsertComma",
(.@zeny_cost
- Zeny)) + "^000000z.";
if (.@need == 0)
.@need = 1;
}
if (.@cash_cost > #CASHPOINTS && .@cash_cost > 0)
{
mes "You need ^FF0000" + callfunc("F_InsertComma",
(.@cash_cost
- #CASHPOINTS
)) + "^000000 Cash Points.";
if (.@need == 0)
.@need = 1;
}
if (.@kafra_point_cost > #KAFRAPOINTS && .@kafra_point_cost > 0)
{
mes "You need ^FF0000" + callfunc("F_InsertComma",
(.@kafra_point_cost
- #KAFRAPOINTS
)) + "^000000 Kafra Points.";
if (.@need == 0)
.@need = 1;
}
if (Zeny + .@zeny_prize > MAX_ZENY && .@zeny_prize > 0)
{
mes "You can't receive ^FF0000" + callfunc("F_InsertComma", .@zeny_prize
) + "^000000z.";
mes "Because will exceed the limit of ^FF0000" + callfunc("F_InsertComma", MAX_ZENY
) + "^000000z.";
if (.@need == 0)
.@need = 1;
}
if (!checkweight2
(getd(.@prize_array$
[0]),
getd(.@prize_array$
[1])))
{
mes "You are overweight.";
if (.@need == 0)
.@need = 1;
}
if (.@need == 1)
{
goto PLAYER_NPC_MENU_CHOOSE;
}
{
.@id
= getd(.@collect_array$
[0] + "[" + .@j
+ "]");
.@count
= getd(.@collect_array$
[1] + "[" + .@j
+ "]");
}
setd .@qs_type$
+ $dq_id
[.@i
] + "_hunting_count$",
"";
setd (($dq_type
[.@i
] == 3) ?
"#dq_" : "dq_") + $dq_id
[.@i
] + "_hunting_count$",
"";
if (.@zeny_cost > 0)
Zeny -= .@zeny_cost;
if (.@cash_cost > 0)
#CASHPOINTS -= .@cash_cost;
if (.@kafra_point_cost > 0)
#KAFRAPOINTS -= .@kafra_point_cost;
if (.@zeny_prize > 0)
{
Zeny += .@zeny_prize;
mes "You got ^FF0000" + callfunc("F_InsertComma", .@zeny_prize
) + "^000000z.";
}
if (.@cash_prize > 0)
{
#CASHPOINTS += .@cash_prize;
mes "You got ^FF0000" + callfunc("F_InsertComma", .@cash_prize
) + "^000000 Cash Points.";
}
if (.@kafra_point_prize > 0)
{
#KAFRAPOINTS += .@kafra_point_prize;
mes "You got ^FF0000" + callfunc("F_InsertComma", .@kafra_point_prize
) + "^000000 Kafra Points.";
}
if (.@bexp_prize > 0)
{
BaseExp += .@bexp_prize;
mes "You got ^FF0000" + callfunc("F_InsertComma", .@bexp_prize
) + "^000000 Base Exp.";
}
if (.@jobexp_prize > 0)
{
JobExp += .@jobexp_prize;
mes "You got ^FF0000" + callfunc("F_InsertComma", .@jobexp_prize
) + "^000000 Job Exp.";
}
{
.@id
= getd(.@prize_array$
[0] + "[" + .@j
+ "]");
.@count
= getd(.@prize_array$
[1] + "[" + .@j
+ "]");
mes "You got ^FF0000" + .@count
+ "^000000x ^FF0000" + getitemname(.@id
) + "^000000.";
}
setd "$dq_" + $dq_id
[.@i
] + "_info$",
(.@global_count
+ 1) + ":" + (.@global_value
+ 1) + ":" + (gettimetick(2) + .@delay
) + ":" + (((.@global_value
+ 1) >
= $dq_count
[.@i
] && $dq_count
[.@i
] >
0) ?
0 : 1);
setd .@qs_type$
+ $dq_id
[.@i
] + "_info$",
(.@tmp_value
[0] + 1) + ":" + (.@tmp_value
[1] + 1) + ":" + (gettimetick(2) + .@delay
) + ":" + 0;
mes "You received all prizes !!";
goto PLAYER_NPC_MENU_CHOOSE;
}
OnInit:
// GameMaster Level to Access
.dq_group_access = 99;
// 1 = Show a message to player if kill a monster added in hunt (Message format: '[Quest Manager]: [My quest name] - Poring [1/100]')
// 0 = Disabled.
.dq_display_hunt = 1;
// 1 = Players need accept quest in the npc to hunt monsters.
// 0 = Disabled.
.dq_player_accept = 1;
// .npc_name$[0] = NPC name using 'mes'.
// .npc_name$[1] = NPC name using 'dispbottom'.
// ONLY CHANGE IF YOU KNOW WHAT YOU'RE DOING !!
if ($dq_generate_id == 0)
$dq_generate_id = 1;
.freeloop_size_active = 128;
OnNPCKillEvent:
{
.@min_lv
= getd("$dq_req_lv_" + $dq_id
[.@i
]);
.@max_lv
= getd("$dq_max_lv_" + $dq_id
[.@i
]);
if (.@max_lv < BaseLevel && .@max_lv > 0)
continue;
if (.@min_lv > BaseLevel && .@min_lv > 0)
continue;
switch($dq_type[.@i])
{
// Global
case 1:
explode(.@tmp_values$,
getd("$dq_" + $dq_id
[.@i
] + "_info$"),
":");
.@tmp_value
= atoi(.@tmp_values$
[1]);
.@tmp_delay
= atoi(.@tmp_values$
[2]);
.@tmp_accept
= atoi(.@tmp_values$
[3]);
explode(.@tmp_values$,
getd(.@qs_type$
+ $dq_id
[.@i
] + "_info$"),
":");
.@player_accept
= atoi(.@tmp_values$
[3]);
// Account
case 2:
explode(.@tmp_values$,
getd(.@qs_type$
+ $dq_id
[.@i
] + "_info$"),
":");
.@tmp_value
= atoi(.@tmp_values$
[1]);
.@tmp_delay
= atoi(.@tmp_values$
[2]);
.@tmp_accept
= atoi(.@tmp_values$
[3]);
// Character
case 3:
explode(.@tmp_values$,
getd(.@qs_type$
+ $dq_id
[.@i
] + "_info$"),
":");
.@tmp_value
= atoi(.@tmp_values$
[1]);
.@tmp_delay
= atoi(.@tmp_values$
[2]);
.@tmp_accept
= atoi(.@tmp_values$
[3]);
}
if ($dq_type[.@i] == 1)
{
if (.@player_accept == 0 && .dq_player_accept == 1)
continue;
if (.@tmp_delay >
0 && .@tmp_delay <
gettimetick(2) && .@delay
!= -1 && .@tmp_accept
== 0)
.@tmp_accept = 1;
}
if (.dq_player_accept == 1)
{
if (.@tmp_accept == 0)
continue;
}
else
{
if (.@tmp_accept == 0 && $dq_type[.@i] == 1)
continue;
}
.@delay
= getd("$dq_delay_" + $dq_id
[.@i
]);
if (.@tmp_value >= $dq_count[.@i] && $dq_count[.@i] > 0)
{
if (.@tmp_delay >
0 && .@tmp_delay >
gettimetick(2) && .@delay
!= -1)
continue;
else if (.@delay == -1)
continue;
}
setarray .@hunting_array$
[0],
"$dq_hunting_id_" + $dq_id
[.@i
],
"$dq_hunting_amount_" + $dq_id
[.@i
];
set .@tmp_var$, .@qs_type$
+ $dq_id
[.@i
] + "_hunting_count$";
{
.@hunting_id
= getd(.@hunting_array$
[0] + "[" + .@j
+ "]");
.@hunting_kill
= getd(.@hunting_array$
[1] + "[" + .@j
+ "]");
if (.@hunting_id != killedrid)
continue;
.@found = 0;
for(.@k = 0; .@k < .@tmp_size; .@k++)
{
explode(.@tmp_values$, .@tmp_kill$
[.@k
],
":");
.@tmp_id
= atoi(.@tmp_values$
[0]);
.@tmp_count
= atoi(.@tmp_values$
[1]);
if (.@tmp_count < .@hunting_kill && .@hunting_id == .@tmp_id)
{
if (.@k > 0)
setd .@tmp_var$,
getd(.@tmp_var$
) + "," + .@tmp_id
+ ":" + (.@tmp_count
+ 1);
else
setd .@tmp_var$, .@tmp_id
+ ":" + (.@tmp_count
+ 1);
if (.dq_display_hunt == 1)
dispbottom .
npc_name$
[1] + ": [" + $dq_name$
[.@i
] + "] - " + strmobinfo(1, .@tmp_id
) + " [" + (.@tmp_count
+ 1) + "/" + .@hunting_kill
+ "].";
}
else
{
if (.@k > 0)
setd .@tmp_var$,
getd(.@tmp_var$
) + "," + .@tmp_id
+ ":" + .@tmp_count;
else
setd .@tmp_var$, .@tmp_id
+ ":" + .@tmp_count;
}
if (.@hunting_id == .@tmp_id)
{
if (.@found == 0)
.@found = 1;
}
}
if (.@found == 0)
{
if (.@tmp_size >= 1)
setd .@tmp_var$,
getd(.@tmp_var$
) + "," + .@hunting_id
+ ":" + 1;
else
setd .@tmp_var$, .@hunting_id
+ ":" + 1;
if (.dq_display_hunt == 1)
dispbottom .
npc_name$
[1] + ": [" + $dq_name$
[.@i
] + "] - " + strmobinfo(1, .@hunting_id
) + " [" + 1 + "/" + .@hunting_kill
+ "].";
}
}
}
if (.@free == 1)
//del_var(<quest_id>, <quest_type>);
function del_var {
set .@key$,
"dq_" + .@q_id;
switch(.@q_type)
{
// Global
case 1:
// Account
case 2:
set .@table$,
"`acc_reg_str`";
set .@type$,
"`account_id`";
// Character
case 3:
set .@table$,
"`char_reg_str`";
set .@type$,
"`char_id`";
}
query_sql "SELECT " + .@type$
+ " FROM " + .@table$
+ " WHERE `key` LIKE '%" + .@key$
+ "%'", .@id;
{
query_sql "SELECT `account_id`, `online` FROM `char` WHERE " + .@type$
+ " = '" + .@id
[.@i
] + "'", .@account_id, .@online;
if (.@online == 1 && .@islogged == 1)
{
{
switch(.@q_type)
{
// Global
case 1:
// Account
case 2:
setd "#" + .@key$
+ "_info$",
"";
setd "#" + .@key$
+ "_hunting_count$",
"";
// Character
case 3:
setd .@key$
+ "_info$",
"";
setd .@key$
+ "_hunting_count$",
"";
}
}
else
goto OFFLINE_PLAYER; // Can't attach to player. (Maybe offline?)
}
else
{
// Player is offline
OFFLINE_PLAYER:
query_sql "DELETE FROM " + .@table$
+ " WHERE `key` LIKE '%" + .@key$
+ "%' AND " + .@type$
+ " = '" + .@id
[.@i
] + "'";
}
}
if (.@free == 1)
}
function show_quest {
.@kafra_point_cost
= getarg(13);
.@kafra_point_prize
= getarg(18);
mes "Quest ID: ^FF0000" + .@id
+ "^000000.";
mes "Quest Name: ^FF0000" + .@name$
+ "^000000.";
mes "Quest Description: ^FF0000" + .@desc_name$
+ "^000000.";
mes "Quest Type: ^FF0000" + ((.@type
== 1) ?
"Global" : (.@type
== 2) ?
"Account" : "Character") + "^000000.";
mes "Times: " + ((.@count
== -1) ?
"^FF0000Unlimited^000000" : ((.@delay
== -1) ?
"Only ^FF0000" + .@count
+ "^000000 times." : "^FF0000" + .@count
+ "^000000 times per ^FF0000" + callfunc("Time2Str",
(gettimetick(2) + .@delay
)) + "^000000."));
mes "Hunt ^FF0000" + getd(.@hunting_array$
[1] + "[" + .@j
+ "]") + "^000000x ^FF0000" + strmobinfo(1,
getd(.@hunting_array$
[0] + "[" + .@j
+ "]")) + "^000000.";
mes "Collect ^FF0000" + getd(.@collect_array$
[1] + "[" + .@j
+ "]") + "^000000x ^FF0000" + getitemname(getd(.@collect_array$
[0] + "[" + .@j
+ "]")) + "^000000.";
mes (.@zeny_cost >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@zeny_cost
) + "^000000z." : "";
mes (.@cash_cost >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@cash_cost
) + "^000000 Cash Points." : "";
mes (.@kafra_point_cost >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@kafra_point_cost
) + "^000000 Kafra Points." : "";
mes ((.@min_lv >
0 && .@max_lv >
0) ?
"Lv. ^FF0000" + .@min_lv
+ "^000000~^FF0000" + .@max_lv
+ "^000000." : (.@min_lv >
0) ?
"Min Lv. ^FF0000" + .@min_lv
+ "^000000." : (.@max_lv >
0) ?
"Max Lv. ^FF0000" + .@max_lv
+ "^000000." : "");
mes "^FF0000" + getd(.@prize_array$
[1] + "[" + .@j
+ "]") + "^000000x ^FF0000" + getitemname(getd(.@prize_array$
[0] + "[" + .@j
+ "]")) + "^000000.";
mes (.@zeny_prize >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@zeny_prize
) + "^000000z." : "";
mes (.@cash_prize >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@cash_prize
) + "^000000 Cash Points." : "";
mes (.@kafra_point_prize >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@kafra_point_prize
) + "^000000 Kafra Points." : "";
mes (.@bexp_prize >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@bexp_prize
) + "^000000 Base Exp." : "";
mes (.@jobexp_prize >
0) ?
"^FF0000" + callfunc("F_InsertComma", .@jobexp_prize
) + "^000000 Job Exp." : "";
return;
}
}