Jump to content
  • 0
Sign in to follow this  
roprontera

How to use string as a value in script?

Question

Hi, I am working on a seller npc needs 4 different type(string) 

The NPC can show the .@randType$ in message board if I use mes .@randTypes$

But actually I want it to be a value I can use in script,

the console shows sciprt:getarraysie: not a variable 

Can anyone teach me how to random a string and can use it as a value?

 

prontera,50,50,3	script	seller	50,{
	set .@randType$,rand(1,2);
        if(.@randType$ = 1){
           set .@randType$, "$@type1";
        }else ;
        set .@randType$, "$@type2";
	getitem .@randType$[set(.@i,rand(getarraysize(".@randType$")))], 1;
	close;

OnInit:
	setarray $@type1,501,502,503,504,505;
        setarray $@type2,506,507,508,509,511;

 

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

i am not exactly sure what are you trying to do. About strings 
 

setarray(.@type$[0], "Whatever", "Words", "Going ", "Here"); 

strings you use for words and letters, for items you want an array, but not a string

setarray(.@item[0], 501, 502, 503); 

but for items, you can also use it's aegis name (constant)

setarray(.@item[0], Red_Potion, Orange_Potion, Yellow_Potion);  

this would call the related id, so even tho using the names here, it is still considered variables.
 
To say it simple: strings = words, variables = numbers
 
about your script:
 

OnInit:
setarray $@type1,501,502,503,504,505;
setarray $@type2,506,507,508,509,511; 

You store it as a global, temporary variable, which isn't needed at all here. Neither it is required to call it oninit, better call it when it is actually needed. I would do it when that part of the script is called.

 

}else ;

this is... well.. remove it

 set .@randType$, "$@type2";

this is your actual problem. Your setting a string to a variable, also it's not specified which value of the array should be called. I think you want people to get 1 item out of 1 of those 2 random groups? There is actually no need to store them in arrays, i thin F_Rand comes in hany here

 

prontera,50,50,3	script	seller	50,{
	.@i = rand(1) // sets .@i randomly to either 0 or 1
	if (.@i)
		getitem(callfunc("F_Rand", Red_Potion, Orange_Potion, 503)); // if .@i has a value get 1 random item, you can use constants or ID's
	else
		getitem(callfunc("F_Rand", Green_Potion, Red_Herb, 508 )); // and these if .@i is 0
	end;
}

 

This would pretty much do what you want. Note: Even i use constants here for item id's, these are still considered variables (id's)

 

Now back to your question regarding strings.

.@i$ = "This is a string"; 

or in an array

setarray(.@i$[0], "We", "are", "all", "strings"); 

in an array you can store several informations, strings or variables. 

 

note: in an array, the index starts at 0, not at 1, this means

.@i$[0] = We

.@i$[1] = are

.@i$[2] = all

.@i$[3] = strings

 

you can also return the whole array like

implode(.@i$, " "); //this retuns all entries of the array, so its "We are all strings"

Pick a random string

.@i$[rand(3)] // because index starts at 0, and rand(3) means random 0, 1, 2, or 3 

 

Note: i use .@ as temporal npc variables, this means they got deleted again once the npc finished and you don't waste memory to perm save it

Note 2: .@i$ is just an example, you can use any name you want for your strings or variables

 

about name of items, you can use getitemname. This works either with the ID or with the constant

getitemname(501) or getitemname(Red_Potion), you can also youe it for your arrays

 

setarray(.@items[0], Red_Potion, Yellow Potion, Orange Potion);
.@r = rand(2); // .@r is either 0, 1, or 2
getitem(.@items[.@r]), 1; // you get your item from the array
mesf("Congratiulations, you got a %s", getitemname(.@r)); //it receives the name of the item

mesf is how we use it if you want do it with huld, you put %s as a placeholder for strings, %d as placeholder for variables, then after the comma you call them. If you want to do it the old way, you do

 

mes("Congratulations, you got a "+getitemname(.@r)+""); 

 

same applies for arrays with variables, so if you really want to store them

 

setarray .@items[0], 501, 502, 503, 504, 505; // .@items[0] is 501 and .@items [4] is 505
getitem .@items[rand(4], 1; // random item 0, 1, 2, 3 or 4 

.@items[rand(4)] // because index starts at 0, and rand(3) means random 0, 1, 2, or 3 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.