Leaderboard
Popular Content
Showing content with the highest reputation on 02/12/20 in all areas
-
ROCShield is almost 7 years old, i'd be willing to bet that there are circumvention methods by now, if you look for them.1 point
-
1 point
-
prontera,155,181,5 script YmirCoin 757,{ mes "[Ymir Coin Exchanger]"; mes "Just give me the required items and ill give you Coin of Ymir."; mes "Required Mats per ^FF0000"+getitemname(.GiveItem)+"^000000:"; for( set .@i,0; .@i < getarraysize( .Item ) - 1; set .@i,.@i + 2 ) mes "- ^FF0000"+.Item[.@i+1]+" "+getitemname(.Item[.@i]); next; if( select("Make ^FF0000"+getitemname( .GiveItem )+"^000000:Cancel") == 2 ) end; mes "[Ymir Coin Exchanger]"; mes "How many would you like to make?"; next; input .@amount,1,999; mes "[Ymir Coin Exchanger]"; mes .@amount+"x ^FF0000"+getitemname(.GiveItem)+"^000000, is this correct?"; next; if( select("Yes, Make ^FF0000"+.@amount+" "+getitemname( .GiveItem )+"^000000:Cancel") == 2 ) end; for( set .@i,0; .@i < getarraysize( .Item ) - 1; set .@i,.@i + 2 ) if( countitem( .Item[.@i] ) < .Item[.@i+1]*.@amount ){ mes "[Ymir Coin Exchanger]"; mes "Insufficient Materials"; for( set .@i,0; .@i < getarraysize( .Item ) - 1; set .@i,.@i + 2 ) mes "- Need ( "+countitem(.Item[.@i])+"/"+.Item[.@i + 1]*.@amount+" ) "+getitemname( .Item[.@i] ); end; } if(!checkweight(.GiveItem,.@amount)){ mes "Insufficient inventory space or weight."; end; } for( set .@i,0; .@i < getarraysize( .Item ) - 1; set .@i,.@i + 2 ) delitem .Item[ .@i ],.Item[ .@i + 1 ]*.@amount; getitem .GiveItem,.@amount; mes "[Ymir Coin Exchanger]"; mes "You have Made ^FF0000"+.@amount+"x "+getitemname( .GiveItem )+"^000000"; announce "["+strcharinfo(0)+"] has made "+.@amount+"x ["+getitemname( .GiveItem )+"]",0; close; OnInit: // What Item you want to Make ? set .GiveItem,7539; // Item Requirements + Amounts setarray .Item[0], 607,1, 608,1, 512,1; end; } It's much better to check the requirement before giving the item, instead of before selecting MAKE. also added checkweight if ever that the given item is heavier than required materials.1 point
-
1 point
-
yep, you are right the script crashed my test server, because the duplicate tomb is floating type npc, tested and worked... not entirely like tomb per see, because when the scenario 2 player killing same mob id from the list mob, the npc will move to the last killed mob ex: player a killed poring (1002) on prontera 150 150, then npc will spawned there, then after 10 seconds, player B kill poring (1002) too on prontera 180 180, the npc that spwaned after player A killed poring will move to player B killed poring you need many duplicate npc, to match exact number of your amount spawned mobs, or with src mod will be more easier btw here the tested script - script Main NPC -1,{ end; OnNPCKillEvent: if (.state != 1) end; .@inlist = inarray(.moblist[0], killedrid); if (.@inlist == -1) end; .@npcid = getelementofarray(getvariableofnpc(.tombid, "TheTomb"), .@inlist); debugmes "npcid: "+.@npcid; getunitdata(killedgid, .@md); setunitdata(.@npcid, UNPC_MAPID, .@md[UMOB_MAPID]); setunitdata(.@npcid, UNPC_X, .@md[UMOB_X]); setunitdata(.@npcid, UNPC_Y, .@md[UMOB_Y]); setunitdata(.@npcid, UNPC_LOOKDIR, 0); end; OnInit: setarray .moblist[0], 1002, 1003, 1004, 1005; .@moblistsize = getarraysize(.moblist); .@tombcount = getvariableofnpc(.tombcount, "TheTomb"); if (.@moblistsize < .@tombcount) { debugmes "The Tomb count isn't match with the mob count in list"; debugmes "Size of Mob List: "+.@moblistsize+", NPC Tomb Count: "+.@tombcount; end; } .state = 1; end; } - script TheTomb -1,{ end; OnInit: if (strnpcinfo(2) == "") end; .tombcount++; .tombid[.tombcount-1] = getnpcid(0); end; } prontera,0,0,0 duplicate(TheTomb) Tomb#1 112 prontera,0,0,0 duplicate(TheTomb) Tomb#2 112 prontera,0,0,0 duplicate(TheTomb) Tomb#3 112 prontera,0,0,0 duplicate(TheTomb) Tomb#4 1121 point
-
Per-model, RO's polygon limit is very low- It's about 2000, and generally you'll probably want to limit it to about 1600-1800. I don't know if there is a limit per map, but I've found in the past that the framerate starts to get very bad around 8-10,000 models on a single map. (Models, not polygons) It's doubtful you will ever reach that many models on a map intentionally, as even my most detailed maps ever tend to only half half as many models as that (around 4-5000). If you want to make use of complicated, detailed 3D models with higher polycounts, you'll have to split them up into several individual models that you piece together in browedit. I hope that helps.1 point
-
- script Healer -1,{ .@Price = 0; // Zeny required for heal .@Buffs = 1; // Also buff players? (1: yes / 0: no) .@Delay = 10; // Heal delay, in seconds if (@HD > gettimetick(2)) end; if (.@Price) { message strcharinfo(0), "Healing costs " + callfunc("F_InsertComma",.@Price) + " Zeny."; if (Zeny < .@Price) end; if (select("^0055FFHeal^000000:^777777Cancel^000000") == 2) end; Zeny -= .@Price; } specialeffect2 EF_HEAL2; percentheal 100,100; if (.@Buffs) { specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,240000,10; specialeffect2 EF_BLESSING; sc_start SC_BLESSING,240000,10; } if (getbrokenid(1) >= 1) { repairall; } if(getgroupid() >= 5 ){ set(.@min, 5); // duration in minutes sc_start(SC_CP_HELM, (.@min * 1000 * 60), 1); sc_start(SC_CP_ARMOR, (.@min * 1000 * 60), 1); sc_start(SC_CP_SHIELD, (.@min * 1000 * 60), 1); sc_start(SC_CP_WEAPON, (.@min * 1000 * 60), 1); switch ( basejob ) { case Job_Alchemist: set .@spirit, 445; break; case Job_Monk: set .@spirit, 447; break; case Job_Star_Gladiator: set .@spirit, 448; break; case Job_Sage: set .@spirit, 449; break; case Job_Crusader: set .@spirit, 450; break; case Job_SuperNovice: set .@spirit, 451; break; case Job_Knight: set .@spirit, 452; break; case Job_Wizard: set .@spirit, 453; break; case Job_Priest: set .@spirit, 454; break; case Job_Bard: case Job_Dancer: set .@spirit, 455; break; case Job_Rogue: set .@spirit, 456; break; case Job_Assassin: set .@spirit, 457; break; case Job_Blacksmith: set .@spirit, 458; break; case Job_Hunter: set .@spirit, 460; break; case Job_Soul_Linker: set .@spirit, 461; break; default: if ( upper == 1 && baselevel < 70 ) set .@spirit, 494; } if ( .@spirit ) { sc_start4 sc_spirit, 360000, 5, .@spirit,0,0; skilleffect .@spirit, 5; } } if (.@Delay) @HD = gettimetick(2) + .@Delay; end; }1 point