50103=custom/monstercontract.js
right after 15007=server/house/houseAddonUse.js
then go in-game ad do 'add item giantcontract or undeadcontract.
have fun
function onUseChecked(pUser, iUsed)
{
var socket = pUser.socket;
socket.tempObj = iUsed;
if (pUser.visible == 1 || pUser.visible == 2)
{
pUser.visible = 0;
}
if (socket && iUsed && iUsed.isItem)
{
//Check to see if it's locked down
if (iUsed.movable == 2 || iUsed.movable == 3)
{
socket.SysMessage(GetDictionaryEntry(774, socket.language)); // That is locked down and you cannot use it
return false;
}
var itemOwner = GetPackOwner(iUsed, 0);
if (itemOwner == null || itemOwner.serial != pUser.serial)
{
pUser.SysMessage("The Monster Contract needs to be in your pack");
return false;
}
else
{
MonsterContractGump(pUser, iUsed);
}
}
}
function InitIDs()
{
var ids = {
giants: [0x0002, 0x0012, 0x0001, 0x0054, 0x0087, 0x0036, 0x0035, 0x0037, 0x004b, 0x004c],
undead: [0x0003, 0x004f, 0x0018, 0x001a, 0x0032, 0x0038, 0x0093, 0x0094, 0x009a, 0x009b, 0x0099]
};
return ids;
}
function onCreateDFN(objMade, objType)
{
if (objType == 0)
{
var npcids = InitIDs();
var giants = npcids.giants;
var undead = npcids.undead;
//var giants = [0x0002, 0x0012, 0x0001, 0x0054, 0x0087, 0x0036, 0x0035, 0x0037, 0x004b, 0x004c];
//var undead = [0x0003, 0x004f, 0x0018, 0x001a, 0x0032, 0x0038, 0x0093, 0x0094, 0x009a, 0x009b, 0x0099];
var ids = null;
if (objMade.GetTag("type") == 500)
{
var typeid = [1, 2, 1, 2];
var randomType = Math.floor(Math.random() * typeid.length);
var rType = typeid[randomType];
objMade.SetTag("type", parseInt(rType));
switch (objMade.GetTag("type"))
{
case 1: ids = giants; break;
case 2: ids = undead; break;
}
// Generate a random index to select a random ID from the array
var randomIndex = Math.floor(Math.random() * ids.length);
var randomId = ids[randomIndex].toString(16);
// Set the random ID and amount as tags on objMade
objMade.SetTag("npcid", randomId);
}
else
{
switch (objMade.GetTag("type"))
{
case 1: ids = giants; break;
case 2: ids = undead; break;
}
// Generate a random index to select a random ID from the array
var randomIndex = Math.floor(Math.random() * ids.length);
var randomId = ids[randomIndex].toString(16);
// Set the random ID and amount as tags on objMade
objMade.SetTag("npcid", randomId);
}
// Generate a random amount value between 10 and 50
var randomAmount = Math.floor(Math.random() * (50 - 10 + 1)) + 10;
// Define gold ranges based on the number of NPCs to kill
// Adjust these ranges as desired
var goldRanges = [
{ minNPCs: 10, maxNPCs: 20, baseGold: 250 },
{ minNPCs: 21, maxNPCs: 30, baseGold: 500 },
{ minNPCs: 31, maxNPCs: 50, baseGold: 1000 }
];
// Find the appropriate gold reward based on the number of NPCs to kill
var goldToGive = 0;
for (var i = 0; i < goldRanges.length; i++)
{
if (randomAmount >= goldRanges[i].minNPCs && randomAmount <= goldRanges[i].maxNPCs)
{
// Calculate the multiplier based on the random amount
var multiplier = (randomAmount - goldRanges[i].minNPCs + 1) / (goldRanges[i].maxNPCs - goldRanges[i].minNPCs + 1);
// Apply the multiplier to the base gold
goldToGive = Math.ceil(goldRanges[i].baseGold * multiplier);
break;
}
}
objMade.SetTag("amounttokill", randomAmount);
objMade.SetTag("Gold", goldToGive);
objMade.SetTag("init", true);
}
}
function Init(iUsed)
{
var npcids = InitIDs();
var giants = npcids.giants;
var undead = npcids.undead;
//var giants = [0x0002, 0x0012, 0x0001, 0x0054, 0x0087, 0x0036, 0x0035, 0x0037, 0x004b, 0x004c];
//var undead = [0x0003, 0x004f, 0x0018, 0x001a, 0x0032, 0x0038, 0x0093, 0x0094, 0x009a, 0x009b, 0x0099];
//var ids = null;
switch (iUsed.GetTag("type"))
{
case 1: //ids = giants; break;
var randomIndex = Math.floor(Math.random() * giants.length);
var randomId = giants[randomIndex].toString(16);break
case 2: //ids = undead; break;
var randomIndex = Math.floor(Math.random() * undead.length);
var randomId = undead[randomIndex].toString(16); break
}
// Generate a random index to select a random ID from the array
//var randomIndex = Math.floor(Math.random() * ids.length);
//var randomId = ids[randomIndex].toString(16);
// Set the random ID and amount as tags on objMade
iUsed.SetTag("npcid", randomId);
// Generate a random amount value between 10 and 50
var randomAmount = Math.floor(Math.random() * (50 - 10 + 1)) + 10;
// Define gold ranges based on the number of NPCs to kill
// Adjust these ranges as desired
var goldRanges = [
{ minNPCs: 10, maxNPCs: 20, baseGold: 250 },
{ minNPCs: 21, maxNPCs: 30, baseGold: 500 },
{ minNPCs: 31, maxNPCs: 50, baseGold: 1000 }
];
// Find the appropriate gold reward based on the number of NPCs to kill
var goldToGive = 0;
for (var i = 0; i < goldRanges.length; i++) {
if (randomAmount >= goldRanges[i].minNPCs && randomAmount <= goldRanges[i].maxNPCs) {
// Calculate the multiplier based on the random amount
var multiplier = (randomAmount - goldRanges[i].minNPCs + 1) / (goldRanges[i].maxNPCs - goldRanges[i].minNPCs + 1);
// Apply the multiplier to the base gold
goldToGive = Math.ceil(goldRanges[i].baseGold * multiplier);
break;
}
}
objMade.SetTag("amounttokill", randomAmount);
objMade.SetTag("Gold", goldToGive)
iUsed.SetTag("init", true);
}
function MonsterContractGump(pUser, iUsed)
{
if (!iUsed.GetTag("init"))
{
Init(iUsed);
}
else
{
var socket = pUser.socket;
var myContract = new Gump;
var NPCID = iUsed.GetTag("npcid");
var parsedNPCID = parseInt(NPCID, 16); // Parse NPCID as a hexadecimal value
var Amount = iUsed.GetTag("amounttokill");
var Amountkilled = iUsed.GetTag("amounttokilled");
var goldamount = iUsed.GetTag("Gold");
var name = ""
switch (parsedNPCID)
{
case 0x0002:
case 0x0012: name = "Ettin"; iUsed.SetTag("ettin", 1); break;
case 0x0001: name = "Ogre"; iUsed.SetTag("ogre", 1); break;
case 0x0054: name = "Ogre lord"; iUsed.SetTag("ogrelord", 1); break;
case 0x0087: name = "Arctic Ogre Lord"; iUsed.SetTag("arcticogrelord", 1); break;
case 0x0036:
case 0x0035: name = "Troll"; iUsed.SetTag("troll", 1); break;
case 0x0037: name = "Frost Troll"; iUsed.SetTag("frosttroll", 1); break;
case 0x004b: name = "Cyclopean Warrior"; iUsed.SetTag("cyclops", 1); break;
case 0x004c: name = "Titan"; iUsed.SetTag("titan", 1); break;
case 0x0003: name = "Zombie"; iUsed.SetTag("zombie", 1); break;
case 0x004f: name = "Ancient lich"; iUsed.SetTag("ancientlich", 1); break;
case 0x004f: name = "Lich Lord"; iUsed.SetTag("lichlord", 1); break;
case 0x0018: name = "Lich"; iUsed.SetTag("lich", 1); break;
case 0x001a: name = "Spectre"; iUsed.SetTag("spectre", 1); break;
case 0x001a: name = "Wraith"; iUsed.SetTag("wraith", 1); break;
case 0x001a: name = "Shade"; iUsed.SetTag("shade", 1); break;
case 0x0032: name = "Skeleton"; iUsed.SetTag("skeleton", 1); break;
case 0x0038: name = "Bone Axeman"; iUsed.SetTag("boneaxeman", 1); break;
case 0x0093: name = "Bone Knight"; iUsed.SetTag("boneknight", 1); break;
case 0x0093: name = "Skeletal Knight"; iUsed.SetTag("skeletalknight", 1); break;
case 0x0094: name = "Bone Magi"; iUsed.SetTag("bonemage", 1); break;
case 0x0094: name = "Skeletal Mage"; iUsed.SetTag("skeletalmage", 1); break;
case 0x009a: name = "Mummy"; iUsed.SetTag("mummy", 1); break;
case 0x009b: name = "Rotting Corpse"; iUsed.SetTag("rottingcorpse", 1); break;
case 0x0099: name = "Ghoul"; iUsed.SetTag("ghoul", 1); break;
default: name = "ettin"; iUsed.SetTag("ettin", 1); break;
}
myContract.AddBackground(0, 0, 300, 170, 5170);
myContract.AddText(40, 40, 1153, "Contract For: " + name.toString());
myContract.AddText(40, 60, 1153, "Amount Needed: " + Amount);
myContract.AddText(40, 80, 1153, "Quantity Killed: " + Amountkilled);
myContract.AddText(40, 100, 1153, "Reward: " + goldamount);
if (Amountkilled != Amount)
{
myContract.AddButton(90, 120, 2061, 2062, 1, 0, 1);
myContract.AddText(104, 118, 0, "Corpse");
}
else
{
myContract.AddButton(90, 120, 2061, 2062, 1, 0, 2);
myContract.AddText(104, 118, 0, "Reward");
}
myContract.Send(pUser);
myContract.Free();
}
}
function onGumpPress(pSock, pButton, gumpData)
{
var pUser = pSock.currentChar;
var iUsed = pSock.tempObj;
var goldamount = iUsed.GetTag("Gold");
switch (pButton)
{
case 1:
pUser.CustomTarget(0);
pUser.SysMessage("Target the Corpse of Monster you killed to collect bounty");
break;
case 2:
CreateDFNItem(pSock, pUser, "0x0eed", goldamount, "ITEM", true);
iUsed.Delete();
break;
}
}
function onCallback0(socket, myTarget)
{
var iUsed = socket.tempObj;
var pUser = socket.currentChar;
var Amountkilled = iUsed.GetTag("amounttokilled");
if (socket.GetWord(1) || !ValidateObject(myTarget))
{
// No valid dynamic item was targeted
socket.SysMessage(GetDictionaryEntry(749, socket.language)); // That is not a corpse!
return;
}
else
{
var amount = 0;
var sectionID = myTarget.sectionID.toLowerCase(); // Convert to lowercase for case-insensitive matching
switch (sectionID)
{
case "ettin":
case "ogre":
case "ogrelord":
case "arcticogrelord":
case "troll":
case "frosttroll":
case "cyclops":
case "titan":
case "zombie":
case "lich":
case "ancientlich":
case "lichlord":
case "spectre":
case "wraith":
case "shade":
case "skeleton":
case "boneaxeman":
case "boneknight":
case "skeletalknight":
case "bonemage":
case "skeletalmage":
case "mummy":
case "rottingcorpse":
case "ghoul":
if (iUsed.GetTag(sectionID) == 1 && myTarget.GetTag("bounty") == 0)
{
amount = 1;
myTarget.SetTag("bounty", 1);
socket.SysMessage("You claimed the bounty on this corpse.");
break;
}
else
{
socket.SysMessage("This corpses has already been claimed.");
}
break;
}
iUsed.SetTag("amounttokilled", Amountkilled + amount);
MonsterContractGump(pUser, iUsed);
}
}
function onTooltip(contract, pSocket)
{
var tooltipText = "";
switch (contract.GetTag("type"))
{
case 1: tooltipText = ("Bounty for Giants"); break;
case 2: tooltipText = ("Bounty for Undead"); break;
default: tooltipText = ("none"); break;
}
return tooltipText;
}
{
var socket = pUser.socket;
socket.tempObj = iUsed;
if (pUser.visible == 1 || pUser.visible == 2)
{
pUser.visible = 0;
}
if (socket && iUsed && iUsed.isItem)
{
//Check to see if it's locked down
if (iUsed.movable == 2 || iUsed.movable == 3)
{
socket.SysMessage(GetDictionaryEntry(774, socket.language)); // That is locked down and you cannot use it
return false;
}
var itemOwner = GetPackOwner(iUsed, 0);
if (itemOwner == null || itemOwner.serial != pUser.serial)
{
pUser.SysMessage("The Monster Contract needs to be in your pack");
return false;
}
else
{
MonsterContractGump(pUser, iUsed);
}
}
}
function InitIDs()
{
var ids = {
giants: [0x0002, 0x0012, 0x0001, 0x0054, 0x0087, 0x0036, 0x0035, 0x0037, 0x004b, 0x004c],
undead: [0x0003, 0x004f, 0x0018, 0x001a, 0x0032, 0x0038, 0x0093, 0x0094, 0x009a, 0x009b, 0x0099]
};
return ids;
}
function onCreateDFN(objMade, objType)
{
if (objType == 0)
{
var npcids = InitIDs();
var giants = npcids.giants;
var undead = npcids.undead;
//var giants = [0x0002, 0x0012, 0x0001, 0x0054, 0x0087, 0x0036, 0x0035, 0x0037, 0x004b, 0x004c];
//var undead = [0x0003, 0x004f, 0x0018, 0x001a, 0x0032, 0x0038, 0x0093, 0x0094, 0x009a, 0x009b, 0x0099];
var ids = null;
if (objMade.GetTag("type") == 500)
{
var typeid = [1, 2, 1, 2];
var randomType = Math.floor(Math.random() * typeid.length);
var rType = typeid[randomType];
objMade.SetTag("type", parseInt(rType));
switch (objMade.GetTag("type"))
{
case 1: ids = giants; break;
case 2: ids = undead; break;
}
// Generate a random index to select a random ID from the array
var randomIndex = Math.floor(Math.random() * ids.length);
var randomId = ids[randomIndex].toString(16);
// Set the random ID and amount as tags on objMade
objMade.SetTag("npcid", randomId);
}
else
{
switch (objMade.GetTag("type"))
{
case 1: ids = giants; break;
case 2: ids = undead; break;
}
// Generate a random index to select a random ID from the array
var randomIndex = Math.floor(Math.random() * ids.length);
var randomId = ids[randomIndex].toString(16);
// Set the random ID and amount as tags on objMade
objMade.SetTag("npcid", randomId);
}
// Generate a random amount value between 10 and 50
var randomAmount = Math.floor(Math.random() * (50 - 10 + 1)) + 10;
// Define gold ranges based on the number of NPCs to kill
// Adjust these ranges as desired
var goldRanges = [
{ minNPCs: 10, maxNPCs: 20, baseGold: 250 },
{ minNPCs: 21, maxNPCs: 30, baseGold: 500 },
{ minNPCs: 31, maxNPCs: 50, baseGold: 1000 }
];
// Find the appropriate gold reward based on the number of NPCs to kill
var goldToGive = 0;
for (var i = 0; i < goldRanges.length; i++)
{
if (randomAmount >= goldRanges[i].minNPCs && randomAmount <= goldRanges[i].maxNPCs)
{
// Calculate the multiplier based on the random amount
var multiplier = (randomAmount - goldRanges[i].minNPCs + 1) / (goldRanges[i].maxNPCs - goldRanges[i].minNPCs + 1);
// Apply the multiplier to the base gold
goldToGive = Math.ceil(goldRanges[i].baseGold * multiplier);
break;
}
}
objMade.SetTag("amounttokill", randomAmount);
objMade.SetTag("Gold", goldToGive);
objMade.SetTag("init", true);
}
}
function Init(iUsed)
{
var npcids = InitIDs();
var giants = npcids.giants;
var undead = npcids.undead;
//var giants = [0x0002, 0x0012, 0x0001, 0x0054, 0x0087, 0x0036, 0x0035, 0x0037, 0x004b, 0x004c];
//var undead = [0x0003, 0x004f, 0x0018, 0x001a, 0x0032, 0x0038, 0x0093, 0x0094, 0x009a, 0x009b, 0x0099];
//var ids = null;
switch (iUsed.GetTag("type"))
{
case 1: //ids = giants; break;
var randomIndex = Math.floor(Math.random() * giants.length);
var randomId = giants[randomIndex].toString(16);break
case 2: //ids = undead; break;
var randomIndex = Math.floor(Math.random() * undead.length);
var randomId = undead[randomIndex].toString(16); break
}
// Generate a random index to select a random ID from the array
//var randomIndex = Math.floor(Math.random() * ids.length);
//var randomId = ids[randomIndex].toString(16);
// Set the random ID and amount as tags on objMade
iUsed.SetTag("npcid", randomId);
// Generate a random amount value between 10 and 50
var randomAmount = Math.floor(Math.random() * (50 - 10 + 1)) + 10;
// Define gold ranges based on the number of NPCs to kill
// Adjust these ranges as desired
var goldRanges = [
{ minNPCs: 10, maxNPCs: 20, baseGold: 250 },
{ minNPCs: 21, maxNPCs: 30, baseGold: 500 },
{ minNPCs: 31, maxNPCs: 50, baseGold: 1000 }
];
// Find the appropriate gold reward based on the number of NPCs to kill
var goldToGive = 0;
for (var i = 0; i < goldRanges.length; i++) {
if (randomAmount >= goldRanges[i].minNPCs && randomAmount <= goldRanges[i].maxNPCs) {
// Calculate the multiplier based on the random amount
var multiplier = (randomAmount - goldRanges[i].minNPCs + 1) / (goldRanges[i].maxNPCs - goldRanges[i].minNPCs + 1);
// Apply the multiplier to the base gold
goldToGive = Math.ceil(goldRanges[i].baseGold * multiplier);
break;
}
}
objMade.SetTag("amounttokill", randomAmount);
objMade.SetTag("Gold", goldToGive)
iUsed.SetTag("init", true);
}
function MonsterContractGump(pUser, iUsed)
{
if (!iUsed.GetTag("init"))
{
Init(iUsed);
}
else
{
var socket = pUser.socket;
var myContract = new Gump;
var NPCID = iUsed.GetTag("npcid");
var parsedNPCID = parseInt(NPCID, 16); // Parse NPCID as a hexadecimal value
var Amount = iUsed.GetTag("amounttokill");
var Amountkilled = iUsed.GetTag("amounttokilled");
var goldamount = iUsed.GetTag("Gold");
var name = ""
switch (parsedNPCID)
{
case 0x0002:
case 0x0012: name = "Ettin"; iUsed.SetTag("ettin", 1); break;
case 0x0001: name = "Ogre"; iUsed.SetTag("ogre", 1); break;
case 0x0054: name = "Ogre lord"; iUsed.SetTag("ogrelord", 1); break;
case 0x0087: name = "Arctic Ogre Lord"; iUsed.SetTag("arcticogrelord", 1); break;
case 0x0036:
case 0x0035: name = "Troll"; iUsed.SetTag("troll", 1); break;
case 0x0037: name = "Frost Troll"; iUsed.SetTag("frosttroll", 1); break;
case 0x004b: name = "Cyclopean Warrior"; iUsed.SetTag("cyclops", 1); break;
case 0x004c: name = "Titan"; iUsed.SetTag("titan", 1); break;
case 0x0003: name = "Zombie"; iUsed.SetTag("zombie", 1); break;
case 0x004f: name = "Ancient lich"; iUsed.SetTag("ancientlich", 1); break;
case 0x004f: name = "Lich Lord"; iUsed.SetTag("lichlord", 1); break;
case 0x0018: name = "Lich"; iUsed.SetTag("lich", 1); break;
case 0x001a: name = "Spectre"; iUsed.SetTag("spectre", 1); break;
case 0x001a: name = "Wraith"; iUsed.SetTag("wraith", 1); break;
case 0x001a: name = "Shade"; iUsed.SetTag("shade", 1); break;
case 0x0032: name = "Skeleton"; iUsed.SetTag("skeleton", 1); break;
case 0x0038: name = "Bone Axeman"; iUsed.SetTag("boneaxeman", 1); break;
case 0x0093: name = "Bone Knight"; iUsed.SetTag("boneknight", 1); break;
case 0x0093: name = "Skeletal Knight"; iUsed.SetTag("skeletalknight", 1); break;
case 0x0094: name = "Bone Magi"; iUsed.SetTag("bonemage", 1); break;
case 0x0094: name = "Skeletal Mage"; iUsed.SetTag("skeletalmage", 1); break;
case 0x009a: name = "Mummy"; iUsed.SetTag("mummy", 1); break;
case 0x009b: name = "Rotting Corpse"; iUsed.SetTag("rottingcorpse", 1); break;
case 0x0099: name = "Ghoul"; iUsed.SetTag("ghoul", 1); break;
default: name = "ettin"; iUsed.SetTag("ettin", 1); break;
}
myContract.AddBackground(0, 0, 300, 170, 5170);
myContract.AddText(40, 40, 1153, "Contract For: " + name.toString());
myContract.AddText(40, 60, 1153, "Amount Needed: " + Amount);
myContract.AddText(40, 80, 1153, "Quantity Killed: " + Amountkilled);
myContract.AddText(40, 100, 1153, "Reward: " + goldamount);
if (Amountkilled != Amount)
{
myContract.AddButton(90, 120, 2061, 2062, 1, 0, 1);
myContract.AddText(104, 118, 0, "Corpse");
}
else
{
myContract.AddButton(90, 120, 2061, 2062, 1, 0, 2);
myContract.AddText(104, 118, 0, "Reward");
}
myContract.Send(pUser);
myContract.Free();
}
}
function onGumpPress(pSock, pButton, gumpData)
{
var pUser = pSock.currentChar;
var iUsed = pSock.tempObj;
var goldamount = iUsed.GetTag("Gold");
switch (pButton)
{
case 1:
pUser.CustomTarget(0);
pUser.SysMessage("Target the Corpse of Monster you killed to collect bounty");
break;
case 2:
CreateDFNItem(pSock, pUser, "0x0eed", goldamount, "ITEM", true);
iUsed.Delete();
break;
}
}
function onCallback0(socket, myTarget)
{
var iUsed = socket.tempObj;
var pUser = socket.currentChar;
var Amountkilled = iUsed.GetTag("amounttokilled");
if (socket.GetWord(1) || !ValidateObject(myTarget))
{
// No valid dynamic item was targeted
socket.SysMessage(GetDictionaryEntry(749, socket.language)); // That is not a corpse!
return;
}
else
{
var amount = 0;
var sectionID = myTarget.sectionID.toLowerCase(); // Convert to lowercase for case-insensitive matching
switch (sectionID)
{
case "ettin":
case "ogre":
case "ogrelord":
case "arcticogrelord":
case "troll":
case "frosttroll":
case "cyclops":
case "titan":
case "zombie":
case "lich":
case "ancientlich":
case "lichlord":
case "spectre":
case "wraith":
case "shade":
case "skeleton":
case "boneaxeman":
case "boneknight":
case "skeletalknight":
case "bonemage":
case "skeletalmage":
case "mummy":
case "rottingcorpse":
case "ghoul":
if (iUsed.GetTag(sectionID) == 1 && myTarget.GetTag("bounty") == 0)
{
amount = 1;
myTarget.SetTag("bounty", 1);
socket.SysMessage("You claimed the bounty on this corpse.");
break;
}
else
{
socket.SysMessage("This corpses has already been claimed.");
}
break;
}
iUsed.SetTag("amounttokilled", Amountkilled + amount);
MonsterContractGump(pUser, iUsed);
}
}
function onTooltip(contract, pSocket)
{
var tooltipText = "";
switch (contract.GetTag("type"))
{
case 1: tooltipText = ("Bounty for Giants"); break;
case 2: tooltipText = ("Bounty for Undead"); break;
default: tooltipText = ("none"); break;
}
return tooltipText;
}
[monstercontract]
{
NAME=Monster Contract
ID=0x14F0
VALUE=1500 700
RESTOCK=5
GOOD=9
SCRIPT=50103
custominttag=type 500
}
[giantcontract]
{
get=monstercontract
custominttag=type 1
}
[undeadcontract]
{
get=monstercontract
custominttag=type 2
}
{
NAME=Monster Contract
ID=0x14F0
VALUE=1500 700
RESTOCK=5
GOOD=9
SCRIPT=50103
custominttag=type 500
}
[giantcontract]
{
get=monstercontract
custominttag=type 1
}
[undeadcontract]
{
get=monstercontract
custominttag=type 2
}