Help with Shuriken script?

its the npc enemy thats built in to graal, im just trying to add some triggeractions and they work they just dont kill the guy…

May have to be because the default baddies doesn’t work very well with custom stuff. I think you have to write your own.

You may have to look at what happens when he gets hit by a sword and use the stuff in your custom action

___Merged doublepost__________________

Merged your threads too, spammer

well i tried what u said arget, i got him to die and all taht but he wouldnt respawn.

please someone help me fix this and ill just go away and never come back

can you post the entire script of what you have and i will look at it, and you don’t have to go away but it would be nice if you tried stuff yourself before asking for help every time you hit a snag

xD Don’t go away, rofl.

sorry… fell asleep lol here it is…

[CODE]// Graal2002 NPC by Stefan Knorr
if (created) {
// Initialize the attributes
showcharacter;
setcharprop #3,head4.png;
setcharprop #C0,orange;
setcharprop #C1,darkred;
setcharprop #C2,black;
setcharprop #C3,darkred;
setcharprop #C4,black;
setcharprop #n,NicknamegoesHere;
setcharprop #2,shield1.gif;
shieldpower = 1;
dir = 2;
swordpower = 1;
hurtdx = 0;
hurtdy = 0;
hearts = 3;
}
if (playerenters || wasthrown) {
// Initialize the this. variables
message;
this.huntspeed = 0.4;
timeout = 0.05;
this.walkmode = 1;
if (wasthrown && this.walkmode>1) this.walkmode = 1;
this.x1 = 0;
this.x2 = 63;
this.y1 = 0;
this.y2 = 63;
this.speed = 0.3;
if (hearts<=0) {
this.mode = 5; // RESPAWN
this.runcounter = 0;
timeout = 5;
} else {
this.mode = 0;
setcharani idle,;
this.runcounter = int(random(10,40));
}
}

// Walking stuff
if (timeout && this.mode==0) { // WALKING
setcharani walk,;
newx = x + vecx(dir)*this.speed;
newy = y + vecy(dir)*this.speed;
this.runcounter–;
if (this.walkmode==1) { // RANDOM
if (this.runcounter>0) {
testx = newx + 1.5 + vecx(dir);
testy = newy + 2 + vecy(dir);
if (onwall(testx,testy)) {
dir = (dir+2)%4;
this.runcounter = int(random(0,60));
} else {
x = newx;
y = newy;
}
} else {
this.runcounter = int(random(10,40));
dir = (dir+1+int(random(0,2))*2)%4;
}
} else if (this.walkmode==2) { // LEFTRIGHT
if (dir!=1 && dir!=3) dir = 3;
else {
x = newx;
y = newy;
if ((dir==1 && x<=this.x1) || (dir==3 && x>=this.x2))
dir = (dir+2)%4;
}
} else if (this.walkmode==3) { // UPDOWN
if (dir!=0 && dir!=2) dir = 2;
else {
x = newx;
y = newy;
if ((dir==0 && y<=this.y1) || (dir==2 && y>=this.y2))
dir = (dir+2)%4;
}
} else if (this.walkmode==4) { // RECTANGLE
x = newx;
y = newy;
if ((dir==0 && y<=this.y1) || (dir==1 && x<=this.x1) ||
(dir==2 && y>=this.y2) || (dir==3 && x>=this.x2))
dir = (dir+3)%4;
}
if (this.walkmode>1 && this.runcounter<=0)
this.runcounter = 20;
message;
timeout = 0.05;
}

// Sword attacking stuff
if (timeout && (this.mode==0 || this.mode==2)) {
// Look for players
mindist = 1000;
for (i=0; i<playerscount; i++)
if (players[i].hearts>0 && players[i].id>=0) {
dx = players[i].x - x;
dy = players[i].y - y;
if (abs(dx)>abs(dy)) {
if (dx>0) pdir=3; else pdir=1;
} else {
if (dy>0) pdir=2; else pdir=0;
}
if (pdir==dir) {
dist = (dxdx+dydy)^0.5;
if (dist<mindist) {
cansee = 1;
if (abs(dx)>abs(dy)) k = int(abs(dx));
else k = int(abs(dy));
for (j=0; j<=k-2; j++)
if (onwall(x+1.5+dxj/k,y+2+dyj/k)) cansee = 0;
if (cansee!=0) {
mindist = dist;
aimplayer = i;
this.aimx = players[i].x;
this.aimy = players[i].y;
}
}
}
}
if (mindist<=3) {
this.runcounter = -1;
this.mode = 3; // SLAYING
setcharani sword,;
timeout = 0.05;
} else if (mindist<20) {
if (this.mode!=2) message Stop!;
this.runcounter = 100;
this.mode = 2; // HUNTING
} else timeout = 0.05;
}
if (timeout && this.mode==3) { // SLAYING
this.runcounter++;
if (this.runcounter>4) {
this.runcounter = 100;
this.mode = 2; // HUNTING
setcharani idle,;
}
message;
timeout = 0.05;
}
if (timeout && this.mode==2) { // HUNTING
setcharani walk,;
this.runcounter–;
if (this.runcounter>0 && aimplayer<playerscount && players[aimplayer].hearts>0) {
// Get new direction
dx = players[aimplayer].x-x;
dy = players[aimplayer].y-y;
if (abs(dx)>abs(dy)) {
if (dx>0) dir=3; else dir=1;
} else {
if (dy>0) dir=2; else dir=0;
}

// Test if we can do a step
dx = this.aimx-x;
dy = this.aimy-y;
if (abs(dx)<=1 && abs(dy)<=1) {
  this.aimx = players[aimplayer].x;;
  this.aimy = players[aimplayer].y;
  dx = this.aimx-x;
  dy = this.aimy-y;
}
if (abs(dx)>abs(dy)) {
  if (dx>0) testdir=3; else testdir=1;
} else {
  if (dy>0) testdir=2; else testdir=0;
}
len = (dx*dx+dy*dy)^0.5;
addx = (dx/len)*this.huntspeed;
addy = (dy/len)*this.huntspeed;
testx = x + 1.5;
testy = y + 2;
if (!onwall(testx+addx,testy+addy)) {
  // Do a step
  x += addx;
  y += addy;

} else if (!onwall(testx+addx,testy)) x += addx;
else if (!onwall(testx,testy+addy)) y += addy;
} else {
this.mode = 0; // WALKING
this.walkmode = 1; // RANDOM
this.runcounter = int(random(10,40));
setcharani idle,;
dir = (dir+2)%4;
message;
}
timeout = 0.05;
}

