Jump to content
Sign in to follow this  
Scotticus

[PI] Basic Nex Monster

Recommended Posts

[B]Picture:[/B]

[IMG]http://screensnapr.com/e/uKhVzr.png[/IMG]

[B]Note: This is Nex (Level 1001) Without attack/death animations.. You can figure them out yourself..

Before you start, Add all the client sided code.. Then if you don't want Nex to drain prayer/be aggressive or poison you then skip to the[COLOR=#008000] GREEN TEXT [/COLOR]
[/B]
[COLOR=#ff0000][B][SIZE=4]**CLIENT SIDED**[/SIZE]

[/B][/COLOR][B]Add the following ints to your "EntityDef.java"

[CODE]if(i == 6032) {
stream.currentOffset = streamIndices[630];
entitydef.aByte68 = 1;
entitydef.readValues(stream);
entitydef.itemActions = new String[5];
entitydef.itemActions[1] = "Attack";
entitydef.anIntArray94 = new int[1];
entitydef.anIntArray94[0] = 62717;
entitydef.name = "Nex";
entitydef.combatLevel = 1001;
entitydef.description = "Even the gods fear it.".getBytes();
}
[/CODE]

Download this: [/B][URL]http://up.ht/qiyrAJ[/URL][B]

Virus Scan: [/B][URL="http://www.virustotal.com/file-scan/report.html?id=270526f8eca182de8e9d51f5afc792fb06724b32d15d5c9be003e1966619917d-1318109585"]http://www.virustotal.com/file-scan/report.html?id=270526f8eca182de8e9d51f5afc792fb06724b32d15d5c9be003e1966619917d-1318109585
[/URL]
[B]Place the .dat file within your cache/raw folder[/B]

[SIZE=4][COLOR=#ff0000][B]**SERVER SIDED**[/B][/COLOR]
[/SIZE]
[B]You can leave this as it is, But I have taken the Strykewyrm Prayer drain, And also added poisoning to Nex.. This part is entirely optional

Open up "NPCHandler.java" [QUOTE]\src\server\model\npcs[/QUOTE]

Look for [QUOTE]case 9465:[/QUOTE]

Change the entire case to:

[CODE][B]case 9465:
[/B] random = Misc.random(2);
if (random == 0 || random == 1)
npcs[i].attackType = 0;
else {
c.playerLevel[5] -= (c.playerLevel[5] * .22);
npcs[i].attackType = 2;
c.sendMessage("Your prayer points have been drained!");
c.getPA().refreshSkill(5);
}
[B] break;[/B]
[/CODE]

Now look for [QUOTE]case 9467:[/QUOTE][/B]

[B]Below the[/B] [B]last [/B][CODE] }
}[/CODE]

[B]Add this:[/B]

[CODE]case 6032:
random = Misc.random(2);
if (random == 0 || random == 1)
npcs[i].attackType = 0;
else {
if(c.poisonDamage <= 0) {
c.getPA().appendPoison(15);
npcs[i].attackType = 2;
c.sendMessage("Nex has poisoned you!");
}
}
[/CODE]

