Graal Forums  

Go Back   Graal Forums > Development Forums > NPC Scripting > New Scripting Engine (GS2)
FAQ Members List Calendar Today's Posts

 
 
Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 05-01-2008, 03:47 PM
Robin Robin is offline
The secret of NIMH
Robin's Avatar
Join Date: Apr 2005
Location: Wales, UK
Posts: 515
Robin will become famous soon enough
Send a message via AIM to Robin
A little bit of bench

Okay, so, long time, haven't done much coding since I've been gone, so prepare to be quite shocked at how much I really suck.

PHP Code:
function findSeat() {
  
this.point.this.pos[1]; // Current Player.x
  
this.point.this.pos[2]; // Current Player.y
  
temp.min 400// arbitrary big number number
  
this.seat = {};
  for (
temp.int(this.point.x-20); temp.int(this.point.x+20); temp.x++;) {
    for (
temp.int(this.point.y-20); temp.int(this.point.y+20); temp.y++;) {
      if (
tiles[temp.x,temp.y] == 681) { // Find top left hand corner of bench
        
temp.dx temp.x-this.point.x;
        
temp.dy temp.y-this.point.y;
        
temp.dist = ((temp.dx 2) - (temp.dy 2))^0.5// Get distance
        
if (!(testnpc(temp.x,temp.y) > 0) && !(testplayer(temp.x,temp.y) > 0)) { // Only allow if there's no one already sitting there
          
if (temp.dist<temp.min) {
            
temp.min temp.dist;
            
this.seat = {temp.x,temp.y};
          }
        }
      }
    }
  }
  if (
temp.min == 400) { // If the criteria has not been met
    
return false;
  } else {
    return 
this.seat// Otherwise return a seat!
  
}

So essentially I have an NPC walking around with me, when I stop, it finds a seat, and goes over to it and sits there.

The problem I'm having is (apart from move not working like I thought it would and hardly 'moving' at all, looks more like warping, and sometimes it moves smoothly :/) that when the NPC calls this command, it will return a different bench each time called without fail, it almost looks as if it's cycling through each bench and whichever is next in line, it warps/walks to.

Any ideas where I'm messing up?

EDIT: Whole NPC included for completion's sake.

PHP Code:
function onCreated()
{
  
this.setcharani("idle""");
  
this.body "body5.png";
  
this.head "head26.png";
  
this.following "Robin";
  
this.master "Robin";
  
this.moving false;
  
showcharacter();
  
setTimer(5);
}

function 
onTimeout() {
  if (
this.master == this.following)
  {
    
this.chat "";
  }
  else
  {
    
this.chat "I am following you for the pleasure of " this.master ", My master!";
  }
  
temp.isloggedin false;
  
with(findplayer(this.following)) {
    
this.pos = {player.level,player.x-vecx(player.dir)*3,player.y-vecy(player.dir)*3,player.dir};
  }
  
with(findplayer(this.master)) {
    
temp.isloggedin true;
    if (
player.chat.starts("slave!"))
      
temp.chat player.chat;
  }
  if (
temp.chat.length() > 0)
  {
    
temp.tokens temp.chat.tokenize();
    if (
temp.tokens[1in {"go""come"}) {
      
this.following temp.tokens[3];
    }
  }
  if (
this.pos[0] == this.level)
  {
    if (
this.pos[1] != this.oldpos[1] || this.pos[2] != this.oldpos[2] || this.pos[3] != this.oldpos[3])
    {
      
temp.dx this.pos[1]-this.x;
      
temp.dy this.pos[2]-this.y;
      
temp.dist = ((temp.dx 2) - (temp.dy 2))^0.5;
      
temp.speed temp.dist*0.1/*temp.dist*0.1 > 4.5 ? 4.5 : temp.dist*0.1;*/
      
this.move(temp.dx,temp.dy,temp.speed,16+8);
      
this.moving true;
    }
    else
    {
      
temp.seat findSeat();
      if (
temp.seat != false)
      {
        
temp.dx temp.seat[0]-0.5-this.x;
        
temp.dy temp.seat[1]-0.5-this.y;
        
temp.dist = ((temp.dx 2) - (temp.dy 2))^0.5;
        
//this.chat = temp.dist;
        
temp.speed temp.dist*0.1/*temp.dist*0.1 > 4.5 ? 4.5 : temp.dist*0.1;*/
        
this.move(temp.dx,temp.dy,temp.speed,16+8);
        
this.moving true;
      }
    }
  }
  else
  {
    if (
temp.isloggedin == true)
    {
      
this.warpto(this.pos[0],this.pos[1],this.pos[2]);
    }
    else
    {
      
this.warpto("server.nw",30.5,30);
      
setTimer(300);
      return;
    }
  }

  
attr[9] = this.moving;

  
this.oldpos this.pos;
  if (
this.moving == false)
    
setTimer(5);
}

function 
onMovementFinished() {
  
this.moving false;
  
attr[9] = this.moving;
  
setTimer(5);
}

function 
findSeat() {
  
this.point.this.pos[1];
  
this.point.this.pos[2];
  
temp.min 400;
  
this.seat = {};
  for (
temp.int(this.point.x-20); temp.int(this.point.x+20); temp.x++;)
  {
    for (
temp.int(this.point.y-20); temp.int(this.point.y+20); temp.y++;)
    {
      if (
tiles[temp.x,temp.y] == 681)
      {
        
temp.dx temp.x-this.point.x;
        
temp.dy temp.y-this.point.y;
        
temp.dist = ((temp.dx 2) - (temp.dy 2))^0.5;
        if (!(
testnpc(temp.x,temp.y) > 0) && !(testplayer(temp.x,temp.y) > 0))
        {
          if (
temp.dist<temp.min)
          {
            
temp.min temp.dist;
            
this.seat = {temp.x,temp.y};
          }
        }
      }
    }
  }
  if (
temp.min == 400)
  {
    return 
false;
  }
  else
  {
    return 
this.seat;
  }
}

//#CLIENTSIDE
function onCreated() {
  
setTimer(0.05);
}
function 
onTimeout() {
  
this.moving attr[9];
  if (
this.moving == true)
  {
    if (
tiles[this.x+1.5,this.y+2in {681,682,697,698})
    {
      
this.setcharani("sit""");
    }
    else
    {
      
this.setcharani("walk""");
    }
  }
  else
  {
    if (
tiles[this.x+1.5,this.y+2in {681,682,697,698})
    {
      
this.setcharani("sit""");
    }
    else
    {
      
this.setcharani("idle""");
    }
  }
  
setTimer(0.05);

Yeah I know, No it's not for serious, just trying to readjust after not looking at this stuff for years D:

Last edited by Robin; 05-01-2008 at 03:52 PM.. Reason: Added whole NPC Script
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 08:18 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.