Graal Forums

Graal Forums (https://forums.graalonline.com/forums/index.php)
-   Code Gallery (https://forums.graalonline.com/forums/forumdisplay.php?f=179)
-   -   Looking for feedback on smartbaddy BETA (https://forums.graalonline.com/forums/showthread.php?t=134263257)

skillmaster19 05-17-2011 03:39 AM

Looking for feedback on smartbaddy BETA
 
I created a smartbaddy, using gbaddy3.0 to help me a little. This baddy is supposed to simulate how a player would fight. This baddy runs around the player and sometimes charges rather than charging 100% of the time, to create a challenge. In addition, the baddy has a 0.1-0.4 second delay before swinging its sword to show it is not a perfect computer that can hit right away. This script may be used for learning purposes, and feel free to upload it to your server to play with it. However, this script may not be used in the final content of a server. I might give away permission to this script if I get good feedback. I wouldn't use this on your server anyways, as I am sure it is not very efficient. Also, I had a bit of trouble with the triggering of the npc when hit, so if someone could tell me how to fix it, that will be appreciated.
PHP Code:

function onCreated()

{
   
this.outsidetargetmodes = {"targetingup","targetingdown","targetingleft","targetingright","charge"};
  
showcharacter();
  
  
swordimg "sword1.png";
  
this.hp 10;
  
this.movementSpeed 1;
swordpower 1;
  
setTimer(0.9);

}

function 
onTimeOut()
{
this.swordfreezetime--;
if (
players.size() > 0)
    
setTimer(0.1);
  else
    
setTimer(0);

if (
this.hp 0)
{


this.ani "walk";
  
this.closestplayer findnearestplayer(this.xthis.y);
  
this.plyr this.closestplayer;
if (!
getMode){
  if(
int(random(0,100)) <30)
  {
  
this.mode ="charge";
  }
  else
  {


 
temp.wheretoattack int(random(0,100));
 if(
temp.wheretoattack >=50 )
 {
 if(
this.dir || this.dir 2)
 {
 
this.mode "targetingright";
 }
 if(
this.dir || this.dir 3){
  
this.mode "targetingdown";
  }
  else if(
temp.wheretoattack <=49){
  if(
this.dir || this.dir 2){
  
this.mode "targetingleft";
  }
  if(
player.dir || player.dir 3){
  
this.mode "targetingup";
  }
  }
  }
  }
  }
this.toright this.plyr.x+5;
  
this.todown this.plyr.y+5;
  
this.toup this.plyr.-5;
  
this.toleft this.plyr.x-5;
 switch(
this.mode){


   case 
"targetingleft":
 
this.targetx this.toleft;
  
this.targetythis.plyr.y;
 break;

  case 
"targetingright":
  
this.targetx this.toright;
 
this.targety=this.plyr.y;
  break;

  case 
"targetingdown":
  
this.targety this.todown;
  
this.targetx this.plyr.x;
  break;
  case 
"targetingup":
   
this.targety this.toup;
  
this.targetx this.plyr.x;
  break;
  case 
"charge":
   
this.targetx this.plyr.x;
  
this.targety this.plyr.y;
  break;
}
  

  
this.distx = (this.targetx) - this.x;
  
this.disty this.targety this.y;
  
this.plyrdistx this.plyr.-this.x;
  
this.plyrdisty this.plyr.y-this.y;

  
this.len = (this.distx this.distx this.disty this.disty) ^ 0.5;
  
this.movex = (this.distx this.len);
  
this.fixed_x this.1.5;
    
this.fixed_y this.2;
  
this.movey = (this.disty this.len);

if (!
checkBlockedTile(this.movex+this.fixed_xthis.fixed_y+this.movey)) {
     if(
this.distx <20 && this.disty <20){
     
this.+= this.movex * (this.movementSpeed);
  
this.+= this.movey * (this.movementSpeed);
}
}
else 
this.ani "idle";


}

  if (
abs(this.distx) > abs(this.disty))
  {
    if (
this.distx 0)
      
this.dir 3;
    else
      
this.dir 1;
  }
  else
  {
    if (
this.disty 0)
      
this.dir 2;

    else
      
this.dir 0;

  }
 if(
this.swordfreezetime <=0)
        {
     if (
abs(this.plyrdistx) < && abs(this.plyrdisty) < 2){
   
this.scheduleevent(random(0.1,0.4),"hurtCharacter",0);
    }
     if (
abs(this.plyrdistx) < && abs(this.plyrdisty) < 4){
        
this.scheduleevent(random(0.1,0.4),"hurtCharacter",0);
    }
    }
    }
function 
getMode(){
if(
this.mode in this.outsidetargetmodes)
return 
true;
else
return 
false;
}



function 
checkBlockedTile(xValueyValue) {
  if (
onwall(xValueyValue) || onwater(xValueyValue))
    return 
true;
  else
    return 
false;
}
function 
onRespawn(ticker) {
      
this.hp 10;
      
this.ani "idle";
      
move(int(random(-0.9999,0.9999)),int(random(-0.9999,0.9999)), 0o);
      
this.chat this.hp;
    }

    function 
onhurtCharacter()
    {
   if (
abs(this.plyrdistx) < && abs(this.plyrdisty) < 4){
   if (
abs(this.plyrdistx) < && abs(this.plyrdisty) < 2){
   
this.mode ="waiting";
    
this.ani "sword";
    
this.scheduleevent(0.1,"StopSwinging",0);
    }
    }


    if(
this.plyr.hearts 0){
    
this.ani="idle";
    }
    }

    function 
onStopSwinging(){
     
this.ani "walk";
     
this.swordfreezetime 10//stops swinging for 10 timeouts
    
}


  function 
onPlayerEnters()
  {
    
onTimeOut();
  }

function 
onWa****(){
this.mode "waiting";
if(
this.hp >0){
    switch(
player.dir){

    case 
"2":
    if (!
checkBlockedTile(this.xthis.y+5)){
    
this.ythis.5;
    }
    break;





case 
"3":


if (!
checkBlockedTile(this.x+5this.y)) {
this.x+=5;
}
break;


    case 
"1":
   if (!
checkBlockedTile(this.x-5this.y)) {

      
this.this.5;
    }

    break;
    case 
"0":
   if (!
checkBlockedTile(this.xthis.y-5)) {
     
this.ythis.5;

    }
break;
}
}
    
this.hp--;

    if (
this.hp >= 0)
    {
      
this.chat this.hp;
    }

    if (
this.hp == 0)
    {
      
this.ani "dead";
    }

    if (
this.hp == 0)
    {
      
clientr.baddykills++;
      
player.chat "I have" SPC clientr.baddykills SPC "baddy kills";
      
this.scheduleevent(50"Respawn"0);
}



cbk1994 05-17-2011 03:49 AM

PLEASE fix your styling.

skillmaster19 05-17-2011 03:51 AM

Quote:

Originally Posted by cbk1994 (Post 1650165)
PLEASE fix your styling.

I used /style class, do you know of a better way besides manually doing it? I created this from an older script I made and didn't feel like redoing the whole styling.

Tricxta 05-17-2011 03:54 AM

use the tab key on your keyboard and quickly run through your script fixing it up, the script isnt that long... alternatively go into the level editor paste your script there and press the style button in the npc window like the way it use to be done before npc server scripting became the new BIG THING

also....
PHP Code:

    if(this.plyr.hearts 0){ 
    
this.ani="idle"
    } 
    } 

error??? also while = works dont do it!!! instead use this standard

= is for assigning values eg:this.i=4;
== is for comparing values eg:if (this.i==4)

might wanna fix this up

and....
PHP Code:

//#CLIENTSIDE 
function onWa****(){ 
switch(
player.dir){ 

case
"0"
triggeraction(player.x+1.5,player.y-2+1.5,"hit"); 

break; 


case
"1"
triggeraction(player.x-2+1.5,player.y+1.5,"hit"); 
break; 

case
"2"
triggeraction(player.x+1.5,player.y+2+1.5,"hit"); 
break; 

case
"3"
triggeraction(player.x+2+1.5,player.y+1.5,"hit"); 
break; 



learn how to use vecx() and vecy()

triggeraction(player.x+1.5+(vecx(playerdir)*2),pla yer.y+1.5,"hit");

also arent triggeractions ment to have a space for parameters being sent or is this different in gs2?

skillmaster19 05-17-2011 03:56 AM

Quote:

Originally Posted by cbk1994 (Post 1650165)
PLEASE fix your styling.

fixed. Better?

cbk1994 05-17-2011 04:00 AM

Quote:

Originally Posted by skillmaster19 (Post 1650169)
fixed. Better?

I don't see any changes?

skillmaster19 05-17-2011 04:08 AM

Quote:

Originally Posted by cbk1994 (Post 1650171)
I don't see any changes?

I styled it using a website that people have reccomended and fixed errors. I had a lot of errors because I took an old script I made when I had been scripting for less than a week and built off of it. and trixta yes the single equal sign (=) was an accident.

Tricxta 05-17-2011 04:20 AM

you've been scripting for less then a week yet you feel this is code gallery worthy? Uhmmm k bai

salesman 05-17-2011 04:20 AM

you could always try styling your code as you write it

skillmaster19 05-17-2011 04:21 AM

Quote:

Originally Posted by Tricxta (Post 1650173)
you've been scripting for less then a week yet you feel this is code gallery worthy? Uhmmm k bai

No, I have been scripting for months. Read. I said the original script was made in my first week. I completely redid it today. btw fixed a huge glitch that caused the npc to target the same direction every time. Also nerfed the npcs reaction speed but improved its strategy.

oo_jazz_oo 05-17-2011 05:39 AM

The problem with your styling is that there are huge line gaps, indentation is all wrong.

PHP Code:

function onCreated() {
  if (
player.hearts 5) {
    
this.chat "Hello!";
  }
}
function 
onPlayerTouchsme() {
  if (
player.ap 80) {
    
player.hearts += 1;
    if (
player.hearts >= 10) {
      
this.chat "Thats a lot of hearts!";
    }
  }


Beginning and ending curly braces are on their own line. Code inside said braces is indented more. Any code inside those braces is indented even more.
This makes reading scripts much easier.

Do not use the built in style function on rc, as it tends to muck things up, and it is much better practice to style as you go along, instead of coding a giant wall of text, then attempting to style afterwards.

Beginning braces should be on the same line as the function declaration, and ending braces should be on their own line.

Crow 05-17-2011 09:55 AM

Quote:

Originally Posted by Tricxta (Post 1650173)
you've been scripting for less then a week yet you feel this is code gallery worthy? Uhmmm k bai

Stop being an ass.

fowlplay4 05-17-2011 04:55 PM

How to style your script properly with jsbeautifer.org

Copy-paste your code into the code text area.

Settings:
- Indent with 2 spaces
- Braces with control statement
- Un-check all Checkboxes

Click 'Beautify'

Result:

PHP Code:

// Scripted by Skill 

function onActionhit() {
  if (
this.hp 0) {
    switch (
player.dir) {
    case 
"2":
      if (!
checkBlockedTile(this.xthis.5)) {
        
this.this.5;
      }
      break;
    case 
"3":
      if (!
checkBlockedTile(this.5this.y)) {
        
this.+= 5;
      }
      break;
    case 
"1":
      if (!
checkBlockedTile(this.5this.y)) {
        
this.this.5;
      }
      break;
    case 
"0":
      if (!
checkBlockedTile(this.xthis.5)) {
        
this.this.5;
      }
      break;
    }
  }
  
this.hp--;
  if (
this.hp >= 0) {
    
this.chat this.hp;
  }
  if (
this.hp 0) {
    
this.ani "dead";
  }
  if (
this.hp == 0) {
    
clientr.baddykills++;
    
player.chat "I have"
    
SPC clientr.baddykills SPC "baddy kills";
    
this.scheduleevent(50"Respawn"0);
  }
}

function 
onCreated() {
  
this.outsidetargetmodes = {
    
"targetingup""targetingdown""targetingleft""targetingright""charge"
  
};
  
setshape(16464);
  
showcharacter();
  
swordimg "sword1.png";
  
this.hp 10;
  
this.movementSpeed 1;
  
swordpower 1;
  
setTimer(0.1);
}

function 
onTimeOut() {
  
this.swordfreezetime--;
  if (
players.size() > 0setTimer(0.1);
  else 
setTimer(0);
  if (
this.hp 0) {
    
this.ani "walk";
    
this.closestplayer findnearestplayer(this.xthis.y);
    
this.plyr this.closestplayer;
    if (!
getMode) {
      if (
int(random(0100)) < 30) {
        
this.mode "charge";
      } else {
        
temp.wheretoattack int(random(0100));
        if (
temp.wheretoattack >= 50) {
          if (
this.dir || this.dir 2) {
            
this.mode "targetingright";
          }
          if (
this.dir || this.dir 3) {
            
this.mode "targetingdown";
          }
          if (
temp.wheretoattack <= 49) {
            if (
this.dir || this.dir 2) {
              
this.mode "targetingleft";
            }
            if (
player.dir || player.dir 3) {
              
this.mode "targetingup";
            }
          }
        }
      }
    }
    if (
this.mode == "targetingleft") {
      
this.targetx this.toleft;
      
this.targety this.plyr.y;
    }
    if (
this.mode == "targetingright") {
      
this.targetx this.toright;
      
this.targety this.plyr.y;
    }
    if (
this.mode == "targetingdown") {
      
this.targety this.todown;
      
this.targetx this.plyr.x;
    }
    if (
this.mode == "targetingup") {
      
this.targety this.toup;
      
this.targetx this.plyr.x;
    }
    if (
this.mode == "charge") {
      
this.targetx this.plyr.x;
      
this.targety this.plyr.y;
    }
    
this.toright this.plyr.4;
    
this.todown this.plyr.4;
    
this.toup this.plyr.4;
    
this.toleft this.plyr.4;
    
this.distx = (this.targetx) - this.x;
    
this.disty this.targety this.y;
    
this.plyrdistx this.plyr.this.x;
    
this.plyrdisty this.plyr.this.y;
    
this.len = (this.distx this.distx this.disty this.disty) ^ 0.5;
    
this.movex = (this.distx this.len);
    
this.fixed_x this.1.5;
    
this.fixed_y this.2;
    
this.movey = (this.disty this.len);
    if (!
checkBlockedTile(this.movex this.fixed_xthis.fixed_y this.movey)) {
      if (
this.distx 20 && this.disty 20) {
        
this.+= this.movex * (this.movementSpeed);
        
this.+= this.movey * (this.movementSpeed);
      }
    } else 
this.ani "idle";
  }
  if (
abs(this.distx) > abs(this.disty)) {
    if (
this.distx 0this.dir 3;
    else 
this.dir 1;
  } else {
    if (
this.disty 0this.dir 2;
    else 
this.dir 0;
  }
  if (
this.swordfreezetime <= 0) {
    if (
abs(this.plyrdistx) < && abs(this.plyrdisty) < 3) {
      
this.scheduleevent(random(0.20.6), "hurtCharacter"0);
    }
    if (
abs(this.plyrdistx) < && abs(this.plyrdisty) < 4) {
      
this.scheduleevent(random(0.10.6), "hurtCharacter"0);
    }
  }

  function 
getMode() {
    if (
this.mode in this.outsidetargetmodes) return true;
    else return 
false;
  }

  function 
checkBlockedTile(xValueyValue) {
    if (
onwall(xValueyValue) || onwater(xValueyValue)) return true;
    else return 
false;
  }

  function 
onRespawn(ticker) {
    
this.hp 10;
    
this.ani "idle";
    
move(int(random(-0.99990.9999)), int(random(-0.99990.9999)), 0o);
    
this.chat this.hp;
  }

  function 
onhurtCharacter() {
    
this.mode "waiting";
    
this.ani "sword";
    
this.scheduleevent(0.1"StopSwinging"0);
  }
  if (
this.plyr.hearts 0) {
    
this.ani "idle";
  }
}

function 
onStopSwinging() {
  
this.ani "walk";
  
this.swordfreezetime 10//stops swinging for 10 timeouts 
}

function 
onPlayerEnters() {
  
onTimeOut();
}
//#CLIENTSIDE 

function onWa****() {
  
triggeraction(player.1.5 + (vecx(playerdir) * 2), player.1.5"hit");
}

function 
onCreated() {
  
setshape(16464);


When your code is styled properly, it's now possible to see that you have other functions nested in your timeout function.

skillmaster19 05-18-2011 02:33 AM

Many fixes! The baddy currently doesn't work on gmaps at the time, I had to remove this to make the hit detection better.

Messiah 05-18-2011 02:40 AM

Quote:

Originally Posted by Tricxta (Post 1650173)
you've been scripting for less then a week yet you feel this is code gallery worthy? Uhmmm k bai

Who are you to judge others? Hes looking for feedback, not someone to tell him his code isn't "worthy" of posting on a goddamn forum.


All times are GMT +2. The time now is 12:59 AM.

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