Skip to content

Commit

Permalink
Moved remaining refine NPC to the database (#3145)
Browse files Browse the repository at this point in the history
* Fixes #2510.
* Added Holink and Wagjak values to their own entries in the refine database.
* Added several anti-hack checks to refine NPC.
Thanks to the suggestion from @mazvi and @Atemo!
  • Loading branch information
aleos89 committed May 27, 2018
1 parent 394fb8a commit a12c79f
Show file tree
Hide file tree
Showing 10 changed files with 157 additions and 46 deletions.
30 changes: 30 additions & 0 deletions db/re/refine_db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ Armor:
- Type: REFINE_COST_OVER10_HD
Price: 100000
Material: 6225
- Type: REFINE_COST_HOLINK
Price: 15000
Material: 7619
- Type: REFINE_COST_WAGJAK
Price: 20000
Material: 985
Rates:
- Level: 1
Bonus: 100
Expand Down Expand Up @@ -163,6 +169,12 @@ WeaponLv1:
- Type: REFINE_COST_OVER10_HD
Price: 100000
Material: 6226
- Type: REFINE_COST_HOLINK
Price: 500
Material: 7620
- Type: REFINE_COST_WAGJAK
Price: 1000
Material: 1010
Rates:
- Level: 8
NormalChance: 60
Expand Down Expand Up @@ -254,6 +266,12 @@ WeaponLv2:
- Type: REFINE_COST_OVER10_HD
Price: 100000
Material: 6226
- Type: REFINE_COST_HOLINK
Price: 2000
Material: 7620
- Type: REFINE_COST_WAGJAK
Price: 2000
Material: 1011
Rates:
- Level: 7
NormalChance: 60
Expand Down Expand Up @@ -350,6 +368,12 @@ WeaponLv3:
- Type: REFINE_COST_OVER10_HD
Price: 100000
Material: 6226
- Type: REFINE_COST_HOLINK
Price: 20000
Material: 7620
- Type: REFINE_COST_WAGJAK
Price: 10000
Material: 984
Rates:
- Level: 6
NormalChance: 60
Expand Down Expand Up @@ -451,6 +475,12 @@ WeaponLv4:
- Type: REFINE_COST_OVER10_HD
Price: 100000
Material: 6226
- Type: REFINE_COST_HOLINK
Price: 50000
Material: 7620
- Type: REFINE_COST_WAGJAK
Price: 20000
Material: 984
Rates:
- Level: 5
NormalChance: 60
Expand Down
2 changes: 2 additions & 0 deletions doc/script_commands.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2768,6 +2768,8 @@ REFINE_COST_OVER10 - For refining over +10
REFINE_COST_HD - For refining with HD ores
REFINE_COST_ENRICHED - For refining with enriched ores
REFINE_COST_OVER10_HD - For refining over +10 with HD ores
REFINE_COST_HOLINK - For refining at Holink in Malangdo
REFINE_COST_WAGJAK - For refining at Refining Machine Wagjak in the Novice Academy

This function will return required cost for refining based on <information> argument.

Expand Down
23 changes: 19 additions & 4 deletions npc/merchants/advanced_refiner.txt
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,14 @@ payon,157,146,6 script Suhnbi#cash 85,{
close;
}

.@refineitemid = getequipid(.@part); // save id of the item
.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
.@price = getequiprefinecost(.@part, REFINE_COST_ENRICHED, REFINE_ZENY_COST);
.@material = getequiprefinecost(.@part, REFINE_COST_ENRICHED, REFINE_MATERIAL_ID);

// Make sure you have the neccessary items and Zeny to refine your items
// Make sure you have the necessary items and Zeny to refine your items
// Determines chance of failure and verifies that you want to continue.
callsub S_RefineValidate,getequipweaponlv(.@part),.@material,.@price,.@part;
callsub S_RefineValidate,getequipweaponlv(.@part),.@material,.@price,.@part,.@refineitemid,.@refinerycnt;

