Classic Forums

Please login or register.

Login with username, password and session length
Advanced search  

News:

We're back. Discord - https://discord.gg/U7C8YNYF63

Pages: 1 ... 5 6 [7] 8 9 10
 61 
 on: August 20, 2017, 02:59:27 AM 
Started by maximus_asinus - Last post by Thor
Most "can i b admin"s aren't a big deal. But occasionally you get someone who spends hours/days/weeks/months begging for it non stop.

 62 
 on: August 20, 2017, 01:21:42 AM 
Started by maximus_asinus - Last post by maximus_asinus
Sorry to bring this back up. I'm not sure if this is appropriate to talk about here or if I should ask these questions on the other forum.

I've been reviewing the water script and I finally got to a point where I somewhat understand what is happening. I tried to add on draining functionality (which works) but it is definitely hacked together. Do you have any advice on how to clean this up?

Code: [Select]
// setting variables and giving the object a name

function onCreated() {
  this.waterWidth = 24;
  this.waterHeight = 8;
  this.boundaryWidth = 2;
  this.boundaryHeight = 2;
  this.level.foobar = this;
}

// designed to show proper water level if the player were to log off.
// using client variable to save status

function onPlayerEnters() {
  if (client.waterfilled = true) {
    this.showpoly(200, {this.x, this.y, this.x + this.waterWidth, this.y, this.x + this.waterWidth, this.y + this.waterHeight, this.x, this.y + this.waterHeight});
    this.changeimgcolors(200,0,0,1,0.75);
    this.changeimgvis(200,1);
  }
  else this.hideimg(200);
}

// triggering public function from a switch in the level.
// using it this way so I can break a nested timeout.

public function watercheck() {
  if (client.waterfilled == true) {
    this.filledHeight = 0;
    this.filledWidth = 0;
  }
  else {
    this.filledHeight = this.waterHeight;
    this.filledWidth = this.waterWidth;
  }
  setTimer(0.05);
}

function onTimeout() {
  waterAction();
  setTimer(0.1);
}

function waterAction() {

// the truly hacked part
// enabling and disabling the movement and breaking the timeout once the water is finished it's thing

  if (client.waterfilled == true) {
    if (this.waterWidth == this.filledWidth && this.waterHeight == this.filledHeight) {
      disablescriptmovement = false;
      return;
    }
    else  disablescriptmovement = true;
  }
  if (client.waterfilled ==  false) {
    if (this.filledWidth <= 0 && this.filledHeight <= 0) {
      disablescriptmovement = false;
      return;
    }
    else  disablescriptmovement = true;
  }
  temp.w = this.waterWidth - (this.boundaryWidth * 2);
  temp.h = this.waterHeight - (this.boundaryHeight * 2);
  this.xIncrease = 50;
  this.yIncrease = 50;
  if (this.boundaryWidth > 0) {
    if (this.waterWidth - this.filledWidth <= this.boundaryWidth * 2) {
      temp.w = this.boundaryWidth;
      this.xIncrease /= 2;
    }
    if (this.waterHeight - this.filledHeight <= this.boundaryHeight * 2) {
      temp.h = this.boundaryHeight;
      this.yIncrease /= 2;
    }
  }
  this.xIncrease = (temp.w / this.xIncrease);
  this.yIncrease = (temp.h / this.yIncrease);

// checking whether to flood or empty the room

  if (client.waterfilled = true) {
    this.filledWidth = min(this.waterWidth, this.filledWidth + this.xIncrease);
    this.filledHeight = min(this.waterHeight, this.filledHeight + this.yIncrease);
  }
  else {
    this.filledWidth = min(this.waterWidth, this.filledWidth - this.xIncrease);
    this.filledHeight = min(this.waterHeight, this.filledHeight - this.yIncrease);
  }
  updatePoly();
}

// drawing the polygon

function updatePoly() {
  temp.x = this.x + this.getWaterX();
  temp.y = this.y + this.getWaterY();
  this.showpoly(200, {temp.x, temp.y, temp.x + this.filledWidth, temp.y, temp.x + this.filledWidth, temp.y + this.filledHeight, temp.x, temp.y + this.filledHeight});
  this.changeimgcolors(200,0,0,1,0.75);
  this.changeimgvis(200,1);
}

function getWaterX() {
  return (this.waterWidth - this.filledWidth) / 2;
}

function getWaterY() {
  return (this.waterHeight - this.filledHeight) / 2;
}

 63 
 on: August 19, 2017, 04:40:11 PM 
Started by maximus_asinus - Last post by maximus_asinus
I get asked about 3 times a day. I now understand your struggle, Thor.

 64 
 on: August 18, 2017, 01:30:31 PM 
Started by maximus_asinus - Last post by Thor
Seems awkward to post about this here unless it's specific to Classic.