[B][COLOR=#ff0000]If you don't have any of the cases I named, You do not have styrkewyrms added.. So skip the above.[/COLOR]

If you want to make Nex Aggressive follow these steps:

Still within "NPCHandler.java" Search for [CODE]public boolean isAggressive(int i) {[/CODE]

Within the cases listed below add: [CODE]case 6032:[/CODE]

Make sure you add it below: [CODE]switch (npcs[i].npcType) {[/CODE]

[COLOR=#ff0000]Nearly there.. Remember all these steps are optional.. You do not NEED To add them..

For max hit calculations.. Figure that out yourself.. Here are mine[/COLOR]

First search: [CODE]public int getMaxHit(int i) {[/CODE]

Add below: [CODE]switch (npcs[i].npcType) {[/CODE]

[CODE]case 6032:
if (npcs[i].attackType == 0)
return 70;
else
if (npcs[i].attackType == 1)
return 60;
else
if (npcs[i].attackType == 2)
return 65;
[/CODE]

[COLOR=#008000]Last but not least..

In your source go to: [/COLOR][QUOTE]Data\cfg[/QUOTE][/B][COLOR=#008000]

[B]Open "spawn-config.cfg"

Here is my spawn code:

[/B][/COLOR][B][CODE]spawn = 6032 3319 9798 0 1 85 950 950 1 Nex[/CODE]

[SIZE=3][COLOR=#008000][B]You are DONE! Enjoy![/B][/COLOR][/SIZE][/B] Edited by Scotticus

Share this post


Link to post
Share on other sites
Great tut! Might possibly use this! Thanks for releasing to the Runelocus community.

Share this post


Link to post
Share on other sites
I'm assuming this doesn't come with the attack/defense and death emotes?

(I saw that you said to figure it out ourselves. I'm just not sure if you want us to find them ourselves, or if you have provided them, and told us to figure out how to add them ourselves.)

Share this post


Link to post
Share on other sites
[quote name='TimeBroken']I'm assuming this doesn't come with the attack/defense and death emotes?

(I saw that you said to figure it out ourselves. I'm just not sure if you want us to find them ourselves, or if you have provided them, and told us to figure out how to add them ourselves.)[/QUOTE]

This does not include them

Share this post


Link to post
Share on other sites
[IMG]http://i52.tinypic.com/2nte3pc.png[/IMG]

why is my nex so small?

Share this post


Link to post
Share on other sites
Anyone got ideas on the Attack/Death anims? :P

Share this post


Link to post
Share on other sites
i dont know if your allowed to post rs links here but heres the anims.. [url]http://www.rune-server.org/runescape-development/rs2-client/snippets/335850-nex-13-animations-3.html[/url]

Share this post


Link to post
Share on other sites
[quote name='b44manz'][IMG]http://i52.tinypic.com/2nte3pc.png[/IMG]

why is my nex so small?[/QUOTE]

You set the height wrong.

Share this post


Link to post
Share on other sites
can you tell me above what method to add those ints in entitydef.java?

[code]
import java.io.PrintStream;
import sign.signlink;

public final class EntityDef
{

public static int NPCAMOUNT = 11599;
public int anInt55;
public static int anInt56;
public int anInt57;
public int anInt58;
public int anInt59;
public static Stream stream;
public int combatLevel;
public final int anInt64 = 1834;
public String name;
public String itemActions[];
public int anInt67;
public byte aByte68;
public int anIntArray70[];
public static int streamIndices[];
public int anIntArray73[];
public int anInt75;
public int anIntArray76[];
public int anInt77;
public long interfaceType;
public int anInt79;
public static EntityDef cache[];
public static client clientInstance;
public int anInt83;
public boolean aBoolean84;
public int anInt85;
public int anInt86;
public boolean aBoolean87;
public int childrenIDs[];
public byte description[];
public int anInt91;
public int anInt92;
public boolean aBoolean93;
public int anIntArray94[];
public static MRUNodes mruNodes = new MRUNodes(30);

public static EntityDef forID(int i)
{
for(int j = 0; j < 20; j++)
{
if(cache[j].interfaceType == (long)i)
{
return cache[j];
}
}

anInt56 = (anInt56 + 1) % 20;
EntityDef entitydef = cache[anInt56] = new EntityDef();
stream.currentOffset = streamIndices[i];
entitydef.interfaceType = i;
entitydef.readValues(stream);
return entitydef;
}

public Model method160()
{
if(childrenIDs != null)
{
EntityDef entitydef = method161();
if(entitydef == null)
{
return null;
} else
{
return entitydef.method160();
}
}
if(anIntArray73 == null)
{
return null;
}
boolean flag = false;
for(int i = 0; i < anIntArray73.length; i++)
{
if(!Model.method463(anIntArray73[i]))
{
flag = true;
}
}

if(flag)
{
return null;
}
Model amodel[] = new Model[anIntArray73.length];
for(int j = 0; j < anIntArray73.length; j++)
{
amodel[j] = Model.method462(anIntArray73[j]);
}

Model model;
if(amodel.length == 1)
{
model = amodel[0];
} else
{
model = new Model(amodel.length, amodel);
}
if(anIntArray76 != null)
{
for(int k = 0; k < anIntArray76.length; k++)
{
model.method476(anIntArray76[k], anIntArray70[k]);
}

}
return model;
}

public EntityDef method161() {
try {
int j = -1;
if(anInt57 != -1)
{
VarBit varBit = VarBit.cache[anInt57];
int k = varBit.anInt648;
int l = varBit.anInt649;
int i1 = varBit.anInt650;
int j1 = client.anIntArray1232[i1 - l];
j = clientInstance.variousSettings[k] >> l & j1;
} else
if(anInt59 != -1) {
j = clientInstance.variousSettings[anInt59];
}
if(j < 0 || j >= childrenIDs.length || childrenIDs[j] == -1) {
return null;
} else {
return forID(childrenIDs[j]);
}
} catch (Exception e) {
return null;
}
}

public static byte[] getData(String s)
{
return FileOperations.ReadFile(s);
}

public static void unpackConfig(NamedArchive namedarchive)
{
stream = new Stream(getData((new StringBuilder()).append(signlink.findcachedir()).append("npc.dat").toString()));
Stream bytebuffer = new Stream(getData((new StringBuilder()).append(signlink.findcachedir()).append("npc.idx").toString()));
int i = bytebuffer.readUnsignedWord();
System.out.println((new StringBuilder()).append("602 NPC Amount: ").append(i).toString());
streamIndices = new int[i];
int j = 2;
for(int k = 0; k < i; k++)
{
streamIndices[k] = j;
j += bytebuffer.readUnsignedWord();
}

cache = new EntityDef[20];
for(int l = 0; l < 20; l++)
{
cache[l] = new EntityDef();
}

}

public static void nullLoader()
{
mruNodes = null;
streamIndices = null;
cache = null;
stream = null;
}

public Model method164(int i, int j, int ai[])
{
if(childrenIDs != null)
{
EntityDef entitydef = method161();
if(entitydef == null)
{
return null;
} else
{
return entitydef.method164(i, j, ai);
}
}
Model model = (Model)mruNodes.insertFromCache(interfaceType);
if(model == null)
{
boolean flag = false;
for(int k = 0; k < anIntArray94.length; k++)
{
if(!Model.method463(anIntArray94[k]))
{
flag = true;
}
}

if(flag)
{
return null;
}
Model amodel[] = new Model[anIntArray94.length];
for(int l = 0; l < anIntArray94.length; l++)
{
amodel[l] = Model.method462(anIntArray94[l]);
}

if(amodel.length == 1)
{
model = amodel[0];
} else
{
model = new Model(amodel.length, amodel);
}
if(anIntArray76 != null)
{
for(int i1 = 0; i1 < anIntArray76.length; i1++)
{
model.method476(anIntArray76[i1], anIntArray70[i1]);
}

}
model.method469();
model.method479(64 + anInt85, 850 + anInt92, -30, -50, -30, true);
mruNodes.removeFromCache(model, interfaceType);
}
Model model1 = Model.aModel_1621;
model1.method464(model, Class36.method532(j) & Class36.method532(i));
if(j != -1 && i != -1)
{
model1.method471(ai, i, j);
} else
if(j != -1)
{
model1.method470(j);
}
if(anInt91 != 128 || anInt86 != 128)
{
model1.method478(anInt91, anInt91, anInt86);
}
model1.method466();
model1.anIntArrayArray1658 = (int[][])null;
model1.anIntArrayArray1657 = (int[][])null;
if(aByte68 == 1)
{
model1.aBoolean1659 = true;
}
return model1;
}

public void readValues(Stream bytebuffer)
{
do
{
int i = bytebuffer.readUnsignedByte();
if(i == 0)
{
return;
}
if(i == 1)
{
int j = bytebuffer.readUnsignedByte();
anIntArray94 = new int[j];
int j1 = 0;
while(j1 < j)
{
anIntArray94[j1] = bytebuffer.readUnsignedWord();
j1++;
}
} else
if(i == 2)
{
name = bytebuffer.readString();
} else
if(i == 3)
{
description = bytebuffer.readBytes();
} else
if(i == 12)
{
aByte68 = bytebuffer.readSignedByte();
} else
if(i == 13)
{
anInt77 = bytebuffer.readUnsignedWord();
} else
if(i == 14)
{
anInt67 = bytebuffer.readUnsignedWord();
} else
if(i == 17)
{
anInt67 = bytebuffer.readUnsignedWord();
anInt58 = bytebuffer.readUnsignedWord();
anInt83 = bytebuffer.readUnsignedWord();
anInt55 = bytebuffer.readUnsignedWord();
if(anInt67 == 65535)
{
anInt67 = -1;
}
if(anInt58 == 65535)
{
anInt58 = -1;
}
if(anInt83 == 65535)
{
anInt83 = -1;
}
if(anInt55 == 65535)
{
anInt55 = -1;
}
} else
if(i >= 30 && i < 40)
{
if(itemActions == null)
{
itemActions = new String[5];
}
itemActions[i - 30] = bytebuffer.readString();
if(itemActions[i - 30].equalsIgnoreCase("hidden"))
{
itemActions[i - 30] = null;
}
} else
if(i == 40)
{
int k = bytebuffer.readUnsignedByte();
anIntArray70 = new int[k];
anIntArray76 = new int[k];
int k1 = 0;
while(k1 < k)
{
anIntArray76[k1] = bytebuffer.readUnsignedWord();
anIntArray70[k1] = bytebuffer.readUnsignedWord();
k1++;
}
} else
if(i == 60)
{
int l = bytebuffer.readUnsignedByte();
anIntArray73 = new int[l];
int l1 = 0;
while(l1 < l)
{
anIntArray73[l1] = bytebuffer.readUnsignedWord();
l1++;
}
} else
if(i == 90)
{
bytebuffer.readUnsignedWord();
} else
if(i == 91)
{
bytebuffer.readUnsignedWord();
} else
if(i == 92)
{
bytebuffer.readUnsignedWord();
} else
if(i == 93)
{
aBoolean87 = false;
} else
if(i == 95)
{
combatLevel = bytebuffer.readUnsignedWord();
} else
if(i == 97)
{
anInt91 = bytebuffer.readUnsignedWord();
} else
if(i == 98)
{
anInt86 = bytebuffer.readUnsignedWord();
} else
if(i == 99)
{
aBoolean93 = true;
} else
if(i == 100)
{
anInt85 = bytebuffer.readSignedByte();
} else
if(i == 101)
{
anInt92 = bytebuffer.readSignedByte() * 5;
} else
if(i == 102)
{
anInt75 = bytebuffer.readUnsignedWord();
} else
if(i == 103)
{
anInt79 = bytebuffer.readUnsignedWord();
} else
if(i == 106)
{
anInt57 = bytebuffer.readUnsignedWord();
if(anInt57 == 65535)
{
anInt57 = -1;
}
anInt59 = bytebuffer.readUnsignedWord();
if(anInt59 == 65535)
{
anInt59 = -1;
}
int i1 = bytebuffer.readUnsignedByte();
childrenIDs = new int[i1 + 1];
int i2 = 0;
while(i2 <= i1)
{
childrenIDs[i2] = bytebuffer.readUnsignedWord();
if(childrenIDs[i2] == 65535)
{
childrenIDs[i2] = -1;
}
i2++;
}
} else
if(i == 107)
{
aBoolean84 = false;
}
} while(true);
}

public EntityDef()
{
anInt55 = -1;
anInt57 = -1;
anInt58 = -1;
anInt59 = -1;
combatLevel = -1;
anInt67 = -1;
aByte68 = 1;
anInt75 = -1;
anInt77 = -1;
interfaceType = -1L;
anInt79 = 32;
anInt83 = -1;
aBoolean84 = true;
anInt86 = 128;
aBoolean87 = true;
anInt91 = 128;
aBoolean93 = false;
}

}
[/code]

Share this post


Link to post
Share on other sites
[quote name='Scotticus']You set the height wrong.[/QUOTE]

thankyou where do i fix height please

Share this post


Link to post
Share on other sites
Sign in to follow this  

×