mes "[Suhnbi]";
mes "Clang! Clang! Clang!";
Expand Down Expand Up @@ -89,7 +91,8 @@ payon,157,146,6 script Suhnbi#cash 85,{
S_RefineValidate:
.@weapon_lvl = getarg(0);
.@item_req = getarg(1);
set .@price, getarg(2);
.@price = getarg(2);
.@part = getarg(3);

// If the VIP system is enabled, the prices for non-VIP players are considerably higher.
if (VIP_SCRIPT && !vip_status(VIP_STATUS_ACTIVE)) {
Expand All @@ -109,7 +112,7 @@ S_RefineValidate:
mes "Would you like to continue?";
next;
if(select("Yes:No") == 1) {
if (getequippercentrefinery(getarg(3)) < 100) {
if (getequippercentrefinery(.@part) < 100) {
if (.@weapon_lvl) {
mes "[Suhnbi]";
mes "Wow!!";
Expand Down Expand Up @@ -152,6 +155,18 @@ S_RefineValidate:
if (countitem(.@item_req) > 0 && Zeny > .@price) {
delitem .@item_req,1;
set Zeny, Zeny - .@price;

// anti-hack
if (callfunc("F_IsEquipIDHack", .@part, getarg(4)) ||
callfunc("F_IsEquipRefineHack", .@part, getarg(5))) {
mes "[Holink]";
emotion ET_FRET;
mes "Wait a second...";
mes "Do you think I'm stupid?!";
mes "You switched the item while I wasn't looking! Get out of here!";
close;
}

return;
}
mes "[Suhnbi]";
Expand Down
49 changes: 22 additions & 27 deletions npc/re/jobs/novice/academy.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12921,7 +12921,7 @@ izlude_d,153,126,1 duplicate(Refinery Owner Han#iz) Refinery Owner Han#iz_d 4_M_
if (isbegin_quest(5153) == 1) {
if (getequipweaponlv(.@part) == 1) {
mes "[Refining Machine Wagjak]";
mes "Type : 1 level weapon";
mes "Type : Level 1 weapon";
mes "Charge : Phracon, 1000 zeny";
mes "Service usage coupon sensed. No charge to be requested. Will you refine?";
next;
Expand Down Expand Up @@ -12969,33 +12969,17 @@ izlude_d,153,126,1 duplicate(Refinery Owner Han#iz) Refinery Owner Han#iz_d 4_M_
}
}
}
switch(getequipweaponlv(.@part)) {
case 0:

.@refineitemid = getequipid(.@part); // save id of the item
.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
.@price = getequiprefinecost(.@part, REFINE_COST_WAGJAK, REFINE_ZENY_COST);
.@material = getequiprefinecost(.@part, REFINE_COST_WAGJAK, REFINE_MATERIAL_ID);

if ((getequipweaponlv(.@part) >= 1) && (getequipweaponlv(.@part) <= 4))
.@type$ = "Level " + getequipweaponlv(.@part) + " weapon";
else
.@type$ = "Armor";
.@material = 985;// Elunium
.@price = 20000;
break;
case 1:
.@type$ = "Level 1 weapon";
.@material = 1010;// Phracon
.@price = 1000;
break;
case 2:
.@type$ = "Level 2 weapon";
.@material = 1011;// Emveretarcon
.@price = 2000;
break;
case 3:
.@type$ = "Level 3 weapon";
.@material = 984;// Oridecon
.@price = 10000;
break;
case 4:
.@type$ = "Level 4 weapon";
.@material = 984;// Oridecon
.@price = 20000;
break;
}

mes "[Refining Machine Wagjak]";
mes "Type : "+ .@type$ +"";
mes "Charge : "+ getitemname(.@material) +", "+ .@price +" zeny";
Expand Down Expand Up @@ -13025,6 +13009,17 @@ izlude_d,153,126,1 duplicate(Refinery Owner Han#iz) Refinery Owner Han#iz_d 4_M_
if (countitem(.@material) > 0 && Zeny >= .@price) {
delitem .@material, 1;
Zeny -= .@price;

// anti-hack
if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) ||
callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) {
mes "[Refining Machine Wagjak]";
emotion ET_FRET;
mes "Wait a second...";
mes "Do you think I'm stupid?!";
mes "You switched the item while I wasn't looking! Get out of here!";
close;
}
} else {
mes "[Refining Machine Wagjak]";
mes "^FF0000- error number 8282 -^000000";
Expand Down
36 changes: 23 additions & 13 deletions npc/re/merchants/advanced_refiner.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,33 +70,31 @@ malangdo,221,174,6 script Holink#mal_cash 559,{
close;
}
mes "[Holink]";
// TODO: Price is different to Suhnbi of Payon. Intended? [Secret]
.@material = getequiprefinecost(.@part, REFINE_COST_ENRICHED, REFINE_MATERIAL_ID);
.@refineitemid = getequipid(.@part); // save id of the item
.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
.@price = getequiprefinecost(.@part, REFINE_COST_HOLINK, REFINE_ZENY_COST);
.@material = getequiprefinecost(.@part, REFINE_COST_HOLINK, REFINE_MATERIAL_ID);

switch(getequipweaponlv(.@part)) {
default:
case 0: // Armor
set .@price,15000;
set .@type$,"armor";
.@type$ = "armor";
mes "You have chosen an armor, meow~";
break;
case 1: // Level 1 Weapon
set .@price,500;
set .@type$,"weapon";
.@type$ = "weapon";
mes "A level 1 weapon...?";
break;
case 2: // Level 2 Weapon
set .@price,2000;
set .@type$,"weapon";
.@type$ = "weapon";
mes "Meow, a level 2 weapon...?";
break;
case 3: // Level 3 Weapon
set .@price,20000;
set .@type$,"weapon";
.@type$ = "weapon";
mes "Meow Meow~~ A level 3 weapon~~";
break;
case 4: // Level 4 Weapon
set .@price,50000;
set .@type$,"weapon";
.@type$ = "weapon";
mes "Me-Meow!... A level 4 weapon...!";
mes "I've only seen it twice while";
mes "learning from Aragam... Me-Meow!!";
Expand All @@ -108,7 +106,7 @@ malangdo,221,174,6 script Holink#mal_cash 559,{
if(select("Yes!!:No!!") == 2) {
mes "[Holink]";
mes "Kyack!!";
mes "You don't belive in refine master Holink, meow?~";
mes "You don't believe in refine master Holink, meow?~";
close;
}
if (getequippercentrefinery(.@part, true) < 100) {
Expand Down Expand Up @@ -148,6 +146,18 @@ malangdo,221,174,6 script Holink#mal_cash 559,{
}
delitem .@material,1;
set Zeny, Zeny-.@price;

// anti-hack
if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) ||
callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) {
mes "[Holink]";
emotion ET_FRET;
mes "Wait a second...";
mes "Do you think I'm stupid?!";
mes "You switched the item while I wasn't looking! Get out of here!";
close;
}

if (getequippercentrefinery(.@part, true) > rand(100)) {
successrefitem .@part;
mes "[Holink]";
Expand Down
28 changes: 28 additions & 0 deletions npc/re/merchants/hd_refiner.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@
close;
}

.@refineitemid = getequipid(.@part); // save id of the item
.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
.@price = getequiprefinecost(.@part, REFINE_COST_HD, REFINE_ZENY_COST);
.@material = getequiprefinecost(.@part, REFINE_COST_HD, REFINE_MATERIAL_ID);

Expand Down Expand Up @@ -105,6 +107,18 @@
}
delitem .@material,1;
set Zeny, Zeny-.@price;

// anti-hack
if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) ||
callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) {
mes "[Blacksmith Mighty Hammer]";
emotion ET_FRET;
mes "Wait a second...";
mes "Do you think I'm stupid?!";
mes "You switched the item while I wasn't looking! Get out of here!";
close;
}

mes "[Blacksmith Mighty Hammer]";
mes "Tac! Tac! Tac!";
if (getequippercentrefinery(.@part, true) > rand(100)) {
Expand Down Expand Up @@ -200,6 +214,8 @@ lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 826
mes "This weapon is perfect, no need to refine it anymore~";
close;
}
.@refineitemid = getequipid(.@part); // save id of the item
.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
.@price = getequiprefinecost(.@part, REFINE_COST_OVER10_HD, REFINE_ZENY_COST);
.@material = getequiprefinecost(.@part, REFINE_COST_OVER10_HD, REFINE_MATERIAL_ID);
switch(getequipweaponlv(.@part)) {
Expand Down Expand Up @@ -253,6 +269,18 @@ lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 826
}
delitem .@material,1;
set Zeny, Zeny-.@price;

// anti-hack
if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) ||
callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) {
mes "[Basta]";
emotion ET_FRET;
mes "Wait a second...";
mes "Do you think I'm stupid?!";
mes "You switched the item while I wasn't looking! Get out of here!";
close;
}

