May i request your support please. I am trying to make some twist the hunting mission script.
I wanted to have getitem poring coin directly to players inventory instead of mission points, as well as change mission points to poring coin in the shop.
please help me what to do. this is to allow player to simply trade coins.
Spoiler
//===== Hercules Script ======================================
//= Hunting Missions
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.4b
//===== Description: =========================================
//= Random hunting missions.
//= Rewards are based on quest difficulty.
//===== Additional Comments: =================================
//= 1.0 Initial script.
//= 1.1 Small improvements and fixes.
//= 1.2 Added party support and replaced blacklists with an
//= SQL query, both thanks to AnnieRuru.
//= 1.3 Re-added a blacklist adapted for the SQL query.
//= 1.3a Added mission reset options.
//= 1.4 Fix ranking table using new SQL database [ossi0110]
//= 1.4a Fix a bug when a character has deleted, that account
//= can't do mission. [AnnieRuru]
//= 1.4b Update to follow author's method on fixing
//= character deletion bug [AnnieRuru]
//============================================================
prontera,164,165,4 script Hunting Missions::Onatcmd 4_F_EDEN_MASTER,{
function Chk;
function Cm;
OnHunting:
mes "[Hunting Missions]";
mes "Hello, "+strcharinfo(PC_NAME)+"!";
if (!#Mission_Delay) {
next;
mes "[Hunting Missions]";
mes "I can't find any records...";
mes "You must be new here!";
emotion e_omg;
next;
callsub Mission_Info;
emotion e_go;
set #Mission_Delay,1;
close;
}
mes rand(2)?"Working hard, as always...":"Not slacking, I hope...";
mes "Is there anything I can help";
mes "you with?";
mes "You can call me anywhere via ^0055FF@hunting^000000 command";
mes " ";
mes "^777777~ You've completed ^0055FF"+Mission_Total+"^777777 mission"+((Mission_Total == 1)?"":"s")+". ~^000000";
next;
switch(select(((!Mission0)?" ~ New Mission::":": ~ Mission Status: ~ Abandon Mission")+": ~ Information: ~ Mission Shop: ~ View Top Hunters: ~ ^777777Cancel^000000")) {
case 1:
mes "[Hunting Missions]";
if ( #Mission_Count ) {
mes "You've started a mission";
mes "on another character.";
if ( !@hm_char_del_check ) {
if ( !query_sql( "SELECT 1 FROM `char_reg_num_db` WHERE `key` = 'Mission0' AND `char_id` IN ( SELECT `char_id` FROM `char` WHERE `account_id` = "+ getcharid(CHAR_ID_ACCOUNT) +" )", .@dummy ) ) {
next;
mes "[Hunting Missions]";
mes "I can't seem to find any records";
mes "for that character, though...";
mes "One moment, please.";
emotion e_hmm;
set #Mission_Count, 0;
}
set @hm_char_del_check, 1;
}
close;
}
if (#Mission_Delay > gettimetick(2) && .delay) {
set .@i, #Mission_Delay-gettimetick(2);
if (.@i > 3600) set .@j$, (.@i/3600)+" hour"+(((.@i/3600) == 1)?"":"s");
else if (.@i > 60) set .@j$, (.@i/60)+" minute"+(((.@i/60) == 1)?"":"s");
else set .@j$, (.@i)+" second"+((.@i == 1)?"":"s");
mes "I'm afraid you'll have to wait "+.@j$+" before taking another mission.";
close;
}
mes "You must hunt:";
query_sql("SELECT ID FROM `mob_db` WHERE left(Sprite, 4) != 'meta' AND left(Sprite, 2) != 'E_' AND ~Mode & 32 AND EXP > 0 AND MVP1id = 0 AND DropCardid > 4000 AND DropCardid < 5000 AND ID < 2000 AND instr('"+.Blacklist$+"',ID) = 0 ORDER BY rand() LIMIT "+.Quests, .@mob);
for (set .@i,0; .@i<.Quests; set .@i,.@i+1) {
setd "Mission"+.@i, .@mob[.@i];
setd "Mission"+.@i +"_",0;
}
set #Mission_Count, rand(.Count[0],.Count[1]);
callsub Mission_Status;
next;
mes "[Hunting Missions]";
mes "Report back when";
mes "you've finished.";
mes "Good luck!";
close;
case 2:
mes "[Hunting Missions]";
mes "Mission status:";
callsub Mission_Status;
close;
case 3:
mes "[Hunting Missions]";
mes "Do you really want to";
mes "abandon your mission?";
if (.Reset < 0 && .delay)
mes "Your delay time will not be reset.";
else if (.Reset > 0)
mes "It will cost "+Cm(.Reset)+" Zeny.";
next;
switch(select(" ~ Abandon...", " ~ ^777777Cancel^000000")) {
case 1:
if (.Reset > 0) {
if (Zeny < .Reset) {
mes "[Hunting Missions]";
mes "You don't have enough";
mes "Zeny to drop this mission.";
emotion e_sry;
close;
}
Zeny -= .Reset;
emotion e_cash;
}
mes "[Hunting Missions]";
mes "Alright, I've dropped";
mes "your current mission.";
specialeffect(EF_STORMKICK4, AREA, playerattached());
for(set .@i,0; .@i<.Quests; set .@i,.@i+1) {
setd "Mission"+.@i,0;
setd "Mission"+.@i+"_",0;
}
set #Mission_Count,0;
if (.Reset < 0 && .delay) set #Mission_Delay, gettimetick(2)+(.delay*3600);
close;
case 2:
mes "[Hunting Missions]";
mes "I knew you were kidding!";
mes "Keep up the good work.";
emotion e_heh;
close;
}
case 4:
callsub Mission_Info;
close;
case 5:
mes "[Hunting Missions]";
mes "You have ^0055FF"+#Mission_Points+"^000000 Mission Points.";
mes "Use them well!";
callshop "mission_shop",1;
npcshopattach "mission_shop";
end;
case 6:
mes "[Hunting Missions]";
mes "The top hunters are:";
query_sql("SELECT char_id AS id, (SELECT `name` FROM `char` WHERE char_id = id),`value` FROM `char_reg_num_db` WHERE `key` = 'Mission_Total' ORDER BY `value` DESC LIMIT 5",.@id,.@name$,.@val);
for(set .@i,0; .@i<5; set .@i,.@i+1)
mes " [Rank "+(.@i+1)+"] "+((.@name$[.@i] == "")?"^777777none":"^0055FF"+.@name$[.@i]+"^000000 : ^FF0000"+.@val[.@i]+" pt.")+"^000000";
close;
case 7:
mes "[Hunting Missions]";
mes "Nothing? Okay...";
emotion e_hmm;
close;
}
Mission_Status:
set @f,0;
deletearray .@j[0], getarraysize(.@j);
for(set .@i,0; .@i<.Quests; set .@i,.@i+1) {
set .@j[.@i], getd("Mission"+.@i);
set .@j[.Quests], .@j[.Quests]+strmobinfo(3,.@j[.@i]);
set .@j[.Quests+1], .@j[.Quests+1]+(strmobinfo(6,.@j[.@i])/(getbattleflag("base_exp_rate")/100)*.Modifier[0]);
set .@j[.Quests+2], .@j[.Quests+2]+(strmobinfo(7,.@j[.@i])/(getbattleflag("job_exp_rate")/100)*.Modifier[1]);
mes " > "+Chk(getd("Mission"+.@i+"_"),#Mission_Count)+strmobinfo(1,.@j[.@i])+" ("+getd("Mission"+.@i+"_")+"/"+#Mission_Count+")^000000";
}
// Reward formulas:
set .@Mission_Points, 3+(.@j[.Quests]/.Quests/10);
set .@Base_Exp, #Mission_Count*.@j[.Quests+1]/15;
set .@Job_Exp, #Mission_Count*.@j[.Quests+2]/15;
set .@zeny, #Mission_Count*.Quests*.@j[.@i]*.Modifier[2];
next;
mes "[Hunting Missions]";
mes "Mission rewards:";
mes " > Mission Points: ^0055FF"+.@Mission_Points+"^000000";
mes " > Base Experience: ^0055FF"+Cm(.@Base_Exp)+"^000000";
mes " > Job Experience: ^0055FF"+Cm(.@Job_Exp)+"^000000";
mes " > Zeny: ^0055FF"+Cm(.@zeny)+"^000000";
if (@f) { set @f,0; return; }
next;
mes "[Hunting Missions]";
mes "Oh, you're done!";
mes "Good work.";
mes "Here's your reward.";
emotion e_no1;
specialeffect(EF_ANGEL, AREA, playerattached());
specialeffect(EF_TRUESIGHT, AREA, playerattached());
set #Mission_Points, #Mission_Points+.@Mission_Points;
set BaseExp, BaseExp+.@Base_Exp;
set JobExp, JobExp+.@Job_Exp;
Zeny += .@zeny;
for(set .@i,0; .@i<.Quests; set .@i,.@i+1) {
setd "Mission"+.@i,0;
setd "Mission"+.@i+"_",0;
}
set #Mission_Count,0;
if (.delay) set #Mission_Delay, gettimetick(2)+(.delay*3600);
set Mission_Total, Mission_Total+1;
if (Mission_Total == 1) query_sql("INSERT INTO `char_reg_num_db` (`char_id`,`key`,`index`,`value`) VALUES ("+getcharid(CHAR_ID_CHAR)+",'Mission_Total','0',1)");
else query_sql("UPDATE `char_reg_num_db` SET `value` = "+Mission_Total+" WHERE `char_id` = "+getcharid(CHAR_ID_CHAR)+" AND `key` = 'Mission_Total'");
close;
Mission_Info:
mes "[Hunting Missions]";
mes "If you so choose, I can assign";
mes "you a random hunting quest.";
mes "Some are easier than others, but";
mes "the rewards increase with difficulty.";
next;
mes "[Hunting Missions]";
mes "Missions points are shared";
mes "amongst all your characters.";
if (.delay) mes "Delay time is, too.";
mes "You can't take missions on";
mes "multiple characters at once.";
next;
mes "[Hunting Missions]";
mes "You can start a quest";
if (.delay) mes "every "+((.delay == 1)?"hour.":.delay+" hours.");
else mes "whenever you want.";
mes "That's everything~";
return;
function Chk {
if (getarg(0) < getarg(1)) { set @f,1; return "^FF0000"; }
else return "^00FF00"; }
function Cm {
set .@str$, getarg(0);
for(set .@i,getstrlen(.@str$)-3; .@i>0; set .@i,.@i-3)
set .@str$, insertchar(.@str$,",",.@i);
return .@str$; }
OnBuyItem:
set @cost,0;
for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1)
for(set .@j,0; .@j<getarraysize(.Shop); set .@j,.@j+2)
if (@bought_nameid[.@i] == .Shop[.@j]) {
set @cost, @cost+(.Shop[.@j+1]*@bought_quantity[.@i]);
break;
}
mes"[Hunting Missions]";
if (@cost> #Mission_Points) mes "You don't have enough Mission Points.";
else {
for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1) {
getitem @bought_nameid[.@i], @bought_quantity[.@i];
dispbottom "Purchased "+@bought_quantity[.@i]+"x "+getitemname(@bought_nameid[.@i])+".";
}
set #Mission_Points, #Mission_Points-@cost;
mes "Deal completed.";
emotion e_cash;
}
set @cost,0;
deletearray @bought_nameid[0], getarraysize(@bought_nameid);
deletearray @bought_quantity[0], getarraysize(@bought_quantity);
close;
OnNPCKillEvent:
if (!getcharid(CHAR_ID_PARTY) || !.Party) {
if (!#Mission_Count || !Mission0) end;
for (set .@i, 0; .@i<.Quests; set .@i,.@i+1) {
if (strmobinfo(1,killedrid) == strmobinfo(1,getd("Mission"+.@i))) {
if (getd("Mission"+.@i+"_") < #Mission_Count) {
dispbottom "[Hunting Mission] Killed "+(set(getd("Mission"+.@i+"_"),getd("Mission"+.@i+"_")+1))+" of "+#Mission_Count+" "+strmobinfo(1,killedrid)+".";
end;
}
}
}
} else if (.Party) {
set .@mob, killedrid;
getmapxy(.@map1$, .@x1, .@y1, UNITTYPE_PC);
getpartymember getcharid(CHAR_ID_PARTY),1;
getpartymember getcharid(CHAR_ID_PARTY),2;
for(set .@i,0; .@i<$@partymembercount; set .@i,.@i+1) {
if (isloggedin($@partymemberaid[.@i], $@partymembercid[.@i])) {
attachrid $@partymemberaid[.@i];
if (#Mission_Count && Mission0 && Hp > 0) {
getmapxy(.@map2$, .@x2, .@y2, UNITTYPE_PC);
if ((.@map1$ == .@map2$ || .Party == 1) && (distance(.@x1,.@y1,.@x2,.@y2) <= 30 || .Party < 3)) {
for(set .@j,0; .@j<.Quests; set .@j,.@j+1) {
if (strmobinfo(1,.@mob) == strmobinfo(1,getd("Mission"+.@j))) {
if (getd("Mission"+.@j+"_") < #Mission_Count) {
dispbottom "[Hunting Mission] Killed "+(set(getd("Mission"+.@j+"_"),getd("Mission"+.@j+"_")+1))+" of "+#Mission_Count+" "+strmobinfo(1,.@mob)+".";
break;
}
}
}
}
}
}
}
}
end;
OnInit:
bindatcmd "hunting",strnpcinfo(3)+"::OnHunting";
set .delay,0; // Quest delay, in hours (0 to disable).
set .Quests,5; // Number of subquests per mission (increases rewards).
set .Party,3; // Party options: 0 (exclude party kills), 1 (include party kills), 2 (same map only), 3 (screen area only)
set .Reset,100000; // Reset options: -1 (abandoning mission sets delay time), 0 (no delay time), [Zeny] (cost to abandon mission, no delay time)
setarray .Count[0], // Min and max monsters per subquest (increases rewards).
30,50;
setarray .Modifier[0], // Multipliers for Base Exp, Job Exp, and Zeny rewards.
getbattleflag("base_exp_rate")/100,getbattleflag("job_exp_rate")/100,60;
setarray .Shop[0], // Reward items: <ID>,<pointcost> (about 10~20 points per hunt).
//0,0;
5335,50,5322,120,5367,250,5467,750,5383,750,2399,500,2553,500;
set .Blacklist$, // Blacklisted mob IDs.
"1062,1088,1183,1186,1200,1212,1220,1221,1234,1235,"+
"1244,1245,1250,1268,1290,1293,1294,1296,1298,1299,"+
"1300,1301,1303,1304,1305,1306,1308,1309,1311,1313,"+
"1515,1588,1618,1676,1677,1678,1679,1796,1797,1974,"+
"1975,1976,1977,1978,1979";
npcshopdelitem "mission_shop",512;
for(set .@i,0; .@i<getarraysize(.Shop); set .@i,.@i+2)
npcshopadditem "mission_shop", .Shop[.@i], .Shop[.@i+1];
end;
}
- shop mission_shop FAKE_NPC,512:-1
Good day Hercules master Scripters!
May i request your support please. I am trying to make some twist the hunting mission script.
I wanted to have getitem poring coin directly to players inventory instead of mission points, as well as change mission points to poring coin in the shop.
please help me what to do. this is to allow player to simply trade coins.
Share this post
Link to post
Share on other sites