I posted a reply at http://forums.graalonline.com/forums/showthread.php?p=1741824#post1741824

 65 
 on: August 17, 2017, 10:36:43 PM 
Started by maximus_asinus - Last post by maximus_asinus
Quick update:

I went back and tried public function again after reading a post by fp4 and got something that ALMOST works.

CLASS A
Code: [Select]
//#CLIENTSIDE
function onActionAHPhit() { // custom sword hit detection
  temp.foobar = this.level.foobar;
  temp.foobar.baz();
}
 
CLASS B
Code: [Select]
//#CLIENTSIDE
function onCreated() {
  this.setimg("block.png");
  this.level.foobar = this;
}
public function baz() {
  this.chat = "debug";
}

The problem is only the last NPC to join Class B will receive the update. If I could get around that I would be all set.

 66 
 on: August 17, 2017, 06:28:46 PM 
Started by maximus_asinus - Last post by maximus_asinus
Maybe you can answer me. This my post from the other forums:

Quote
is it possible for two classes to communicate?

My example:

In the first class I have a switch that the player interacts with by swinging the sword. This class is supposed to tell the second class that it was hit. In the second class I have blocks that raise or lower depending on the status of the switch.

I can do a hack solution like a check in a looping timeout but I feel like this can be done with a trigger, and I don't want to use triggeraction if I have 20 different blocks. Want to make something that will allow me to just drag-and-drop these for the most part.

 67 
 on: August 15, 2017, 11:20:16 PM 
Started by maximus_asinus - Last post by maximus_asinus
Also can you explain how attachplayertoobj works online?

Offline if I use attachplayertoobj it acts as if the player is on a layer above the tileset and ignores blocking tiles. In combination with setshape2 I can make blocking tiles swimmable.

Code: [Select]
if (created) {
  setshape2 2,2,{11,11,11,11};
}
if (playertouchsme) {
  attachplayertoobj 0,id;
}

With the same script (updated to GS2 obviously) the tiles are still swimmable but it doesn't put me on that separate layer.

Code: [Select]
//#CLIENTSIDE
function onCreated() {
setshape2(2,2,{11,11,11,11});
}
function onPlayerTouchsMe() {
attachplayertoob(0, id);
}

And again, thanks for your patience. I am learning a lot from what you've shown me so far. I appreciate the help.

 68 
 on: August 15, 2017, 10:01:42 PM 
Started by maximus_asinus - Last post by maximus_asinus
Okay I've run what you gave me and it works, though it looks a bit odd when you're flooding in long skinny sections. Also how would you handle two intersecting flows of water? I am demoing in an L shaped room and want to flood both sections. Here is a demo of what I am talking about.

https://www.youtube.com/watch?v=cj6dqNfGnMw

I'm assuming it was luck that they came together at the same time.

Could this be done with one source of water instead of adding multiple?





 69 
 on: August 15, 2017, 06:12:23 PM 
Started by maximus_asinus - Last post by Thor
After testing your script visually it only works for square shapes. How would I go about doing other shapes? Like a rectangle? Maybe I am not understanding this script, but it seems very limited.

All this code does is handle the drawing of the polygon based on the water-filled area compared with the total flood-able area, but it can and does work for rectangular areas too, rectangles just require specific math to increment the filled area as the filled width and height would not increment evenly.

When raising the water I increment the areas like so:

Code: [Select]
  temp.w = this.waterWidth - (this.boundaryWidth * 2);
  temp.h = this.waterHeight - (this.boundaryWidth * 2);
  temp.xIncrease = 50;
  temp.yIncrease = 50;

  if (this.boundaryWidth > 0) {

    if (this.waterWidth - this.filledWidth <= this.boundaryWidth * 2) {
      temp.w = this.boundaryWidth;
      temp.xIncrease /= 2;
    }

    if (this.waterHeight - this.filledHeight <= this.boundaryWidth * 2) {
      temp.h = this.boundaryWidth;
      temp.yIncrease /= 2;
    }

  }
  temp.xIncrease = (temp.w / temp.xIncrease);
  temp.yIncrease = (temp.h / temp.yIncrease);
  this.filledWidth = min(this.waterWidth, this.filledWidth + temp.xIncrease);
  this.filledHeight = min(this.waterHeight, this.filledHeight + temp.yIncrease);
  this.updatePoly();

(Boundary width would be the walled area on the outermost tiles of a fill area, where I have the water raise more slowly)

 70 
 on: August 15, 2017, 05:01:11 PM 
Started by maximus_asinus - Last post by maximus_asinus
After testing your script visually it only works for square shapes. How would I go about doing other shapes? Like a rectangle? Maybe I am not understanding this script, but it seems very limited.

Pages: 1 ... 5 6 [7] 8 9 10