roprontera 1 Posted February 23, 2017 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; Quote Share this post Link to post Share on other sites
0 Ridley 295 Posted February 23, 2017 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 1 roprontera reacted to this Quote Share this post Link to post Share on other sites
0 roprontera 1 Posted February 24, 2017 Thank you Ridley! That F_Rand command did what I need Thanks for the explanation! Quote Share this post Link to post Share on other sites
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?
Share this post
Link to post
Share on other sites