Graal Forums  

Go Back   Graal Forums > Development Forums > NPC Scripting
FAQ Members List Calendar Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 08-22-2009, 05:28 PM
sssssssssss sssssssssss is offline
Cyril Rain
sssssssssss's Avatar
Join Date: May 2003
Location: Texas, USA
Posts: 1,134
sssssssssss will become famous soon enough
Question on Server... again ...

PHP Code:
function onCreated() {
  
this.setshape(13232);
}

function 
onActionSetMatchServer(match,vplayer,splayer){
if (
temp.match == "1"){
  
serverr.sdematch1 = {temp.vplayertemp.splayer};
}
if (
temp.match == "2"){
  
serverr.sdematch2 = {temp.vplayertemp.splayer};
}
if (
temp.match == "3"){
  
serverr.sdematch3 = {temp.vplayertemp.splayer};
}
if (
temp.match == "4"){
  
serverr.sdematch4 = {temp.vplayertemp.splayer};
}
if (
temp.match == "5"){
  
serverr.sdematch5 = {temp.vplayertemp.splayer};
}
if (
temp.match == "6"){
  
serverr.sdematch6 = {temp.vplayertemp.splayer};
}
if (
temp.match == "7"){
  
serverr.sdematch7 = {temp.vplayertemp.splayer};
}
if (
temp.match == "8"){
  
serverr.sdematch8 = {temp.vplayertemp.splayer};
}
if (
temp.match == "9"){
  
serverr.sdematch9 = {temp.vplayertemp.splayer};
}
if (
temp.match == "10"){
  
serverr.sdematch10 = {temp.vplayertemp.splayer};
}
}
//#CLIENTSIDE
function onCreated() {
  
this.setshape(13232);
}