mes "Pow! Pow! Pow! Pow!";
if (getequippercentrefinery(.@part, true) > rand(100)) {
successrefitem .@part;
Expand Down
14 changes: 14 additions & 0 deletions npc/re/merchants/refine.txt
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,8 @@ malangdo,224,172,6 script Clink#mal_normal 544,{
close;
}

.@refineitemid = getequipid(.@part); // save id of the item
.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
.@price = getequiprefinecost(.@part, REFINE_COST_NORMAL, REFINE_ZENY_COST);
.@material = getequiprefinecost(.@part, REFINE_COST_NORMAL, REFINE_MATERIAL_ID);

Expand Down Expand Up @@ -502,6 +504,18 @@ malangdo,224,172,6 script Clink#mal_normal 544,{
}
delitem .@material,1;
Zeny = Zeny-.@price;

// anti-hack
if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) ||
callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) {
mes "[Clink]";
emotion ET_FRET;
mes "Wait a second...";
mes "Do you think I'm stupid?!";
mes "You switched the item while I wasn't looking! Get out of here!";
close;
}

if (getequippercentrefinery(.@part) <= rand(100)) {
failedrefitem .@part;
mes "[Clink]";
Expand Down
17 changes: 15 additions & 2 deletions npc/re/merchants/ticket_refiner.txt
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ prontera,184,177,6 script Refine Master 851,{
mes "This item is impossible to refine.";
close;
}
.@refineitemid = getequipid(.@part); // save id of the item
.@refinerycnt = getequiprefinerycnt(.@part); //save refinery count
switch(getequipweaponlv(.@part)) {
default:
case 0:
Expand Down Expand Up @@ -143,9 +145,20 @@ prontera,184,177,6 script Refine Master 851,{
mes "I have my own special way to refine...";
mes ".......ka boom!";
specialeffect EF_SUI_EXPLOSION;
if (countitem(.@ticket_id))
if (countitem(.@ticket_id)) {
delitem .@ticket_id,1;
else {

// anti-hack
if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) ||
callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) {
mes "[Refine Master]";
emotion ET_FRET;
mes "Wait a second...";
mes "Do you think I'm stupid?!";
mes "You switched the item while I wasn't looking! Get out of here!";
close;
}
} else {
next;
mes "Error!";
mes "Please report this.";
Expand Down
2 changes: 2 additions & 0 deletions src/map/script_constants.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4960,6 +4960,8 @@
export_constant(REFINE_COST_HD);
export_constant(REFINE_COST_ENRICHED);
export_constant(REFINE_COST_OVER10_HD);
export_constant(REFINE_COST_HOLINK);
export_constant(REFINE_COST_WAGJAK);
export_constant(REFINE_COST_MAX);

/* refine information types */
Expand Down

0 comments on commit a12c79f

Please sign in to comment.