// Hurting stuff
if(actionshurikenhurt){hearts -= 2; setcharani hurt,;}
if(actionbigshurikenhurt){hearts -= 6; setcharani hurt,;}
if(actionprojectile) {hearts -=3; setcharani hurt,;}
if(actionmegidhurt) { i = random(0,100);
if (i>0&&!i>49) hearts -=1;
else if (i>50&&!i>89) hearts -=5;
else if (i>98.5) hearts-=1000;}

if (washit && this.mode!=1 && hearts>0) {
dx = x-playerx;
dy = y-playery;
len = (dxdx+dydy)^0.5;
hurtdx = dx/len;
hurtdy = dy/len;
setcharani hurt,;
hideimg 1;
hearts -= playerswordpower/2;
}
if ((exploded || waspelt || wasshot) &&
this.mode!=1 && hearts>0 && isleader) {
hurtdx = -vecx(dir)0.2;
hurtdy = -vecy(dir)0.2;
setcharani hurt,;
if (peltwithsign || peltwithvase || peltwithstone || peltwithnpc) hearts -= 1;
else if (peltwithblackstone) hearts -= 1.5;
else hearts -= 0.5;
}
if ((hurtdx!=0 || hurtdy!=0) && isleader && this.mode!=4) {
this.hurtdx = hurtdx;
this.hurtdy = hurtdy;
hurtdx = 0;
hurtdy = 0;
if (hearts<=0) {
this.mode = 4; // DYING
message;
setcharani dead,;
timeout = 1.2;
} else {
this.mode = 1; // HURTED
this.runcounter = 20;
setcharani hurt,;
timeout = 0.05;
}
}
if (timeout && this.mode==1) { // HURTED
this.runcounter–;
if (this.runcounter>10) {
testx = x + 1.5 + this.hurtdx
2;
testy = y + 2 + this.hurtdy
2;
if (!onwall(testx,testy)) {
x += this.hurtdx;
y += this.hurtdy;
}
}
if (this.runcounter<=0) {
if (swordpower>0) this.mode = 2; // HUNTING
else this.mode = 0; // WALKING
this.runcounter = 100;
setcharani idle,;
}
timeout = 0.05;
}
if (timeout && this.mode==5) { // RESPAWN
this.mode = 0;
this.runcounter = int(random(10,40));
timeout = 0.05;
hearts = 3;
setcharani idle,;
this.walkmode = 1;
}
if (timeout && this.mode==4) { // DYING
i = random(0,100);
this.gainexp = 120-strtofloat(#s(client.level))(1000.1);
if (this.gainexp > 0) {
setstring client.exp,#v(strtofloat(#s(client.exp))+strtofloat(#v(this.gainexp)));
setplayerprop #c,XP + #v(this.gainexp);
if (i<10) lay greenrupee;
else if (i<15) lay bluerupee;
else if (i<30) lay heart;
this.mode = 5; // RESPAWN
timeout = 90;
}
}
[/CODE]

If you could while u edit that show me my error so i can try to understand a little better…

Edit : I bolded where the trigger actions were so you didnt have to look through lol

Edit: uh wow i feel downright stupid, heres an idea instead of just taking the hearts away why dont we add a check that if the hearts are 0 after this triggeraction then the npc dies… wow anywayssss i think this would be the answer im looking for…

instead of if(actionprojectile) {hearts -=3; setcharani hurt,;}

i should put a if(actionprojectile) { if(hearts>0){ hearts -=3; setcharani hurt,; if (hearts<=0) { this.mode = 4; // DYING message; setcharani dead,; timeout = 1.2; } } }

… wow that was easy i guess i just wasnt looking and depending on u guys too much :stuck_out_tongue: