Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/12/20 in all areas

  1. 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
  2. Converted the skill database to YAML
    1 point
  3. 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
  4. 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 112
    1 point
  5. 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
  6. - 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
×
×
  • Create New...