Thread: onWall3()
View Single Post
  #1  
Old 08-22-2013, 05:20 AM
Angel_Light Angel_Light is offline
Varia Developer
Angel_Light's Avatar
Join Date: Nov 2005
Location: Knoxville, TN
Posts: 1,684
Angel_Light is on a distinguished road
Send a message via AIM to Angel_Light Send a message via MSN to Angel_Light
onWall3()

Just a make shift version of the onWall2() function that checks the tilelayers on serverside, which currently isn't implemented in-game yet.

Use :
onWall3( x, y, w, h, level, layerscount);
  • x - The level's X coordinate to check (integer)
  • y - The level's Y coordinate to check (integer)
  • w - The width of tiles to check (integer)
  • h - The height of tiles to check (integer)
  • level - The name of the level to check (string)
  • layerscount - The number of layers to check from layer 0 (integer)

Installation :
Simply add the following code to a class, then join that class to whatever you need it for serverside. Also upload the 'tiledata.nw' file to your levels/ folder and I guess make sure the NPC server has read rights to the levels/ folder

PHP Code:
public function onWall3temp.lvl_xtemp.lvl_ytemp.wtemp.htemp.lvltemp.lvl_c)
{

  
temp.file_data.loadLines"levels/" temp.lvl);
  
  
this.delete_rest false;
  
  
temp.file_lines temp.level_data.size();

  for ( 
temp.temp.file_data)
  {
  
    
temp.tokens temp.a.tokenize();

    if ( 
temp.tokens0] == "BOARD")
      
temp.level_data.addtemp.tokens);

  }
  
  for ( 
temp.0temp.temp.wtemp.++;)
  {
  
    for ( 
temp.0temp.temp.htemp.++;)
    {
    
      for ( 
temp.0temp.temp.lvl_ctemp.++;)
      {

        
temp.tile_loc getTileLocationbase64ToTiletemp.level_data[( temp.temp.lvl_y) + ( temp.64)][ 5].substring(( temp.temp.lvl_x) * 22)));
    
        if ( 
findLevel"tiledata.nw").onwalltemp.tile_loc0] % 64temp.tile_loc1] + ( 32 temp.tile_loc0] > 640)))
        {
    
          
temp.isBlocking true;
          break;
  
        }
      }
      
      if ( 
temp.isBlocking)
        break;
        
    }
    
    if ( 
temp.isBlocking)
      break;
        
  }
  
  return 
floattemp.isBlocking);
  
}



function 
Base64ToTiletemp.t// Big thank you to Dusty for this function 
{
  
temp.base64 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  
  if ( 
temp.t.type() == 1
  {
  
    return 
temp.base64.postemp.t.substring01)) * 64 temp.base64.postemp.t.substring11));
  } 
  
  else if ( 
temp.t.type() == 3
  {
  
    
temp.decodearray = new[ 0];
    
    for ( 
temp.temp.t
      
temp.decodearray.addtemp.base64.postemp.i.substring01)) * 64 temp.base64.postemp.i.substring11))); 
    
    return 
temp.decodearray;
  } 
  
  else 
    return -
1;

}

function 
getTileLocationtemp.tileNum//Returns tileset coordinate from hexa/decimal
{

  
temp.tileX inttemp.tileNum 512) * 16 + ( temp.tileNum 16);
  
temp.tileY inttemp.tileNum 16) % 32
  return { 
temp.tileXtemp.tileY}; 


Example :
Make a weapon, add this code to it, and then add it to yourself. It will then check a 2x2 square if the tiles are blocking.

PHP Code:
function onCreated()
{

  
this.join"core");

}

function 
onActionServerside()
{

  if ( 
params0] == "onWall3")
    echo( 
onWall3params1], params2], params3], params4], params5], params6]));

}

//#CLIENTSIDE

function GraalControl.onMouseDown()
{

  
triggerServer"weapon"this.name"onWall3"intmousex), intmousey), 22player.level.nametilelayercount);
  
showimg1"block.png"intmousex), intmousey));
   

Also, I'm pretty sure there are several way to make this more efficient, if so please correct my method.

Also figured I should attach this for getting the actual level name and not gmap name serverside, credit goes to cbk1994 for the code. -Thank you. =]
PHP Code:
public function getPreciseLevelName() {
  if (
this.level.name.ends(".gmap")) {
    return 
this.level.getmappartfile(this.xthis.y);
  }
  
  return 
this.level.name;

Attached Files
File Type: nw tiledata.nw (9.1 KB, 286 views)
__________________
Deep into the Darkness peering...

Last edited by Angel_Light; 08-22-2013 at 04:54 PM..
Reply With Quote