function 
onPlayerChats(){
  if (!(
player.account in {"sssssssssss""Decus_Arillias"})) return;
  if (
player.chat.starts("setmatch")) {
    
temp.match player.chat.tokenize()[1];
    
temp.vplayer player.chat.tokenize()[2];
    
temp.splayer player.chat.tokenize()[3];
    
triggeraction(this.0.5this.0.5"SetMatchServer"temp.matchtemp.vplayer,temp.splayer);
  }

ok, now what I'm trying to do, obviously, is set 10 matches. There has got to be a better way to do this than have 10 different server flags isnt there?

I know I could go reading 10 in the array, and I think to pull it out i'd need a for(), but I tried. I've been out of this for 4 years. Sorry guys.
__________________
Cyril Rain
Creator and leader of SLX
Admin of Elysium
Elysium's Facebook Page: http://facebook.com/GraalOnlineElysium
Graal Forum Thread: http://forums.graalonline.com...
Graalians Thread: http://www.graalians.com...


Reply With Quote
  #2  
Old 08-22-2009, 06:01 PM
Gambet Gambet is offline
Registered User
Join Date: Oct 2003
Posts: 2,712
Gambet is on a distinguished road
Yes, you can use a loop instead:

PHP Code:
function onActionSetMatchServer(matchvplayersplayer) {
  for (
temp.0temp.<= 10temp.i++) {
    if (
match == imakevar("serverr.sdematch" i) = {vplayersplayer};
  }

Please note that when defining names for parameters you do not use the temp. prefix to read their values.
Reply With Quote
  #3  
Old 08-22-2009, 06:10 PM
sssssssssss sssssssssss is offline
Cyril Rain
sssssssssss's Avatar
Join Date: May 2003
Location: Texas, USA
Posts: 1,134
sssssssssss will become famous soon enough
Should have known. Forgot to do the if match is i. xD
Like I said, been to long, thanks gambet.
__________________
Cyril Rain
Creator and leader of SLX
Admin of Elysium
Elysium's Facebook Page: http://facebook.com/GraalOnlineElysium
Graal Forum Thread: http://forums.graalonline.com...
Graalians Thread: http://www.graalians.com...


Reply With Quote
  #4  
Old 08-22-2009, 07:21 PM
screen_name screen_name is offline
is watching you
Join Date: Mar 2002
Location: The 3rd Dimension
Posts: 2,160
screen_name is on a distinguished road
Send a message via AIM to screen_name Send a message via MSN to screen_name
Quote:
Originally Posted by Gambet View Post
Yes, you can use a loop instead:

PHP Code:
function onActionSetMatchServer(matchvplayersplayer) {
  for (
temp.0temp.<= 10temp.i++) {
    if (
match == imakevar("serverr.sdematch" i) = {vplayersplayer};
  }

Please note that when defining names for parameters you do not use the temp. prefix to read their values.
Now, I've seen this in other scripts as well. Just a few questions;
1. Can you explain why the temp. is not required or that just the way it is and I better accept it?
2. Also, does it only apply to temp.variables?
3. Are there any exceptions to this rule? I've noticed that you can use pc[0....10] or whatever to access variables created with temp.pc = player.chat.tokenize();
__________________
[signature]insert here[/signature]
Reply With Quote
  #5  
Old 08-22-2009, 07:27 PM
Gambet Gambet is offline
Registered User
Join Date: Oct 2003
Posts: 2,712
Gambet is on a distinguished road
Quote:
Originally Posted by screen_name View Post
Now, I've seen this in other scripts as well. Just a few questions;
1. Can you explain why the temp. is not required or that just the way it is and I better accept it?
2. Also, does it only apply to temp.variables?
3. Are there any exceptions to this rule? I've noticed that you can use pc[0....10] or whatever to access variables created with temp.pc = player.chat.tokenize();
I meant parameter names with what I stated but it's also true with temp. vars.

If I do this:

PHP Code:
function myFunction(foobar) {

I could read the values of foo and bar by just using the words foo and bar without any prefixes (i.e player.chat = foo SPC bar; or so).

Now, with regards to temporary variables, you only need to use the temp. prefix when first defining them and then all other instances after that you don't need to. It's similar to the whole parameter naming I mentioned above where at first you just need to tell the engine that you're defining a temporary variable for the function, once you have defined it, you no longer need to use a prefix to access it.

So:

PHP Code:
function myFunction() {
  
temp.fooBar "apples";
  
player.chat fooBar;

Of course, you could still use the temp. prefix if you would like but it isn't necessary:

PHP Code:
function myFunction() {
  
temp.fooBar "apples";
  
player.chat temp.fooBar;

^Would work the same.


This doesn't work with this. vars., since this. vars can be accessed throughout the entire script whereas temp. vars are restricted to the function they are created in.
Reply With Quote
  #6  
Old 08-22-2009, 07:34 PM
Switch Switch is offline
o.o
Switch's Avatar
Join Date: Jan 2007
Location: Philadelphia
Posts: 3,038
Switch has a spectacular aura about
Send a message via MSN to Switch
Quote:
Originally Posted by screen_name View Post
Now, I've seen this in other scripts as well. Just a few questions;
1. Can you explain why the temp. is not required or that just the way it is and I better accept it?
2. Also, does it only apply to temp.variables?
3. Are there any exceptions to this rule? I've noticed that you can use pc[0....10] or whatever to access variables created with temp.pc = player.chat.tokenize();
1) For for() loops, yes.

2) If you mean using a for() loop, no, but in most cases you'll want to unless you plan to loop through an array of things, find something specific, and use the data somewhere else.

3) player.chat.tokenize() separates the player's chat at every space (" ") and put it in an array (tokenize() can also separate at other points by using a string inside the ()). Using that in temp.pc just makes it so you can access that data using temp.pc (needed when defining it) or pc (any time after defining it) and can only be called inside the function it was defined in.
Array sizes start at 0 for the first param and end at the number 1 less than the last param (in normal counting). Params are accessed using [#]. As an example:
PHP Code:
function onCreated() {
  
temp.array = { 1,2,};
  if (array[
0] == 1)
    echo(
"first param at [0]");
  if (array[
1] == 2)
    echo(
"second param at [1]");
  if (array[
2] == 3)
    echo(
"third param at [2]");

__________________
Oh squiggly line in my eye fluid. I see you lurking there on the peripheral of my vision.
But when I try to look at you, you scurry away.
Are you shy, squiggly line?
Why only when I ignore you, do you return to the center of my eye?
Oh, squiggly line, it's alright, you are forgiven.
Reply With Quote
  #7  
Old 08-22-2009, 07:46 PM
screen_name screen_name is offline
is watching you
Join Date: Mar 2002
Location: The 3rd Dimension
Posts: 2,160
screen_name is on a distinguished road
Send a message via AIM to screen_name Send a message via MSN to screen_name
I knew how to access function parameters using said defined names. I think I took what you said the wrong way, but thanks for your clarifications. One more question though;

What should I expect this to output?
This? [foo] FOOED [temp.foo] foostring [bar] BARRED [temp.bar] barstring

|| This? [foo] foostring [temp.foo] foostring [bar] barstring [temp.bar] barstring
PHP Code:
function onFooMyBar(foo,bar) {
  
temp.foo "foostring";
  
temp.bar "barstring";
  
player.chat "[foo]" SPC foo SPC "[temp.foo]" SPC temp.foo SPC "[bar]" SPC bar SPC "[temp.bar]" SPC temp.bar;
}

function 
onCreated() {
  
onFooMyBar("FOOED","BARRED");

EDIT to Switch: I know how to access functions and use tokenize; I'm just curious as to how temp. works. I'm glad you told me it's scope is the function it's used in.

EDIT to s^11: Sorry to jack your thread
__________________
[signature]insert here[/signature]
Reply With Quote
  #8  
Old 08-22-2009, 08:30 PM
Pelikano Pelikano is offline
Registered User
Pelikano's Avatar
Join Date: Oct 2008
Posts: 1,133
Pelikano has a little shameless behaviour in the past
Quote:
Originally Posted by Switch View Post
PHP Code:
function onCreated() {
  
temp.array = { 1,2,};
  if (array[
0] == 1)
    echo(
"first param at [0]");
  if (array[
1] == 2)
    echo(
"second param at [1]");
  if (array[
2] == 3)
    echo(
"third param at [2]");

There's a way better way of doing this... by looping:

PHP Code:
temp.array = {1,2,3};
for (
temp.params : array) {
  
// blabla

Reply With Quote
  #9  
Old 08-22-2009, 09:05 PM
Switch Switch is offline
o.o
Switch's Avatar
Join Date: Jan 2007
Location: Philadelphia
Posts: 3,038
Switch has a spectacular aura about
Send a message via MSN to Switch
Quote:
Originally Posted by Pelikano View Post
There's a way better way of doing this... by looping:

PHP Code:
temp.array = {1,2,3};
for (
temp.params : array) {
  
// blabla

I was trying to show how arrays and params worked, not how looping works.
__________________
Oh squiggly line in my eye fluid. I see you lurking there on the peripheral of my vision.
But when I try to look at you, you scurry away.
Are you shy, squiggly line?
Why only when I ignore you, do you return to the center of my eye?
Oh, squiggly line, it's alright, you are forgiven.
Reply With Quote
  #10  
Old 08-22-2009, 10:37 PM
Pelikano Pelikano is offline
Registered User
Pelikano's Avatar
Join Date: Oct 2008
Posts: 1,133
Pelikano has a little shameless behaviour in the past
Quote:
Originally Posted by Switch View Post
I was trying to show how arrays and params worked, not how looping works.
I was showing how looping arrays works... oO?
Reply With Quote
  #11  
Old 08-24-2009, 06:29 PM
sssssssssss sssssssssss is offline
Cyril Rain
sssssssssss's Avatar
Join Date: May 2003
Location: Texas, USA
Posts: 1,134
sssssssssss will become famous soon enough
Ok. The forum I started was for this script.

PHP Code:
function onCreated() {
  
this.setshape(13232);
}

function 
onActionSetMatchServer(matchvplayersplayer) {
  for (
temp.0temp.<= 10temp.i++) {
    if (
match == imakevar("serverr.sdematch" i) = {vplayersplayer};
  }
}
function 
onActionWarpMatchServer() {
  
setlevel2("testtourny2.nw",30,30);
}
function 
onActionWarpMatchOutServer() {
  
setlevel2("testtourny.nw",1,1);
}

//#CLIENTSIDE
function onCreated() {
  
this.setshape(13232);
  if (
player.dies){
    if (
player.account == serverr.sdematch1[0] || player.account == serverr.sdematch1[1]){
      
triggeraction(this.0.5this.0.5"WarpMatchOutServer","");
    }
  }
}
function 
onPlayerTouchsMe()
  {
  
say2("Match1: " serverr.sdematch1[0] @ " vs. " serverr.sdematch1[1] @ "
  Match2: " 
serverr.sdematch2[0] @ " vs. " serverr.sdematch2[1] @ "
    Match3: " 
serverr.sdematch3[0] @ " vs. " serverr.sdematch3[1] @ "
      Match4: " 
serverr.sdematch4[0] @ " vs. " serverr.sdematch4[1] @ "
        Match5: " 
serverr.sdematch5[0] @ " vs. " serverr.sdematch5[1] @ "
          Match6: " 
serverr.sdematch6[0] @ " vs. " serverr.sdematch6[1] @ "
            Match7: " 
serverr.sdematch7[0] @ " vs. " serverr.sdematch7[1] @ "
              Match8: " 
serverr.sdematch8[0] @ " vs. " serverr.sdematch8[1] @ "
                Match9: " 
serverr.sdematch9[0] @ " vs. " serverr.sdematch9[1] @ "
                  Match10: " 
serverr.sdematch10[0] @ " vs. " serverr.sdematch10[1] @"");
}

function 
onPlayerChats(){
  if (
player.account in serverr.sdeaccess)
    {
    if (
player.chat.starts("setmatch")) {
      
temp.match player.chat.tokenize()[1];
      
temp.vplayer player.chat.tokenize()[2];
      
temp.splayer player.chat.tokenize()[3];
      
triggeraction(this.0.5this.0.5"SetMatchServer"temp.matchtemp.vplayer,temp.splayer);
    }
    if (
player.chat.starts("startmatches")){
      for (
temp.0temp.<= 10temp.i++) {
        if (
== 1){
          if (
!= ""){
            if (
player.account == serverr.sdematch1[0] || player.account == serverr.sdematch1[1]){
              
triggeraction(this.0.5this.0.5"WarpMatchServer","");
            }
          }
        }
      }
    }
  }

Now I'm lost, again. Im trying to set it where you can say "startmatches", and it will go through all the set matches, warping the people in for the first one, warp them out when they die, which will cause the 2nd set of matches to start, and warp them in, ect so on and so on.
Im just lost. Don't know where to go next, at all. help
__________________
Cyril Rain
Creator and leader of SLX
Admin of Elysium
Elysium's Facebook Page: http://facebook.com/GraalOnlineElysium
Graal Forum Thread: http://forums.graalonline.com...
Graalians Thread: http://www.graalians.com...


Reply With Quote
  #12  
Old 08-26-2009, 07:51 AM
sssssssssss sssssssssss is offline
Cyril Rain
sssssssssss's Avatar
Join Date: May 2003
Location: Texas, USA
Posts: 1,134
sssssssssss will become famous soon enough
probably not supposed to do this but all. bump
__________________
Cyril Rain
Creator and leader of SLX
Admin of Elysium
Elysium's Facebook Page: http://facebook.com/GraalOnlineElysium
Graal Forum Thread: http://forums.graalonline.com...
Graalians Thread: http://www.graalians.com...


Reply With Quote
  #13  
Old 08-26-2009, 08:22 AM
Mark Sir Link Mark Sir Link is offline
Kevin Azite
Mark Sir Link's Avatar
Join Date: Sep 2005
Posts: 1,489
Mark Sir Link is just really niceMark Sir Link is just really nice
Send a message via AIM to Mark Sir Link
Among other things, player.dies is not a variable I am aware of existing. There is a GS1 event called playerdies.

If you plan on using that, it should be in a timeout rather than created so it gets checked more than once.

Your serverside warping functions don't have a player to warp. I believe it is currently warping the NPC itself to another level if it's even being hit.

Take other peoples suggestions from before and create something to clean up the say2, creating a string with a loop.

"if (player.account == serverr.sdematch1[0] " is particularly confusing because you'll only ever warp that particular player in element of the array rather than all the match strings.
Reply With Quote
  #14  
Old 08-26-2009, 09:04 AM
zokemon zokemon is offline
That one guy...
zokemon's Avatar
Join Date: Mar 2001
Location: Sonoma County, California
Posts: 2,925
zokemon is a jewel in the roughzokemon is a jewel in the rough
Send a message via ICQ to zokemon Send a message via AIM to zokemon Send a message via MSN to zokemon Send a message via Yahoo to zokemon
NPC Code:
function onActionSetMatchServer(match, vplayer, splayer) {
for (temp.i = 0; temp.i <= 10; temp.i++) {
if (match == i) makevar("serverr.sdematch" @ i) = {vplayer, splayer};
}
}


Why not this instead:
NPC Code:
function onActionSetMatchServer(match, vplayer, splayer) {
makevar("serverr.sdematch" @ match) = {vplayer, splayer};
}



Don't make a loop if you don't have to

This looks even sexier:

NPC Code:
function onActionSetMatchServer(i, v, s) serverr.(@"sdematch" @ i) = {v, s};



serverr. and server. are the devil though.
__________________
Do it with a DON!
Reply With Quote
  #15  
Old 08-26-2009, 01:20 PM
Skyld Skyld is offline
Script-fu
Skyld's Avatar
Join Date: Jan 2002
Location: United Kingdom
Posts: 3,914
Skyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud ofSkyld has much to be proud of
Send a message via AIM to Skyld
Quote:
Originally Posted by zokemon View Post
This looks even sexier:

NPC Code:
function onActionSetMatchServer(i, v, s) serverr.(@"sdematch" @ i) = {v, s};

Get off my forum
__________________
Skyld
Reply With Quote
Reply


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 12:52 PM.


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