All you need to do is go around and setup the Outpost Fire Pits around your shard. so players can find them and double click them and use them.
With Enough Camping Skill you can build up the outposts. Each Buildable has a 1 hour decay timer. So they will decay one hour apart now any one can rebuild these outposts long as they have enough skills.
Mark Map is not in yet, Will be added later in version 2.
Just Add the item and go into your jse_fileassociations and add 22006=custom/outpostgump.js
[OutpostFirepit]
{
get=base_item
name=Outpost Firepit
id=0xFAC
DECAY=0
SCRIPT=22006
DIR=22
}
{
get=base_item
name=Outpost Firepit
id=0xFAC
DECAY=0
SCRIPT=22006
DIR=22
}
const AbandonTimer = 3600000;
function onUseChecked(pUser, iUsed)
{
var socket = pUser.socket;
var fireOn = iUsed.GetTag("FireLight");
if ( fireOn == true )
{
OutPostGump(pUser, iUsed);
return;
}
if( pUser.skills.carpentry >= 600)
{
pUser.EmoteMessage( "You light the fire." );
iUsed.SetTag("FireLight", true);
var myFire = CreateBlankItem( pUser.socket, pUser, 1, "fire", 0xDE3, 0x0, "ITEM", false );
myFire.movable = 2;
myFire.x = iUsed.x;
myFire.y = iUsed.y;
myFire.z = iUsed.z + 2;
myFire.dir = 1;
myFire.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
myFire.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
myFire.StartTimer(AbandonTimer, 1, true);
OutPostGump(pUser, iUsed);
}
else
{
pUser.EmoteMessage( "A skilled camper could establish an outpost here." );
return;
}
}
function OutPostGump(pUser, iUsed)
{
var socket = pUser.socket;
socket.tempObj = iUsed;
var outpost = new Gump;
outpost.AddBackground(0, 0, 380, 380, 0x6DB);
outpost.AddHTMLGump(140, 20, 300, 35, false, false, "<basefont color=#ffffff>Secure Outpost</basefont>");
outpost.AddPicture(80, 15, 0xFAC);
outpost.AddPicture(80, 20, 0xDE3);
outpost.AddHTMLGump(50, 55, 300, 140, false, false, "<basefont color=#ffffff>Outposts are upgradable encampments that can be outfitted with various utilities that benefit all passing adventurers.<br><br>Any adventurer with enough skill in Camping can establish or upgrade these outposts.</basefont>");
outpost.AddButton(75, 208, 0xFA5, 0xFA7, 1, 0, 1);
outpost.AddHTMLGump(110, 210, 110, 70, false, false, "<basefont color=#ffffff>MARK LOCATION</basefont>");
outpost.AddButton(75, 233, 0xFA5, 0xFA7, 1, 0, 2);
outpost.AddHTMLGump(110, 235, 110, 70, false, false, "<basefont color=#ffffff>BUILD TENT</basefont>");
outpost.AddButton(75, 258, 0xFA5, 0xFA7, 1, 0, 3);
outpost.AddHTMLGump(110, 260, 110, 70, false, false, "<basefont color=#ffffff>ADD HEALER</basefont>");
outpost.AddButton(75, 283, 0xFA5, 0xFA7, 1, 0, 4);
outpost.AddHTMLGump(110, 285, 110, 70, false, false, "<basefont color=#ffffff>ADD BANKER</basefont>");
outpost.AddButton(75, 308, 0xFA5, 0xFA7, 1, 0, 5);
outpost.AddHTMLGump(110, 310, 110, 70, false, false, "<basefont color=#ffffff>BUILD ANVIL & FORGE</basefont>");
outpost.Send(pUser);
outpost.Free();
}
function onGumpPress(pSock, pButton, gumpData)
{
var pUser = pSock.currentChar;
iUsed = pSock.tempObj;
var tentCreated = iUsed.GetTag("Tent");
var healerCreated = iUsed.GetTag("Healer");
var bankerCreated = iUsed.GetTag("Banker");
var anvilforgeCreated = iUsed.GetTag("AnvilForge");
switch (pButton)
{
case 0:
break;
case 1:
if( pUser.skills.carpentry >= 1000)
{
pSock.SysMessage( "Select a camping map." );
break;
}
else
{
pSock.SysMessage( "You do not have sufficient skill in camping to do that." );
OutPostGump(pUser, iUsed);
break;
}
case 2: // tent
if ( tentCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 800)
{
iUsed.SetTag("Tent", true);
pSock.SysMessage( "You upgrade the outpost with a tent." );
iUsed.SoundEffect( 0x23D, true );
CreateTent(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
case 3: // Healer
if ( healerCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 900)
{
iUsed.SetTag("Healer", true);
pSock.SysMessage( "You upgrade the outpost with a Healer." );
iUsed.SoundEffect( 0x1E7, true );
CreateHealer(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
case 4: // Banker
if( bankerCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 950)
{
iUsed.SetTag("Banker", true);
pSock.SysMessage( "You upgrade the outpost with a Banker." );
iUsed.SoundEffect( 0x1E7, true );
CreateBanker(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
case 5: // Anvil and Forge
if( anvilforgeCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 700)
{
iUsed.SetTag("AnvilForge", true);
pSock.SysMessage( "You upgrade the outpost with an anvil and forge." );
iUsed.SoundEffect( 0x3BA, true );
iUsed.SoundEffect( 0x2B, true );
CreateAnvilForge(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
break;
}
}
function CreateTent(pSock, iUsed)
{
var pUser = pSock.currentChar;
var newBaseMulti = CreateBaseMulti( 0x4070, iUsed.x, iUsed.y - 8, iUsed.z, iUsed.worldnumber, iUsed.instanceID );
newBaseMulti.StartTimer(AbandonTimer, 2, true);
newBaseMulti.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
newBaseMulti.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
if( !newBaseMulti || !newBaseMulti.IsMulti() )
{
pUser.SysMessage( "Unable to create base multi!" ); // Unable to create base multi!
}
}
function CreateHealer(pSock, iUsed)
{
var pUser = pSock.currentChar;
var mytable = CreateBlankItem( pUser.socket, pUser, 1, "table", 0xB35, 0x0, "ITEM", false );
mytable.x = iUsed.x - 2;
mytable.y = iUsed.y + 2;
mytable.z = iUsed.z;
mytable.StartTimer(AbandonTimer, 4, true);
mytable.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
mytable.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
var hSpawned = SpawnNPC( "Healer", iUsed.x - 2, iUsed.y + 3, iUsed.z, iUsed.worldnumber, iUsed.instanceID );
hSpawned.StartTimer(AbandonTimer, 3, true);
hSpawned.wandertype = 0;
hSpawned.frozen = true;
hSpawned.direction = 0;
hSpawned.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
hSpawned.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
}
function CreateBanker(pSock, iUsed)
{
var pUser = pSock.currentChar;
var mytable = CreateBlankItem( pUser.socket, pUser, 1, "table", 0xB35, 0x0, "ITEM", false );
mytable.x = iUsed.x + 3;
mytable.y = iUsed.y + 2;
mytable.z = iUsed.z;
mytable.StartTimer(AbandonTimer, 4, true);
mytable.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
mytable.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
var bSpawned = SpawnNPC( "Banker", iUsed.x + 3, iUsed.y + 3, iUsed.z, iUsed.worldnumber, iUsed.instanceID );
bSpawned.StartTimer(AbandonTimer, 4, true);
bSpawned.wandertype = 0;
bSpawned.frozen = true;
bSpawned.direction = 0;
bSpawned.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
bSpawned.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
}
function CreateAnvilForge(pSock, iUsed)
{
var pUser = pSock.currentChar;
var myforge = CreateDFNItem( pUser.socket, null, "0x0fb1", 1, "ITEM", false, 0 );
myforge.x = iUsed.x;
myforge.y = iUsed.y - 8;
myforge.z = iUsed.z;
myforge.StartTimer(AbandonTimer, 5, true);
myforge.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
myforge.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
var myanvil = CreateDFNItem( pUser.socket, null, "0x0faf", 1, "ITEM", false, 0 );
myanvil.x = iUsed.x;
myanvil.y = iUsed.y - 9;
myanvil.z = iUsed.z;
myanvil.StartTimer(AbandonTimer, 5, true);
myanvil.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
myanvil.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
}
function onTimer( myObJect, timerID )
{
var parentItem = CalcItemFromSer( parseInt( myObJect.GetTag( "parentItemSerial" )));
var parentChar = CalcCharFromSer( parseInt( myObJect.GetTag( "parentpUserSerial" )));
if ( !ValidateObject( myObJect ))
{
return;
}
switch (timerID)
{
case 1:
parentItem.SetTag("FireLight", false);
myObJect.Delete();
break;
case 2:
parentItem.SetTag( "Tent", false );
myObJect.Delete();
break;
case 3:
parentItem.SetTag( "Healer", false );
myObJect.Delete();
break;
case 4:
parentItem.SetTag( "Banker", false );
myObJect.Delete();
break;
case 5:
parentItem.SetTag( "AnvilForge", false );
myObJect.Delete();
break;
}
}
function onUseChecked(pUser, iUsed)
{
var socket = pUser.socket;
var fireOn = iUsed.GetTag("FireLight");
if ( fireOn == true )
{
OutPostGump(pUser, iUsed);
return;
}
if( pUser.skills.carpentry >= 600)
{
pUser.EmoteMessage( "You light the fire." );
iUsed.SetTag("FireLight", true);
var myFire = CreateBlankItem( pUser.socket, pUser, 1, "fire", 0xDE3, 0x0, "ITEM", false );
myFire.movable = 2;
myFire.x = iUsed.x;
myFire.y = iUsed.y;
myFire.z = iUsed.z + 2;
myFire.dir = 1;
myFire.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
myFire.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
myFire.StartTimer(AbandonTimer, 1, true);
OutPostGump(pUser, iUsed);
}
else
{
pUser.EmoteMessage( "A skilled camper could establish an outpost here." );
return;
}
}
function OutPostGump(pUser, iUsed)
{
var socket = pUser.socket;
socket.tempObj = iUsed;
var outpost = new Gump;
outpost.AddBackground(0, 0, 380, 380, 0x6DB);
outpost.AddHTMLGump(140, 20, 300, 35, false, false, "<basefont color=#ffffff>Secure Outpost</basefont>");
outpost.AddPicture(80, 15, 0xFAC);
outpost.AddPicture(80, 20, 0xDE3);
outpost.AddHTMLGump(50, 55, 300, 140, false, false, "<basefont color=#ffffff>Outposts are upgradable encampments that can be outfitted with various utilities that benefit all passing adventurers.<br><br>Any adventurer with enough skill in Camping can establish or upgrade these outposts.</basefont>");
outpost.AddButton(75, 208, 0xFA5, 0xFA7, 1, 0, 1);
outpost.AddHTMLGump(110, 210, 110, 70, false, false, "<basefont color=#ffffff>MARK LOCATION</basefont>");
outpost.AddButton(75, 233, 0xFA5, 0xFA7, 1, 0, 2);
outpost.AddHTMLGump(110, 235, 110, 70, false, false, "<basefont color=#ffffff>BUILD TENT</basefont>");
outpost.AddButton(75, 258, 0xFA5, 0xFA7, 1, 0, 3);
outpost.AddHTMLGump(110, 260, 110, 70, false, false, "<basefont color=#ffffff>ADD HEALER</basefont>");
outpost.AddButton(75, 283, 0xFA5, 0xFA7, 1, 0, 4);
outpost.AddHTMLGump(110, 285, 110, 70, false, false, "<basefont color=#ffffff>ADD BANKER</basefont>");
outpost.AddButton(75, 308, 0xFA5, 0xFA7, 1, 0, 5);
outpost.AddHTMLGump(110, 310, 110, 70, false, false, "<basefont color=#ffffff>BUILD ANVIL & FORGE</basefont>");
outpost.Send(pUser);
outpost.Free();
}
function onGumpPress(pSock, pButton, gumpData)
{
var pUser = pSock.currentChar;
iUsed = pSock.tempObj;
var tentCreated = iUsed.GetTag("Tent");
var healerCreated = iUsed.GetTag("Healer");
var bankerCreated = iUsed.GetTag("Banker");
var anvilforgeCreated = iUsed.GetTag("AnvilForge");
switch (pButton)
{
case 0:
break;
case 1:
if( pUser.skills.carpentry >= 1000)
{
pSock.SysMessage( "Select a camping map." );
break;
}
else
{
pSock.SysMessage( "You do not have sufficient skill in camping to do that." );
OutPostGump(pUser, iUsed);
break;
}
case 2: // tent
if ( tentCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 800)
{
iUsed.SetTag("Tent", true);
pSock.SysMessage( "You upgrade the outpost with a tent." );
iUsed.SoundEffect( 0x23D, true );
CreateTent(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
case 3: // Healer
if ( healerCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 900)
{
iUsed.SetTag("Healer", true);
pSock.SysMessage( "You upgrade the outpost with a Healer." );
iUsed.SoundEffect( 0x1E7, true );
CreateHealer(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
case 4: // Banker
if( bankerCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 950)
{
iUsed.SetTag("Banker", true);
pSock.SysMessage( "You upgrade the outpost with a Banker." );
iUsed.SoundEffect( 0x1E7, true );
CreateBanker(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
case 5: // Anvil and Forge
if( anvilforgeCreated == true )
{
pSock.SysMessage( "The outpost already has that upgrade." );
OutPostGump(pUser, iUsed);
break;
}
if( pUser.skills.carpentry >= 700)
{
iUsed.SetTag("AnvilForge", true);
pSock.SysMessage( "You upgrade the outpost with an anvil and forge." );
iUsed.SoundEffect( 0x3BA, true );
iUsed.SoundEffect( 0x2B, true );
CreateAnvilForge(pSock, iUsed);
OutPostGump(pUser, iUsed);
break;
}
else
{
pSock.SysMessage( "Doing that would require greater skill in Camping." );
OutPostGump(pUser, iUsed);
break;
}
break;
}
}
function CreateTent(pSock, iUsed)
{
var pUser = pSock.currentChar;
var newBaseMulti = CreateBaseMulti( 0x4070, iUsed.x, iUsed.y - 8, iUsed.z, iUsed.worldnumber, iUsed.instanceID );
newBaseMulti.StartTimer(AbandonTimer, 2, true);
newBaseMulti.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
newBaseMulti.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
if( !newBaseMulti || !newBaseMulti.IsMulti() )
{
pUser.SysMessage( "Unable to create base multi!" ); // Unable to create base multi!
}
}
function CreateHealer(pSock, iUsed)
{
var pUser = pSock.currentChar;
var mytable = CreateBlankItem( pUser.socket, pUser, 1, "table", 0xB35, 0x0, "ITEM", false );
mytable.x = iUsed.x - 2;
mytable.y = iUsed.y + 2;
mytable.z = iUsed.z;
mytable.StartTimer(AbandonTimer, 4, true);
mytable.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
mytable.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
var hSpawned = SpawnNPC( "Healer", iUsed.x - 2, iUsed.y + 3, iUsed.z, iUsed.worldnumber, iUsed.instanceID );
hSpawned.StartTimer(AbandonTimer, 3, true);
hSpawned.wandertype = 0;
hSpawned.frozen = true;
hSpawned.direction = 0;
hSpawned.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
hSpawned.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
}
function CreateBanker(pSock, iUsed)
{
var pUser = pSock.currentChar;
var mytable = CreateBlankItem( pUser.socket, pUser, 1, "table", 0xB35, 0x0, "ITEM", false );
mytable.x = iUsed.x + 3;
mytable.y = iUsed.y + 2;
mytable.z = iUsed.z;
mytable.StartTimer(AbandonTimer, 4, true);
mytable.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
mytable.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
var bSpawned = SpawnNPC( "Banker", iUsed.x + 3, iUsed.y + 3, iUsed.z, iUsed.worldnumber, iUsed.instanceID );
bSpawned.StartTimer(AbandonTimer, 4, true);
bSpawned.wandertype = 0;
bSpawned.frozen = true;
bSpawned.direction = 0;
bSpawned.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
bSpawned.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
}
function CreateAnvilForge(pSock, iUsed)
{
var pUser = pSock.currentChar;
var myforge = CreateDFNItem( pUser.socket, null, "0x0fb1", 1, "ITEM", false, 0 );
myforge.x = iUsed.x;
myforge.y = iUsed.y - 8;
myforge.z = iUsed.z;
myforge.StartTimer(AbandonTimer, 5, true);
myforge.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
myforge.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
var myanvil = CreateDFNItem( pUser.socket, null, "0x0faf", 1, "ITEM", false, 0 );
myanvil.x = iUsed.x;
myanvil.y = iUsed.y - 9;
myanvil.z = iUsed.z;
myanvil.StartTimer(AbandonTimer, 5, true);
myanvil.SetTag( "parentpUserSerial", ( pUser.serial ).toString() );
myanvil.SetTag( "parentItemSerial", ( iUsed.serial ).toString() );
}
function onTimer( myObJect, timerID )
{
var parentItem = CalcItemFromSer( parseInt( myObJect.GetTag( "parentItemSerial" )));
var parentChar = CalcCharFromSer( parseInt( myObJect.GetTag( "parentpUserSerial" )));
if ( !ValidateObject( myObJect ))
{
return;
}
switch (timerID)
{
case 1:
parentItem.SetTag("FireLight", false);
myObJect.Delete();
break;
case 2:
parentItem.SetTag( "Tent", false );
myObJect.Delete();
break;
case 3:
parentItem.SetTag( "Healer", false );
myObJect.Delete();
break;
case 4:
parentItem.SetTag( "Banker", false );
myObJect.Delete();
break;
case 5:
parentItem.SetTag( "AnvilForge", false );
myObJect.Delete();
break;
}
}