Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 02/05/21 in all areas

  1. 7 points
    4144

    Upcoming hercules feature

    Already merged into master branch New feature: Items preview in cash shop Can be enabled by: 1. defining ENABLE_CASHSHOP_PREVIEW_PATCH in mmo.h or by configure flag --enable-cashshop-preview-patch 2. Then need apply this nemo patch http://nemo.herc.ws/patches/ExtendCashShopPreview/ Feature can works only if option in server side enabled and enabled patch in client side. In other case cash shop will be corrupted
  2. 2 points
    Pokemon League Map Hi, I'm doing some duel maps. pokemon league map, can be used as a duel map or map for any event, depending on your creativity. Did you see the dueling map of the yugi-oh? Haven't seen it yet? can also be used for dueling, or for any event that is map print: Yugi-oh duel map
  3. 2 points
    Ai4rei

    Search by image in NPC list

    For various reasons an idea came up, to have a reverse search (or search-by-image) function in the NPC list. The question is, would there be general demand for such a function, or not?
  4. 1 point
    Kuya Jeo

    @market clone

    Enable the HPMHooking plugin NOTE : HPMHooking.c is already in src/plugin folder, just enable it in makefile edit makefile.ini and makefile in trunk/src/plugin enable it too in conf/plugin.conf recompile your server
  5. 1 point
    Kuya Jeo

    Error adding @pk plugin

    did you put your plugin file in the src/plugins folder? to make it easier to compile just command make clean && make all
  6. 1 point
    Kuya Jeo

    I CAN'T EDIT MAX LEVEL 255/120

    trunk/src/common/mmo.h #define MAX_LEVEL 175 change into #define MAX_LEVEL 255 Next is trunk/conf/map/battle/player.conf this will make 255 stats // Max limit of char stats. (AGI, STR, etc.) max_parameter: 99 change into // Max limit of char stats. (AGI, STR, etc.) max_parameter: 255 Next is trunk/conf/map/battle/client.conf max_lv: 99 change it to (same with the aura_lv if you want 255 player have a blue aura) max_lv: 255 next step is trunk/db/pre-re/job_db.conf you can use this one, not yet tested but give it a try Link : https://pastebin.com/QaB3Y3Tv Done forget to recompile your server after..
  7. 1 point
    I recommend Kuya Jeo legit.
  8. 1 point
    PM ME here or in my FB Page
  9. 1 point
    Kuya Jeo

    Completely replace job sprite?

    Make an invisible/blank spr, actually its a little bit time consuming because you need to replace them all
  10. 1 point
    astralprojection

    MvP Controller

    //===== Hercules Script ====================================== // MVP Spawn Controller //===== By: ================================================== // astralprojektion //===== Current Version: ===================================== // 1.3 //===== Description: ========================================= // Control MVP Spawn with script. MVP will not respawn on server start or reload using flag. // Delete or Comment all MVP and mini boss spawn at npc/pre-re/mobs/dungeons/ or /fields. // Make sure set at NifInvasion to make it work. // OnLoDDead: // // Set LOD as dead ang next respawn is 5580sec // $S11373 = 2; $T11373 = (gettimetick(2) + 5580); // //===== Additional Comments: ================================= // 1.0 Initial Release // 1.1 Use TimeStamp when mvp is killed // Fixed typo on MVP_Map array. // 1.2 Set Variables to Global. // 1.3 Include some Mini Boss on the controller // Added PvP On/Off MvP is alive // Integrate LOD invasion // Added @mvpcontroller command to reset all or a specific mvp and other settings. //============================================================ /* Credits to Meko https://herc.ws/board/files/file/326-array-manipulation-functions/ */ function script array_find { [email protected] = getarraysize(getarg(0)); [email protected] = getarg(2, false); freeloop(true); for ([email protected] = getarrayindex(getarg(0)); [email protected] < [email protected]; [email protected]) { if (([email protected] && (getelementofarray(getarg(0), [email protected]) != getarg(1))) || (!([email protected]) && (getelementofarray(getarg(0), [email protected]) == getarg(1)))) { freeloop(false); return [email protected]; } } freeloop(false); return -1; } - script mvpcontroller FAKE_NPC,{ end; OnNPCKillEvent: if(array_find(.mvpid, killedrid) >= 0 ){ for( [email protected] = 0; [email protected] < getarraysize(.mvpid); [email protected]++ ) { if( killedrid == .mvpid[[email protected]] && strcharinfo(PC_MAP) == .mvpmaps$[[email protected]]) { // 1 - Alive 2 - Dead setd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]], 2); // current time + respawn time (seconds) setd("$T"+.mvpa[[email protected]]+.mvpid[[email protected]],gettimetick(2)+(.mvptime[[email protected]]*60)); setd("$P"+.mvpa[[email protected]]+.mvpid[[email protected]]+"$", strcharinfo(PC_NAME)); if( killedrid == 1120 || killedrid == 1096 || killedrid == 1388 ) { if(.announce) announce "A mini boss monster [ "+strmobinfo(1,killedrid)+" ] at "+strcharinfo(PC_MAP)+" has been slain.",bc_all; } else { if(.announce) announce "A boss monster [ "+strmobinfo(1,killedrid)+" ] at "+strcharinfo(PC_MAP)+" has been slain.",bc_all; if(.pvp){ removemapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpoff .mvpmaps$[[email protected]]; } } break; } } } end; OnSettings: while(1){ switch(select( " ~ PvP On Map [ "+((.pvp)?"^28bf00Yes^000000":"^ff0000No^000000")+" ]:"+ " ~ Announce [ "+((.announce)?"^28bf00Yes^000000":"^ff0000No^000000")+" ]:"+ " ~ Reset All MvP:"+ " ~ Reset Specific MvP:"+ " ~ ^777777Close^000000" )) { case 1: .pvp =! .pvp; for( [email protected] = 0; [email protected] < getarraysize(.mvpid); [email protected]++ ) { if ( getd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]]) < 2 || getd("$T"+.mvpa[[email protected]]+.mvpid[[email protected]]) <= gettimetick(2) ) { // if mini boss, just ignore pvp if(.pvp){ if(.mvpid[[email protected]] == 1120 || .mvpid[[email protected]] == 1096 || .mvpid[[email protected]] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpon .mvpmaps$[[email protected]]; } } else { removemapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpoff .mvpmaps$[[email protected]]; } } } break; case 2: .announce =! .announce; break; case 3: freeloop(1); for( [email protected] = 0; [email protected] < getarraysize(.mvpid); [email protected]++ ) { setd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]], 1); setd("$T"+.mvpa[[email protected]]+.mvpid[[email protected]], 0); setd("$P"+.mvpa[[email protected]]+.mvpid[[email protected]]+"$",""); killmonsterall .mvpmaps$[[email protected]]; } for( [email protected] = 0; [email protected] < getarraysize(.mvpid); [email protected]++ ) { if( compare( .mvpmaps$[[email protected]], "prt_maze03" ) && .mvpid[[email protected]] == 1039 ) { // Baphomet monster .mvpmaps$[[email protected]],100,100,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "treasure02" ) && .mvpid[[email protected]] == 1112 ) { // Drake monster .mvpmaps$[[email protected]],101,151,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "pay_dun04" ) && .mvpid[[email protected]] == 1150 ) { // moonlight monster .mvpmaps$[[email protected]],120,115,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "tur_dun04" ) && .mvpid[[email protected]] == 1312 ) { // turtle monster .mvpmaps$[[email protected]],99,93,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "moc_pryd06" ) && .mvpid[[email protected]] == 1511 ) { // amon monster .mvpmaps$[[email protected]],102,166,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "ayo_dun02" ) && .mvpid[[email protected]] == 1688 ) { // lady monster .mvpmaps$[[email protected]],150,90,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "niflheim" ) && .mvpid[[email protected]] == 1373 ) { // LOD donpcevent("NifInvasion::OnSpawn"); } else { monster .mvpmaps$[[email protected]],0,0,"--ja--",.mvpid[[email protected]],1; } if(.pvp){ if(.mvpid[[email protected]] == 1120 || .mvpid[[email protected]] == 1096 || .mvpid[[email protected]] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpon .mvpmaps$[[email protected]]; } } else { removemapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpoff .mvpmaps$[[email protected]]; } } freeloop(0); dispbottom "All MVP has been reset."; break; case 4: set [email protected]$,""; freeloop(1); for( [email protected] = 0; [email protected] < getarraysize(.mvpid); [email protected]++ ) set [email protected]$, [email protected]$+getmonsterinfo(.mvpid[[email protected]],0)+" - ("+.mvpmaps$[[email protected]]+"):"; set [email protected]$, [email protected]$+" ~ ^777777Cancel^000000"; freeloop(0); set [email protected], select([email protected]$)-1; setd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]], 1); setd("$T"+.mvpa[[email protected]]+.mvpid[[email protected]], 0); setd("$P"+.mvpa[[email protected]]+.mvpid[[email protected]]+"$",""); killmonsterall .mvpmaps$[[email protected]]; monster .mvpmaps$[[email protected]],0,0,"--ja--",.mvpid[[email protected]],1; if(.pvp){ if(.mvpid[[email protected]] == 1120 || .mvpid[[email protected]] == 1096 || .mvpid[[email protected]] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpon .mvpmaps$[[email protected]]; } } else { removemapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpoff .mvpmaps$[[email protected]]; } dispbottom "Monster [ "+strmobinfo(1,.mvpid[[email protected]])+" ] at "+.mvpmaps$[[email protected]]+" has been reset."; break; default: close; } } close; OnTimer60000: // Let recheck after a minute. for( [email protected] = 0; [email protected] < getarraysize(.mvpid); [email protected]++ ) { /* $S 1 - Alive $S 2 - Dead */ // If MvP status is not yet set if ( getd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]]) == 2 && getd("$T"+.mvpa[[email protected]]+.mvpid[[email protected]]) <= gettimetick(2) ) { // check if MvP has fixed spawn location in the map. if( compare( .mvpmaps$[[email protected]], "prt_maze03" ) && .mvpid[[email protected]] == 1039 ) { // Baphomet monster .mvpmaps$[[email protected]],100,100,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "treasure02" ) && .mvpid[[email protected]] == 1112 ) { // Drake monster .mvpmaps$[[email protected]],101,151,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "pay_dun04" ) && .mvpid[[email protected]] == 1150 ) { // moonlight monster .mvpmaps$[[email protected]],120,115,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "tur_dun04" ) && .mvpid[[email protected]] == 1312 ) { // turtle monster .mvpmaps$[[email protected]],99,93,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "moc_pryd06" ) && .mvpid[[email protected]] == 1511 ) { // amon monster .mvpmaps$[[email protected]],102,166,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "ayo_dun02" ) && .mvpid[[email protected]] == 1688 ) { // lady monster .mvpmaps$[[email protected]],150,90,"--ja--",.mvpid[[email protected]],1; // Initiate LOD invasion at Niflheim } else if( compare( .mvpmaps$[[email protected]], "niflheim" ) && .mvpid[[email protected]] == 1373 ) { // LOD donpcevent("NifInvasion::OnSpawn"); } else { // Spawn the MvP at random location. monster .mvpmaps$[[email protected]],0,0,"--ja--",.mvpid[[email protected]],1; } if(.announce) announce "Monster [ "+strmobinfo(1,.mvpid[[email protected]])+" ] at "+.mvpmaps$[[email protected]]+" has been spawned.",bc_all; // set status of MvP as ALIVE! setd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]], 1); // reset killer name. setd("$P"+.mvpa[[email protected]]+.mvpid[[email protected]]+"$", ""); if(.pvp){ // if mini boss, just ignore pvp if(.mvpid[[email protected]] == 1120 || .mvpid[[email protected]] == 1096 || .mvpid[[email protected]] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpon .mvpmaps$[[email protected]]; } } else { removemapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpoff .mvpmaps$[[email protected]]; } } } initnpctimer(); end; OnCheck: OnPCLoginEvent: [email protected] = 0; query_sql "SELECT DATABASE()", [email protected]_db$; query_logsql "SELECT DATABASE()", [email protected]_db$; query_sql( "SELECT COUNT(`monster_id`) AS `total`,`char`.`name`,`kill_char_id` FROM "[email protected]_db$+".`mvplog`"+" LEFT JOIN "[email protected]_db$+".`char` ON `char`.`char_id` = `mvplog`.`kill_char_id` WHERE `map` <> 'guild_vs5' AND DATE_FORMAT( `mvp_date`, '%Y-%m-%d') = DATE_FORMAT( now(), '%Y-%m-%d') GROUP BY `kill_char_id` ORDER BY `total` DESC LIMIT 10",[email protected],[email protected]$,[email protected]_char_id ); for( [email protected] = 0; [email protected] < getarraysize([email protected]_char_id); [email protected]++ ) { if(getcharid(CHAR_ID_CHAR) == [email protected]_char_id[[email protected]]){ [email protected] = [email protected]+1; [email protected] = [email protected][[email protected]]; } } if ( [email protected] > 0 && [email protected] < 4 ) { if(countitem(.topreward) == 0){ dispbottom "Congratulations you ranked as #"[email protected]+" MvP Hunter for today. Total kill "[email protected]; getitembound .topreward,1,4; equip(.topreward); } } else { if(countitem(.topreward) > 0){ delitem .topreward,countitem(.topreward); dispbottom "Sorry you have lost your rank as Top 3 MvP Hunter of the day."; } } addtimer 300000,strnpcinfo(0) + "::OnCheck"; end; OnInit: .topreward = 31488; // top mvp daily reward .toprange = 3; // Only Top 3 gets the reward .announce = 1; // shall we announce mvp kills and spawn? (yes = 1 no = 0) .pvp = 1; // shall will make the map pvp? (yes = 1 no = 0) bindatcmd("mvpcontroller","mvpcontroller::OnSettings",99,99); // Mvp ids setarray .mvpid[0],1511,1096,1096,1388,1039,1272,1272,1046,1046,1389,1112,1115,1115,1418,1252,1120,1120,1120,1120,1086,1492,1251,1147,1147,1059,1150,1087,1190,1038,1157,1159,1312,1373,1630,1688; // Mvp Index is used because there are same mvp that spawn on different maps. setarray .mvpa[0],1,1,2,1,1,1,2,1,2,1,1,1,2,1,1,1,2,3,4,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1; // MvP maps setarray .mvpmaps$[0],"moc_pryd06","pay_fild04","xmas_dun01","yuno_fild02","prt_maze03","gl_chyard","gld_dun04","gef_dun02","gld_dun02","gef_dun01","treasure02","gld_dun01","pay_fild11","gon_dun03","xmas_fild01","gld_dun04","pay_fild04","prt_maze03","treasure02","prt_sewb4","ama_dun03","xmas_dun02","anthell02","gld_dun03","mjolnir_04","pay_dun04","gef_fild14","gef_fild10","moc_pryd04","in_sphinx5","moc_fild15","tur_dun04","niflheim","lou_dun03","ayo_dun02"; // How many minutes to respawn? setarray .mvptime[0],60,60,60,60,120,60,480,120,480,60,120,480,120,95,120,240,60,114,32,60,91,60,120,480,120,60,60,120,60,60,120,60,93,117,420; freeloop(1); for( [email protected] = 0; [email protected] < getarraysize(.mvpid); [email protected]++ ) { // If MvP status is not yet set if ( getd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]]) < 2 || getd("$T"+.mvpa[[email protected]]+.mvpid[[email protected]]) <= gettimetick(2) ) { // check if MvP has fixed spawn location in the map. if( compare( .mvpmaps$[[email protected]], "prt_maze03" ) && .mvpid[[email protected]] == 1039 ) { // Baphomet monster .mvpmaps$[[email protected]],100,100,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "treasure02" ) && .mvpid[[email protected]] == 1112 ) { // Drake monster .mvpmaps$[[email protected]],101,151,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "pay_dun04" ) && .mvpid[[email protected]] == 1150 ) { // moonlight monster .mvpmaps$[[email protected]],120,115,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "tur_dun04" ) && .mvpid[[email protected]] == 1312 ) { // turtle monster .mvpmaps$[[email protected]],99,93,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "moc_pryd06" ) && .mvpid[[email protected]] == 1511 ) { // amon monster .mvpmaps$[[email protected]],102,166,"--ja--",.mvpid[[email protected]],1; } else if( compare( .mvpmaps$[[email protected]], "ayo_dun02" ) && .mvpid[[email protected]] == 1688 ) { // lady monster .mvpmaps$[[email protected]],150,90,"--ja--",.mvpid[[email protected]],1; // Initiate LOD invasion at Niflheim } else if( compare( .mvpmaps$[[email protected]], "niflheim" ) && .mvpid[[email protected]] == 1373 ) { // LOD donpcevent("NifInvasion::OnSpawn"); } else { // Spawn the MvP at random location. monster .mvpmaps$[[email protected]],0,0,"--ja--",.mvpid[[email protected]],1; } // set status of MvP as ALIVE! setd("$S"+.mvpa[[email protected]]+.mvpid[[email protected]], 1); // status is alive (1) // reset killer name. setd("$P"+.mvpa[[email protected]]+.mvpid[[email protected]]+"$", ""); // killer name reset if(.pvp){ // if mini boss, just ignore pvp if(.mvpid[[email protected]] == 1120 || .mvpid[[email protected]] == 1096 || .mvpid[[email protected]] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpon .mvpmaps$[[email protected]]; } } else { removemapflag .mvpmaps$[[email protected]], mf_pvp_nocalcrank; pvpoff .mvpmaps$[[email protected]]; } } } freeloop(0); initnpctimer(); end; } /* If you want your player have access to spawn time, you can use this function to display status of each MvP and who killed them { Id: 501 AegisName: "Red_Potion" Name: "Red Potion" Type: "IT_HEALING" Buy: 50 Weight: 70 Script: <" callfunc "F_MVPTime"; "> }, */ function script F_MVPTime { mes "^FF0000MvP Status^000000"; for( [email protected] = 0; [email protected] < getarraysize(getvariableofnpc(.mvpid,"mvpcontroller")); [email protected]++ ) { [email protected] = getd("$T" +getvariableofnpc(.mvpindex[[email protected]],"mvpcontroller") + getvariableofnpc(.mvpid[[email protected]],"mvpcontroller")); [email protected] = getd("$S" +getvariableofnpc(.mvpindex[[email protected]],"mvpcontroller") + getvariableofnpc(.mvpid[[email protected]],"mvpcontroller")); set [email protected], ([email protected] - gettimetick(2)) / 3600; set [email protected], ([email protected] - gettimetick(2))%3600/60; set [email protected], ([email protected] - gettimetick(2))%60; set [email protected]$,getmonsterinfo( getvariableofnpc(.mvpid[[email protected]], "mvpcontroller"),0 ); set [email protected]$,getvariableofnpc(.mvpmaps$[[email protected]], "mvpcontroller"); set [email protected]$,getd("$P"+getvariableofnpc(.mvpindex[[email protected]], "mvpcontroller") + getvariableofnpc(.mvpid[[email protected]], "mvpcontroller") +"$"); mes (([email protected] == 1) ? "[ ^01DF01+^000000 ]" : "[ ^FF0000x^000000 ]")+((getstrlen( [email protected]$ ) > 10 ) ? " ^0055FF"+substr([email protected]$,0, 10)+"^000000" : " ^0055FF"[email protected]$+"^000000")+" ^777777"[email protected]$+"^000000 "; if( [email protected] == 2 ) { mes "^FF0000"+(([email protected]) ? [email protected] +"h" : "")+" "+(([email protected]) ? [email protected] +"m" : "")+" "+(([email protected]) ? [email protected] +"s" : "")+"^000000 "+"^777777 kiiled by "[email protected]$+"^000000"; } } close; } What does it do? - prevents spawn of mvp on each server starts or reload. - spawns mvp or mini only at specific time based when it was killed + spawn time - reward x top mvp killers. Cons: - you can not use convex mirrors to show mvp in the map - you can not find mvp using @whereis. How to use: - Delete or Comment target MVP and mini boss spawn from your npc/pre-re/mobs/dungeons/ or /fields. - Add these mvps to array. FAQ: #Q1 What the heck is this? setarray .mvpa[0],1,1,2,1,1,1,2,1,2,1,1,1,2,1,1,1,2,3,4,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1; #A1: since there are same kind of MVP spawn on multile map (i.e Angeling spawns at pay_fild04, xmas_dun01, yuno_fild03) those numbers are the unique identifiers. if there is only 1 spawn, then just write 1. succeeding spawn is 2 then 3 .... All other suggestions to simplify and improve @AnnieRuru yohoo! my master.
  11. 1 point
    Kuya Jeo

    Completely replace job sprite?

    1. Copy the monster.spr and monster.act you want. 2. Rename the monster.spr and monster.act that same with the job that you want to replace 3. replace the original spr and act file of the job you want to replace
  12. 1 point
    Inzanity

    Completely replace job sprite?

    Of course you can just replace the sprite in the .grf you are using. This will make the client show the new sprite (which can be anything) for the selected job. Might look weird in some scenarios since player sprites are of course the most detailed in regards to movement and animation indexes. But if its as simple as that, for example using a poring.spr/.act, just add it to your server grf and name it the same as for example the swordsman spr/act and follow the folder structure. Your client (if data.ini is setup properly) will read your server grf first, notice that Swordman has a poring sprite and load that, instead of the normal sprite.
  13. 1 point
    Caspian

    Untranslated buttons?

    These are BMP images, you can find it in your GRF and translate by editing the picture or you can find a data folder with these files already translated...
  14. 1 point
    Kuya Jeo

    Untranslated buttons?

    Did you try to update your grf files? https://github.com/zackdreaver/ROenglishRE I used this one, i didnt encounter any problem using 2019 client
  15. 1 point
    From last release in hercules was added new shop type: expanded barter shop. This shop allow buy item with different amount and pay with other items or with money. For removed items supported refine levels. Also this shop allow infinite or limited numbers in shop. Limited numbers saved into database. For use shop example script uncomment in file npc/scripts_custom.conf this line: //"npc/custom/expandedbartershop.txt", This shop supported from clients: Ragexe: 2019-11-20 and newer RagexeRE: 2019-11-06 and newer Ragexe zero: 2019-11-27 and newer Same sample images:
  16. 1 point
    Minuvas

    New life for RO

    This looks like a great project. RO is essentially the "skin" for the project I'm currently doing, but I'm not married to the game itself. I really look forward to any attempts to reinvent the client as you've imagined. Will be following.
  17. 1 point
    Kuya Jeo

    Mass Seller

    Try to put another condition in this part if( [email protected]_equip[[email protected]] ){ something like this. if( [email protected]_equip[[email protected]] && getiteminfo( @inventorylist_id[[email protected]], ITEMINFO_TYPE ) == IT_ETC){ i really dont test it. maybe just give it a try.
  18. 1 point
    Kuya Jeo

    MVP Respawn on server restart

    Its possible for script by killing all the mobs in the map something like killallmonsterall "prontera"; but you need to put it all in the MVP Maps. Sample : this will kill all mobs after restart and reloadscript - script MVPKILLRESTART FAKE_NPC,{ OnInit: killmonsterall "prt_maze03"; // Kill Baphomet and all monster in the map cleanmap "prt_maze03"; // Clean all drops in the map end; }
  19. 1 point
    Hercules was updated from search_freecell to search_free_cell you need to change 2793 to look like this: map->search_free_cell(NULL, m, &x, &y, range, range, 1);
  20. 1 point
    astralprojection

    Hunting Mission

    its very impossible to fix that unless you showing the script.
  21. 1 point
    then this mean plugin not updated yet
  22. 1 point
    Kuya Jeo

    Plugin Call Event

    if you want to make it a new command then used bindatcmd Try this one, just change the content if you want - script Sample_Atcmd FAKE_NPC,{ OnInit: // This command can only use for GM Group 99 bindatcmd "newcommand",strnpcinfo(3)+"::OnNewCommand",99,99; end; OnNewCommand: mes "[ Admin Command ]"; mes "Choose what option you want to perform."; next; switch(select("Event 1:Event 2")){ // Attached Player with RID case 1: mes "[ Admin Command ]"; mes "You selected Event 1."; close2; doevent "EventNPC_1::OnEventStart"; break; // No Player Attached in the NPC case 2: mes "[ Admin Command ]"; mes "You selected Event 2."; close2; donpcevent "EventNPC_2::OnEventStart"; break; } end; }
  23. 1 point
    do what noobzter003 talked. list and compile 2 archives ExtendedBG and ExtendedBG-char check it!!
  24. 1 point
    just compile this 2 plugins ExtendedBG ExtendedBG-char . im using latest git also its working on my test server.
  25. 1 point
    Neffletics

    No Delay Program

    You have to write it yourself. I manually applied hard delays in my server; it counts the animation speed as well.
  26. 1 point
    https://github.com/zackdreaver/ROenglishRE/blob/master/Ragnarok/data/luafiles514/lua files/transparentItem/transparentItem.lub ?
  27. 1 point
    If you need some help, you are free to send me a message, im willing to help 😎
  28. 1 point
    Kuya Jeo

    Frost Asura

    I think he got double damage because the damage is based on the damage with GR Armor Example Scenario is something like this : Player A has an armor with GR Card then Player B hit him with asura, then Player A got 15k damage, then when the Player A got freeze/frozen, Player B asura again the Player A and Player A got 35k Damage.. This is not a double damage, asura with freeze/frozen player ignores the GHOST Property of the player A Damage is same without an Armor with GR Card
  29. 1 point
    Finaly find it, it come from this: In status.c, status_calc_regen, minimum value is 1, means all job whatever if they have skill or sitting regen bonus, will display this "1" heal regen if (regen->skill != NULL) { regen->skill->hp = cap_value(regen->skill->hp, 1, INT16_MAX); regen->skill->sp = cap_value(regen->skill->sp, 1, INT16_MAX); } if (regen->sitting != NULL) { regen->sitting->hp = cap_value(regen->sitting->hp, 1, INT16_MAX); regen->sitting->sp = cap_value(regen->sitting->sp, 1, INT16_MAX); } We've change for this and it's work fine if (regen->skill != NULL) { regen->skill->hp = cap_value(regen->skill->hp, 0, INT16_MAX); regen->skill->sp = cap_value(regen->skill->sp, 0, INT16_MAX); } if (regen->sitting != NULL) { regen->sitting->hp = cap_value(regen->sitting->hp, 0, INT16_MAX); regen->sitting->sp = cap_value(regen->sitting->sp, 0, INT16_MAX); }
  30. 1 point

    Version 1.0

    4789 downloads

    So here it is The Updated & Released Castle City of Invek, or just Invek for short. http://herc.ws/board/topic/1400-map-release-city-of-invek/ Please stop by my thread and give me your input if you download this file.
  31. 1 point
    Ind

    Hercules Ultimate Localization Design

    Hercules Ultimate Localization Design Hello~! - What?! Servers are now able to run under any number of languages, without having any of the default files modified Designed by Haruna and Ind Translating NPCs without editing them By launching map server with the --generate-translations param a .pot (.po template) file will be created with all of the servers translate-able strings (including all npc dialogue), this file can be edited in text mode or by utilising any .po editor (there are many out there; for a high range of OSes) A .po file does not need to be fully translated to be used, map server will know when loading the file, and will fallback to the hardcoded string in the npc files as necessary Users are able to change their language with the new @lang command, @lang controls what language users see in @commands (msg_txt stuff) as well as over npc dialogues map-server.conf has a new setting called default_language where server owners may specify which language should be used as a base When you have a new .po file you want map server to use, add it to db/translations.conf Easy to Maintain Since .po is a widely used format there are many tools that can help with merging for example Poedit, which easily consolidates a translated .po file with a newly generated .pot. For example when you have a translated .po and since it was created npc dialogs were added or modified all you have to do is launch map server to generate a new .pot, open your old .po in Poedit, go "Catalog -> Update from POT file" and it will insert the new translatable strings without touching your existing translations, it will also notify you of any "obsolete" strings that are in your .po file but that are no longer in useScript Command Macro Besides messages.conf, all the dialogue utilised by 'mes' and 'select' is included in the .pot automatically, this patch also introduces a mechanism for utilising strings outside of these commands, the script macro _() which can be employed just as if it were a script function, for example set [email protected]$,_("Available"); tells map server to export "Available" as a translate-able string when it is run with --generate-translations (when running map server normally the macro has no overhead during runtime)Special Thanks to Raizen and Roberto from Cronus, we would not have worked on this if it weren't for themLinks~! CommitEditing Example
  32. 1 point
    http://upaste.me/f8b42118100b0bab2 ^ This is as it is version, made months ago, there's no compile warnings/errors, but dont' know if it works or not with new rev, How it works? Add Following to item: Charm: true in item_db.conf in whichever item you want.
  33. 1 point
    Will probably take a while, after my pc's psu blew up.
×
×
  • Create New...

Important Information

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