-
Posts
146 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Posts posted by ADMSarah
-
-
Any changes using latest commit?
-
1 hour ago, hendra814 said:
yes sure, how about your server now?
Still running but need more improvement
-
1
-
-
3 hours ago, hendra814 said:
yes, fine and healhty as always.
What's up! ADMSarah here if you still remember xD
-
Shadow gear crafting NPC
NPC that can craft 4th job shadow gears
- added more dialog to make the npc convinient to use and easy to understand
- Added effects
- Make the requirements for renewal server
If you have some suggestion to make the npc better or any support feel free to ask me
-
Submitter
-
Submitted03/04/25
-
Category
-
Video
-
Content AuthorADMSarah
-
-
How to make the duplicates to invisible NPC? also I would like to separate the parameter settings to a main npc.
-
Just now, Chaos92 said:
maybe antivirus/malware could do that. and make sure u have the required .NET Framework installed.
Well I didn't change anything it just happen that one day it is not working anymore...
Regarding .NET Framework do you have the exact link for that? maybe that's the problem but still weird that it works before without noticing that framework thing....
-
I'm not sure what happens but this is working on my end before. I tried to uninstall and install again the application but still not showing up after I click it..
-
Anyone encouter the same problem wherein I can't open GRF editor? I check every possibilities that may cause such as anti virus blocking it but I think no...
-
Thank you for this
By the way, can you share he mobdb.yml for Woodie
thank you!
-
1
-
-
Anyone can help, how can I add full AP recovery on the Healer NPC? thank you
-
Someone can help to fix this script? After choosing roll the NPC got stocked up and the console tell that there's something wrong with the `rand` function not sure what is it and can you also give me an idea so that I can use it in the future as a reference thank you!
Quotevend,217,289,4 script Zeny Machine 2_DROP_MACHINE,{
mes .name$;
mes (gettime(3)>= 6&&gettime(3)<= 12?"Good Morning":(gettime(3)>=13&&gettime(3)<=18?"Good afternoon":"Good Night"))+", ^FFA500"+strcharinfo(0)+"^000000!";
mes "shopping in the city?!";
mes "How about you try your luck here?";
next;
switch(select("^0055FFRoll Machine!^000000:Information:Cancel")){
case 1:
mes .name$;
mes "Are you sure you want to roll?";
next;
if(select("^0055FFYes, please!^000000:No, I'm afraid")==2) end;
L_RollAgain:
callsub OnPayMachine;
callsub OnRollMachine;
mes .name$;
mes "Would you like to try again?";
if(select("Try again!:Cancel")==2) end;
clear();
goto L_RollAgain;
break;
case 2:
mes .name$;
mes "To try your luck.";
mes "You need the following:";
if(.Zeny) mes "- ^0055FF"+callfunc("F_InsertComma",.Zeny)+"z^000000";
if(.ItemID[0])
for(.@i=0;.@i<getarraysize(.ItemID);.@i++)
mes "- ^0055FF"+.ItemAmt[.@i]+" "+getitemname(.ItemID[.@i])+"^000000";
if(.PointName$[0] != "")
for(.@i=0;.@i<getarraysize(.PointName$);.@i++)
mes "- ^0055FF"+.PointCost[.@i]+" "+.PointName$[.@i]+"^000000";
for(.@i=0;.@i<getarraysize(.Prizes);.@i+=3){
if(.@i%10 == 0){
next;
mes .name$;
mes "This are the prize list:";
}
mes "- <ITEM>"+.Prizes[.@i+1]+"x "+getitemname(.Prizes[.@i])+"<INFO>"+.Prizes[.@i]+"</INFO></ITEM>";
}
break;
case 3:
mes .name$;
mes callfunc("F_Bye");
mes "Come see me when you want to try your Machine!";
break;
}
end;OnPayMachine:
if(.Zeny && Zeny < .Zeny)
.@error$[.@a++] = "- ^FF520000000Zeny^000000";
if(.ItemID[0])
for(.@i=0;.@i<getarraysize(.ItemID);.@i++)
if(countitem(.ItemID[.@i]) < .ItemAmt[.@i])
.@error$[.@a++] = "- ^FF520000000"+getitemname(.ItemID)+"^000000";
if(.PointName$[0] != "")
for(.@i=0;.@i<getarraysize(.PointName$);.@i++)
if(getd(.PointVar$[.@i]) < .PointCost[.@i])
.@error$[.@a++] = "- ^FF520000000"+.PointName$[.@i]+"^000000";
if(.@error$[0] == ""){
if(.Zeny)
Zeny -= .Zeny;
if(.ItemID[0])
for(.@i=0;.@i<getarraysize(.ItemID);.@i++)
delitem .ItemID[.@i],.ItemAmt[.@i];
if(.PointName$[0] != "")
for(.@i=0;.@i<getarraysize(.PointName$);.@i++)
setd .PointVar$[.@i],getd(.PointVar$[.@i])-.PointCost[.@i];
return;
}
mes .name$;
mes "Sorry but you don't have enough of the following:";
for(.@i=0;.@i<getarraysize(.@error$);.@i++)
mes .@error$[.@i];
end;OnRollMachine:
.@rand = rand(1,10000);
for(.@i=1;.@i<getarraysize(.Prizes);.@i+=3)
if(.@rand <= .Prizes[.@i+2]){
.@iid[.@x] = .Prizes[.@i];
.@amt[.@x] = .Prizes[.@i+1];
.@x++;
}
.@getitem = rand(.@x);
getitem .@iid[.@getitem],.@amt[.@getitem];
if(inarray(.Announce,.@iid[.@getitem]) >= 0)
announce "Congratulations! "+strcharinfo(0)+" just received "+(.@amt[.@getitem]>1 ? .@amt[.@getitem]+"x":"")+" "+getitemname(.@iid[.@getitem])+" from "+strnpcinfo(0)+"!",0;
return;OnInit:
.name$ = "^00B2EE[ Zeny Machine ]^000000";
/***Payment Configuration***/
.Zeny = 20000000;
setarray .ItemID[0],0;
setarray .ItemAmt[0],0;
setarray .PointName$[0],"";
setarray .PointVar$[0],"";
setarray .PointCost[0],0;
/***Prize Configuration***/
setarray .Prizes[0],//Item ID, Amount, Chance(1-10000)
12246,1,100, //Mystical Card Album
9932,1,300, //Royal Secret Box
616,1,1000, //Old Card Album
11623,5,1000, //White Syrup
12100,50,1000, //Cooked Nine Tail's Tails
12090,50,1000, //Steamed Desert Scorpions
12095,50,1000, //Hwergelmir's Tonicv
12080,50,1000, //Dragon Breath Cocktail
12085,50,1000, //Immortal Stew
12075,50,1000, //Steamed Tongue
12263,5,1000, //Field Manual
12264,10,1000, //Bubble Gum
12265,5,1000, //Life Insurrance
607,50,1000, //Yggdrasil Berry
608,50,1000, //Yggdrasil Seed
25791,1,500, //Inventory Expansion Voucher
27330,1,1, //Kronecker Card
27332,1,1, //Skia Card
27200,1,1, //Nihil Card
27201,1,1, //Agnes Card
27202,1,1, //Juergen Card
27203,1,1, //Spica Card
300127,1,1, //Wolf Card
300129,1,1, //Poe Card
27393,1,1, //Kathryn Card
27395,1,1, //Isaac Card
300307,1,1, //Meyer Card
300309,1,1, //Helmut Card
300421,1,1, //Catherine Card
300423,1,1, //Friedrich Card
300425,1,1, //Crux Card
27196,1,1, //Nihil M. Heine Card
27197,1,1, //Agnes Lugenburg Card
27198,1,1, //Jurgen Wigner Card
27199,1,1, //Spica Nerius Card
300426,1,1, //Crux Findel Card
300424,1,1, //Friedrich S. Heine Card
300422,1,1, //Catherine Gaebolg Card
300308,1,1, //Meyer Lugenburg Card
300130,1,1, //Poe Richard Card
300128,1,1, //Wolf Lugenburg Card
27396,1,1, //Isaac Wigner Card
27331,1,1, //Kronecker G. Heine Card
27333,1,1; //Skia Nerius Cardsetarray .Announce[0],27330,27332,27200,27201,27202,27203,300127,300129,27393,27395,300307,300309,300421,300423,300425,27196,27197,27198,27199,300426,300424,300422,300308,300130,300128,27396,27331,27333,9932;
end;
} -
Looks funny! haha
-
1
-
-
12 minutes ago, rokimoki said:
Sorry I did a mistake copying paste, this is the proper version corresponding to the % configured.
function script AROCG { set .@luckyRate, rand(100); set .@amount, rand(51, 100); // 1% chance set .@chance$, "1%"; if (.@luckyRate >= 0 && .@luckyRate < 49) {// 49% chance set .@amount, rand(1, 10); set .@chance$, "50%"; } else if (.@luckyRate >= 49 && .@luckyRate < 74) { // 25% chance set .@amount, rand(11, 20); set .@chance$, "25%"; } else if (.@luckyRate >= 74 && .@luckyRate < 89) { // 15% chance set .@amount, rand(21, 30); set .@chance$, "15%"; } else if (.@luckyRate >= 89 && .@luckyRate < 94) { // 5% chance set .@amount, rand(31, 50); set .@chance$, "5%"; } getitem 50007, .@amount; announce "[" + strcharinfo(0) + "]: got [" + .@amount + "x " + getitemname(50007) + "] at " + .@chance$ + "% chance, from AsurielRO Coins Bag.", 0; end; }
Thanks Mate!
-
Thank you! works perfectly!
-
Can someone help me to modify this function?
Quotefunction script AROCG {
.@amt = rand(1,100);
getitem 50007,.@amt;
announce "["+strcharinfo(0)+"] got [ "+.@amt+"x "+getitemname(50007)+"] from AsurielRO Coins Bag.",0;
end;
}I want the following:
- 1 to 10 = 99%
- 11 to 20 = 80%
- 21 to 30 = 75%
- 31 to 50 = 50%
- 51 to 100 = 1%
The announcement also includes what are the percentage of each category.
-
I love it!
-
Could you please update this to work on latest rA commit?
-
Is it possible to add multiple shop on this script? Well I think yes but how? like:
- Headgear Shop- Supply Shop
Etc.
-
Awesome work!
-
I want this! check me out
-
11 hours ago, Skorm said:
Pretty close. You can modify it with the NPC settings to get what you want.
I added @grtime since I felt you might not be able to add that on your own.
Thank you so much!
-
1 hour ago, Skorm said:
@Questune Here's a modified version of my goldroom script. You can download free here: https://skorm.gumroad.com/l/wJIhW?layout=profile
//NPCS //Goldroom V1.1 prontera,160,158,2 script Private Gold Room 100,{ mes .npc$; mes "Hello, "+strcharinfo(0)+", I'm the "; mes "Private gold room manager."; mes "Here you can rent your own private gold room."; next; for(.@a = 0;getarraysize(getd(".room"+.@a+"$"));.@a++) { .rmn$ = ".room"+.@a+"$"; .rrm$ = getd(.rmn$+"[0]"); .map$ = getd(.rmn$+"[1]"); .mes$[.@a] = .rrm$; setd ".remain"+.@a+"$", callfunc("t",atoi(getd(".rtime_"+.map$+"$"))-gettimetick(2)); while(.@b<=getarraysize(.srch$)) { .@b++; if(.srch$[.@b-1] != "") { while(.@i<=countstr(.rrm$, .srch$[.@b-1])) { .@i++; if(atoi(getd(".remain"+.@a+"$"))>0) set .mes$[.@a], replacestr(.mes$[.@a], .srch$[.@b-1], getd(getd(".srch$["+(.@b-1)+"]")+.@a+"$"), 1, 1); else set .mes$[.@a], replacestr(.mes$[.@a], .repl$, .empty$, 1, 1); } } set .@i, 0; } set .@b,0; } set .@menu$, implode(.mes$,":"); set .@menu, select(.@menu$)-1; set .@remain, atoi(getd(".remain"+.@menu+"$")); if(strcharinfo(atoi(getd(".type"+.@menu+"$")))==getd(".name" +.@menu+"$") || getgmlevel() >= 60) { if(.@remain>0) { warp getd(".room"+.@menu+"$[1]"),0,0; end; } } if(.@remain>0) { mes .npc$; mes "This room is already in use please pick a different one."; close; } mes .npc$; mes "You may rent this room for ^0000FFYourself^000000, ^0000FFParty members^000000, or ^0000FFGuild members^000000."; next; set .@menu2, select("Myself Only:Party Members:Guild Members")-1; mes .npc$; mes "How long would you like to rent this room?"; next; set @menu, select(.menu2$)-1; if(Zeny<(.price[@menu]*.multi)) { mes .npc$; mes "I'm sorry you don't have enough"; mes "Zeny for that."; emotion ET_CRY; close; } set Zeny, Zeny-(.price[@menu]*.multi); setd(".type" +.@menu+"$", .@menu2); setd(".time" +.@menu+"$", callfunc("t",.times[@menu])); setd(".name" +.@menu+"$", strcharinfo(.@menu2)); setd(".rtime_"+getd(".room"+.@menu+"$[1]")+"$", gettimetick(2)+.times[@menu]); initnpctimer(.cnt$+"#"+.@menu); warp getd(".room"+.@menu+"$[1]"),0,0; end; Oninit: // Room# Room Name , Map ; setarray .room0$ , "PGR 1 = .name, .time, .remain" , "06guild_01"; setarray .room1$ , "PGR 2 = .name, .time, .remain" , "06guild_02"; setarray .room2$ , "PGR 3 = .name, .time, .remain" , "06guild_03"; setarray .room3$ , "PGR 4 = .name, .time, .remain" , "06guild_04"; setarray .room4$ , "PGR 5 = .name, .time, .remain" , "06guild_05"; setarray .room5$ , "PGR 6 = .name, .time, .remain" , "06guild_06"; setarray .room6$ , "PGR 7 = .name, .time, .remain" , "06guild_07"; setarray .room7$ , "PGR 8 = .name, .time, .remain" , "06guild_08"; setarray .srch$, ".name", ".time", ".remain"; //String searched and replaced in the Room Name Field. setarray .mapfs, mf_nomemo, mf_nosave, mf_noteleport, mf_nowarp, mf_nowarpto, mf_noskill; //mapflags setarray .times, 60, 60*15, 60*30, 60*45, 60*60; //In seconds. setarray .price, 10, 150 , 300 , 450 , 600 ; //Price of time multiplied by .multi. set .npc$, "[^0000FFManager^000000]"; //NPC name set .cnt$, "NPC"; //connected npc name set .repl$, ".name, .time, .remain"; //part of the name you want replace by .empty$ if it's not being used. set .empty$, "EMPTY"; // This text will appear when the room is not being used. set .multi, 100000; while(.@a++<=getarraysize(.price)) //Building static menus set .menu2$, .menu2$+(.times[.@a-1]/60)+" minute"+((.times[.@a-1]/60>1)?"s":"")+" costs "+.price[.@a-1]+"M.:"; while(getarraysize(getd(".room"+.@i+"$"))) { setmapflag getd(".room"+.@i+"$[1]"),.mapfs[.@i]; set .maps$, .maps$+"|"+getd(".room"+.@i+"$[1]"); .@i++; } set .maps$, .maps$+"|"; } 06guild_01,50,50,5 script NPC#0 100,500,500,{ if(mobcount(strcharinfo(3),strnpcinfo(0)+"::OnDeathEvent")) { mes .npc$; mes getd(".amnt_"+strcharinfo(3))+" mobs still remain!"; mes "You need to kill them all before I can summon more."; emotion ET_SWEAT; close; } set .@len, getarraysize(getd(".monster"+strnpcinfo(2))); for(.@h = 0; .@h < .@len; .@h += 3) { .@i++; set .@mobs[.@i-1], getd(".monster"+strnpcinfo(2)+"["+.@h+"]"); set .@chnc[.@i-1], getd(".monster"+strnpcinfo(2)+"["+(.@h+1)+"]"); set .@amnt[.@i-1], getd(".monster"+strnpcinfo(2)+"["+(.@h+2)+"]"); set .@menu$, .@menu$+getmonsterinfo(.@mobs[.@i-1],0)+":"; } set .@menu$, .@menu$+"Back to SavePoint"; mes .npc$; mes "Select which mob you'd like me to summon!"; next; set @menu, select(.@menu$)-1; if(@menu>=getarraysize(.@mobs)) { close2; warp "SavePoint",0,0; end; } setd ".drop_"+strcharinfo(3), .@chnc[@menu]; setd ".amnt_"+strcharinfo(3), .@amnt[@menu]; monster strcharinfo(3),0,0,"--ja--",.@mobs[@menu],.@amnt[@menu],strnpcinfo(0)+"::OnDeathEvent"; close; OnTouch: if(strcharinfo(atoi(getvariableofnpc(getd(".type"+strnpcinfo(2)+"$"),.cnt$)))!=getvariableofnpc(getd(".name"+strnpcinfo(2)+"$"),.cnt$) && getgmlevel() <= 60) { warp "SavePoint",0,0; end; } end; OnTimer1000: initnpctimer; setd ".timer"+strnpcinfo(2), (atoi(getvariableofnpc(getd(".rtime_"+strnpcinfo(4)+"$"),.cnt$))-gettimetick(2)); if(gettimetick(2)>=getd(".tick"+strnpcinfo(2))) { setd ".tick"+strnpcinfo(2), gettimetick(2)+60; mapannounce strnpcinfo(4),callfunc("t",getd(".timer"+strnpcinfo(2)))+" remaining!",bc_map|bc_blue; } if( getd(".timer"+strnpcinfo(2)) <= 0 ) { stopnpctimer; mapannounce strnpcinfo(4),"Gold Room Time has ended!",bc_map|bc_blue; mapwarp strnpcinfo(4),"prontera",156,191; killmonster strnpcinfo(4),strnpcinfo(0)+"::OnDeathEvent"; } end; OnDeathEvent: if(!playerattached()) end; getitem 969,rand(getd(".drop_"+strcharinfo(3))); setd ".amnt_"+strcharinfo(3), getd(".amnt_"+strcharinfo(3))-1; if( getd(".amnt_"+strcharinfo(3))<=0 ) mapannounce strcharinfo(3),"All monsters have been killed!",bc_map|bc_blue; end; OnCommandEvent: if ( !compare(getvariableofnpc(.maps$,.cnt$),"|"+strcharinfo(3)+"|") || getgmlevel() >= 99 ) atcommand .@atcmd_command$+" "+ implode( .@atcmd_parameters$," " ); else if (.@atcmd_command$ == "grtime") dispbottom callfunc("t",getd(".timer"+strnpcinfo(2)))+" remaining!"; else message strcharinfo(0), "You're not allowed to use that command here!"; end; OnInit: // Room# <ID> Chance Amount ... setarray .monster0, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; setarray .monster1, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; setarray .monster2, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; setarray .monster3, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; setarray .monster4, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; setarray .monster5, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; setarray .monster6, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; setarray .monster7, 1002, 2 , 100 , 1236, 3, 100, 1095, 4, 100, 1105, 5, 100, 1176, 6, 100; set .cnt$, "Private Gold Room"; //Connecting NPC name (Change this if you change the npc above) set .npc$, "[^0000FF"+strnpcinfo(1)+"^000000]"; //NPC Name set .dlay, 60; //Announce timer delay in seconds bindatcmd "storage",strnpcinfo(3)+"::OnCommandEvent"; //Disabled commands. bindatcmd "warp",strnpcinfo(3)+"::OnCommandEvent"; bindatcmd "savepoint",strnpcinfo(3)+"::OnCommandEvent"; bindatcmd "useskill",strnpcinfo(3)+"::OnCommandEvent"; bindatcmd "skillon",strnpcinfo(3)+"::OnCommandEvent"; bindatcmd "grtime",strnpcinfo(3)+"::OnCommandEvent"; } //DUPLICATIONS 06guild_02,50,50,5 duplicate(NPC#0) NPC#1 100,500,500 06guild_03,50,50,5 duplicate(NPC#0) NPC#2 100,500,500 06guild_04,50,50,5 duplicate(NPC#0) NPC#3 100,500,500 06guild_05,50,50,5 duplicate(NPC#0) NPC#4 100,500,500 06guild_06,50,50,5 duplicate(NPC#0) NPC#5 100,500,500 06guild_07,50,50,5 duplicate(NPC#0) NPC#6 100,500,500 06guild_08,50,50,5 duplicate(NPC#0) NPC#7 100,500,500 //FUNCTIONS function script t { function s; set .@left, getarg(0); if ( .@left <= 0 ) return getarg(0); set .@day, .@left / 86400; set .@hour, .@left % 86400 / 3600; set .@min, .@left % 3600 / 60; set .@sec, .@left % 60; return ( ( .@day ? .@day +" day"+ s( .@day ) : "" ) + ( .@hour ? .@hour +" hour"+ s( .@hour ) : "" ) + ( .@min ? .@min +" min"+ s( .@min ) : "" ) + ( .@sec ? .@sec +" sec"+ s( .@sec,1 ) : "" ) ); function s { return ( ( getarg(0) > 1 ? "s" : "" ) + ( getarg(1,0) ? "" : " " ) ); } }
Thank you!, is this the same of what I wanted?
-
Greetings,
I'm looking around the forum, but I can't find what I'm looking for. Can someone help me create this kind of gold room script? I appreciate it so much! I appreciate any help you can provide.
- Only level 275 can enter the gold room
- You need 1,000,000 Zeny to enter the gold room
- Inside the dungeon you only have 5 hours to stay on the room and farm for gold once you get outside there will be a 1 day cooldown before you can enter again
- You can check the remaining time when you are inside the gold room map by using @grtime
- Pvp is on inside the dungeon
- If you want to go outside the gold room you need to talk to exit npc and if you die you will be respawn to the respawn area or starting area of the map
Hopefully someone can share or help to make this one.
Thank you!
-
I want this as well, can you share this to me?
Utility: MVP Combination Gears
in Utility Script Releases
Posted
View File
MVP Combination Gears
In kRO has a system where you can collect special MVP loot to craft powerful gears. When you kill an MVP, it has a chance to drop
Mysterious Combination Bundle. This is an album-type item that yields a random recipe
in which you can craft powerful gears.
This is just a custom NPC that follows the same logic on this wikipage information: https://hazyforest.com/mvp_combine
If you encounter any problem or you have a suggestion feel free to contact me.