Jump to content

madtoyz

Members
  • Posts

    142
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by madtoyz

  1. How to convert the worm text into english ?

    example :

    [1490] = {
     unidentifiedDisplayName = "Gigantic Lance",
     unidentifiedResourceName = "À𺧸°",
     unidentifiedDescriptionName = {
      "Unidentified item, can be identified with [Magnifier].",
     },
     identifiedDisplayName = "Gigantic Lance",
     identifiedResourceName = "±â°£Æ®·£½º",
     identifiedDescriptionName = {
      "°í´ë ½ÅÀüÀÇ ¼öÈ£ÀÚ¿´´ø °ÅÀεéÀÇ Ã¢À» Å©±â¸¸ ÁÙÀÎ »óÅÂ. ÁøÁ¤ÇÑ ÈûÀ» ²ø¾î³¾ ¼ö ÀÖ´Â ÀÚ°¡ °ÅÀÇ ¾ø´Ù°í ÇÑ´Ù.",
      "ASPD - 10, ÀåÂøÇØÁ¦ ½Ã SP - 600.",
      "½ºÆÄÀÌ·² ÇǾÀÇ Àç»ç¿ë µô·¹ÀÌ 20ÃÊ Ãß°¡.",
      "¼ø¼ö STR 120ÀÌ»óÀÏ ½Ã ATK 300 Ãß°¡.",
      "°è¿­ : ^777777¾ç¼Õâ^000000 °ø°Ý : ^77777720^000000",
      "¹«°Ô : ^7777772000^000000",
      "¹«±â ·¹º§ : ^7777774^000000",
      "¿ä±¸ ·¹º§ : ^777777140^000000",
      "ÀåÂø : ^777777·é³ªÀÌÆ®^000000",
     },
     slotCount = 0,
     ClassNum = 5
    },
    

  2. It's done now? well,congrats to you! also thank you, now I learn one more thing: datainfo/spriterobename.lua/lub

    solved? add a [solved] in front of your thread's title and put a "solved" inside the tag box.

    sorry because i dont know how to change the title...lets the MOD make it.

  3. im using client date 2012-05-15

    edit this: [sPRITE_ROBE_IDs.ROBE_WING_ZERO] = wing_zero,

    to this: [sPRITE_ROBE_IDs.ROBE_WING_ZERO] = "wing_zero",

    why you have this file? cskroption.lub i think this is suppose to be iteminfo.lub

    if you use client 2012-04-10 you need to edit this

    idnum2itemdesctable

    idnum2itemdisplaynametable

    idnum2itemresnametable

    screenRENZORAGNAROK000-1.jpg

    done..from the 1st post until this post,what my problem is about the "" things in data/luafiles514/lua files/datainfo/spriterobename.lub

    thanks allot for helping me from the 1st post i made until solve the problem.

    very appreciate to members :

    ​[sOLVE]

  4. prontera,167,178,3 script Gold Room Manager 965,{
    mes "[ Gold Room Manager ]";
    //mes "Hello, ";
    //mes "How may i serve for you ?";
    mes "I can warp you to the gold room.";
    //mes "Would you like to go there try to get some gold ?";
    //mes "You could be get rich if you lucky enough.";
    next;
    switch(select("Okay.:Not now.")) {
    Case 1:
    mes "[Gold Room Manager]"; 
    //mes "So you have decide to go there.";
    //mes "A wise decision."; 
    mes "You'll be there quickly. c;";
    next;
    mes "[ Gold Room Manager ]"; 
    mes "Enjoy.";
    close2; 
    warp "guild_vs1",50,50; 
    //OnInit:
    //waitingroom "Gold Room Warper",0;
    //end;
    Case 2:
    mes "[Gold Room Manager]"; 
    //mes "Owh....";
    //mes "Okay ;D";
    //mes "It is all up to you.";
    mes "Come back to me if you've changed your mind.";
    close;
    }
    }
    
    //-------- Spawn Monster --------//
    guild_vs1,0,0,0,0 monster Golden Dokebi 1110,1000,0,0,0"GOLDMANAGERNAME::OnMobKilled"
    OnMobKilled:
    getitem 969,10;
    end;
    }
    
    //The Exit to Prontera
    
    guild_vs1,49,49,5 script Exit 902,{
    warp "prontera" ,155,181;
    
    OnInit:
    waitingroom "Prontera",0,0;
    end;
    }

    onmobkilled.jpg

  5. how to do the Golden Dokebi drop gold only ?

    prontera,167,178,3 script Gold Room Manager 965,{
    mes "[ Gold Room Manager ]";
    //mes "Hello, ";
    //mes "How may i serve for you ?";
    mes "I can warp you to the gold room.";
    //mes "Would you like to go there try to get some gold ?";
    //mes "You could be get rich if you lucky enough.";
    next;
    switch(select("Okay.:Not now.")) {
    Case 1:
    mes "[Gold Room Manager]";
    //mes "So you have decide to go there.";
    //mes "A wise decision.";
    mes "You'll be there quickly. c;";
    next;
    mes "[ Gold Room Manager ]";
    mes "Enjoy.";
    close2;
    warp "guild_vs1",50,50;
    //OnInit:
    //waitingroom "Gold Room Warper",0;
    //end;
    Case 2:
    mes "[Gold Room Manager]";
    //mes "Owh....";
    //mes "Okay ;D";
    //mes "It is all up to you.";
    mes "Come back to me if you've changed your mind.";
    close;
    }
    }
    //-------- Spawn Monster --------//
    guild_vs1,0,0,0,0 monster Golden Dokebi 1110,1000,0,0,0
    //The Exit to Prontera
    guild_vs1,49,49,5 script Exit 902,{
    warp "prontera" ,155,181;
    OnInit:
    waitingroom "Prontera",0,0;
    end;
    }
    

  6. this is wing zero information.

    data/luafiles514/lua files/datainfo/spriterobeid.lub

    SPRITE_ROBE_IDs = {
    ROBE_WINGS = 1,
    ROBE_BAG_OF_ADVENTURER = 2,
    ROBE_WINGS_OF_FALLEN_ANGEL = 3,
    ROBE_WING_ZERO = 4,
    ROBE_BLOODWINGS = 5
    }
    

    data/luafiles514/lua files/datainfo/spriterobename.lub

    RobeNameTable = {
    [sPRITE_ROBE_IDs.ROBE_WINGS] = "õ»ç³¯°³",
    [sPRITE_ROBE_IDs.ROBE_BAG_OF_ADVENTURER] = "¸ðÇè°¡¹è³¶",
    [sPRITE_ROBE_IDs.ROBE_WINGS_OF_FALLEN_ANGEL] = "Ÿ¶ôõ»çÀdz¯°³",
    [sPRITE_ROBE_IDs.ROBE_WING_ZERO] = wing_zero,
    [sPRITE_ROBE_IDs.ROBE_BLOODWINGS] = bloodwings,
    }
    RobeNameTable_Eng = {
    [sPRITE_ROBE_IDs.ROBE_WINGS] = "ANGEL_WINGS",
    [sPRITE_ROBE_IDs.ROBE_BAG_OF_ADVENTURER] = "BAG_OF_ADVENTURER",
    [sPRITE_ROBE_IDs.ROBE_WINGS_OF_FALLEN_ANGEL] = "WINGS_OF_FALLEN_ANGEL",
    [sPRITE_ROBE_IDs.ROBE_WING_ZERO] = wing_zero,
    [sPRITE_ROBE_IDs.ROBE_BLOODWINGS] = _bloodwings,
    }
    

    data/cskroption.lub

    [29004] = {
     unidentifiedDisplayName = "wing_zero",
     unidentifiedResourceName = "wing_zero",
     unidentifiedDescriptionName = {
      "Unidentified item, can be identified with [Magnifier].",
     },
     identifiedDisplayName = "wing_zero",
     identifiedResourceName = "wing_zero",
     identifiedDescriptionName = {
      "Large, wings from zero gundam.",
      "All Stats + 1.",
      "Base stats (without modifiers) is equal to 20 or higher,",
      "-Str -> Attack + 1",
      "-Int -> Magic Attack + 1",
      "-Vit -> Tolerance to Neutral Property + 1%",
      "-Agi -> Increase ASPD (After Attack delay -1%)",
      "-Dex -> Ranged Attack +1%",
      "-Luk -> Inflict 1% more critical attack.",
      "Class : ^777777Garment^000000",
      "Defense : ^77777718^000000",
      "Weight : ^77777720^000000",
      "Required Level : ^7777771^000000",
      "Applicable Job : ^777777Every Job^000000",
     },
     slotCount = 1,
     ClassNum = 4
    },
    

    db/item_db2.txt

    29004,wing_zero,wing zero,5,0,,0,,0,,0,0xFFFFFFFF,7,2,4,,1,0,4,{ bonus bAllStats,1; bonus bAtk,readparam(bStr)/20; bonus bWMatk,readparam(bInt)/20; bonus2 bSubEle,0,readparam(bVit)/20; bonus bAspdRate,readparam(bAgi)/20; bonus bCriticalRate,readparam(bLuk)/20; },{},{}
    

    when use it,still same like first post.

    screenRENZORAGNAROK000.jpg

    my data\sprite\wing_zero base on Ragnarok 2012-07-04\rdata\sprite\·Îºê\õ»ç³¯°³ .

    spr and act format in wing_zero base on data\sprite\¾Ç¼¼»ç¸®(¿© and ³²)

  7. ive already try just like what you tell about,but still same ERROR.

    screenRENZORAGNAROK003-1.jpg

    http://www.mediafire...3foo90v26h7ll7y

    this include :

    data\luafiles514\lua files\datainfo

    • accessoryid.lub
    • accname.lub
    • accname_eng.lub
    • spriterobeid.lub
    • spriterobename.lub

    data\sprite\·Îºê\wing_zero

    • ¿©
    • ³²

    robe.jpg

    item_db2

    29004,wing_zero,wing zero,5,0,,0,,0,,0,0xFFFFFFFF,7,2,4,,1,0,29004,{ bonus bAllStats,1; bonus bAtk,readparam(bStr)/20; bonus bWMatk,readparam(bInt)/20; bonus2 bSubEle,0,readparam(bVit)/20; bonus bAspdRate,readparam(bAgi)/20; bonus bCriticalRate,readparam(bLuk)/20; },{},{}
    

  8. Because spriterobeid.lub doesn't read sprite from normal headgear sprite folder. No one finds it working yet, just make it an headgear rather than a garment for this moment.

    its mean still dont have any custom item that can replace the fallen angel wings and archangel wings official ragnarok online ?

    Be Sure you have that grf read first.

    im using grf format,not the data folder

    Don't you not see the problem yet?! Is in your database, acting as a garment will not show any sprite (rA yet support).

    So change it into

    2589,Fallen_Angel_Wings,Fallen Angel Wings,5,0,,200,,18,,1,0xFFFFFFFF,7,2,1,,0,1,3,{ bonus bAllStats,1; bonus bAtk,readparam(bStr)/20; bonus bWMatk,readparam(bInt)/20; bonus2 bSubEle,0,readparam(bVit)/20; bonus bAspdRate,readparam(bAgi)/20; bonus bCriticalRat

    so what i need change in item_db ?

  9. the archangel wing is modified on the luafiles514/lua files/datainfo/ spriterobename.lub, spriterobeid.lub.

    the archangel wing's view id is 1 and it's according on the lub files.

    thanks for the information.i'll try it

    spriterobeid.lub

    RobeNameTable = {
    [sPRITE_ROBE_IDs.ROBE_WING_ZERO] = wing_zero,
    }
    RobeNameTable_Eng = {
    [sPRITE_ROBE_IDs.ROBE_WING_ZERO] = wing_zero,
    }
    

    spriterobename.lub

    ROBE_WING_ZERO = 29004
    

    after add,still just like the 1st post

  10. when i using archangel wings.the sprite will show.

    if im using wing zero,no sprite is appear.

    screenRENZORAGNAROK002.jpg

    wing zero im using this script item_db

    2589,Fallen_Angel_Wings,Fallen Angel Wings,5,0,,200,,18,,1,0xFFFFFFFF,7,2,4,,0,1,3,{ bonus bAllStats,1; bonus bAtk,readparam(bStr)/20; bonus bWMatk,readparam(bInt)/20; bonus2 bSubEle,0,readparam(bVit)/20; bonus bAspdRate,readparam(bAgi)/20; bonus bCriticalRate,readparam(bLuk)/20; },{},{}
    

    accid.lub

    ACCESSORY_WING_ZERO = 29004
    

    accname.lub

    [ACCESSORY_IDs.ACCESSORY_WING_ZERO] = "_wing_zero"
    

    cskroption.lub

    [29004] = {
    unidentifiedDisplayName = "wing_zero",
    unidentifiedResourceName = "wing_zero",
    unidentifiedDescriptionName = {
    "Unidentified item, can be identified with [Magnifier].",
    },
    identifiedDisplayName = "wing_zero",
    identifiedResourceName = "wing_zero",
    identifiedDescriptionName = {
    "Large, wings from zero gundam.",
    "All Stats + 1.",
    "Base stats (without modifiers) is equal to 20 or higher,",
    "-Str -> Attack + 1",
    "-Int -> Magic Attack + 1",
    "-Vit -> Tolerance to Neutral Property + 1%",
    "-Agi -> Increase ASPD (After Attack delay -1%)",
    "-Dex -> Ranged Attack +1%",
    "-Luk -> Inflict 1% more critical attack.",
    "Class : ^777777Garment^000000",
    "Defense : ^77777718^000000",
    "Weight : ^77777720^000000",
    "Required Level : ^7777771^000000",
    "Applicable Job : ^777777Every Job^000000",
    },
    slotCount = 1,
    ClassNum = 29004
    },
    

    item_db2

    29004,wing_zero,wing zero,5,0,,200,,18,,1,0xFFFFFFFF,7,2,4,,0,1,29004,{ bonus bAllStats,1; bonus bAtk,readparam(bStr)/20; bonus bWMatk,readparam(bInt)/20; bonus2 bSubEle,0,readparam(bVit)/20; bonus bAspdRate,readparam(bAgi)/20; bonus bCriticalRate,readparam(bLuk)/20; },{},{}
    

    in data folder

    wingzerocollection.jpg

  11. thats mean the code for getmapmobs change to mobcount ?

    problem solve after using this script.

    // ....... if your server has { Overwriting user function [int__] } don't blame me ..........
    function script int__ {
    set .@num, atoi(getarg(0)+"");
    if ( .@num == 0 || .@num >= 2147483647 ) return getarg(0);
    set .@l, getstrlen(.@num+"");
    for ( set .@i,0; .@i < .@l; set .@i, .@i + 1 ) {
    set .@num$, .@num % pow(10,.@i+1) / pow(10,.@i) + .@num$;
    if ( (.@i+1) % 3 == 0 && .@i+1 != .@l ) set .@num$, ","+ .@num$;
    }
    return .@num$;
    }
    
    //===== eAthena Script ======================================
    //= Private MVP/Branch Room
    //===== By: ===============================================
    //= by ~AnnieRuru~
    //===== Current Version: ======================================
    //= 1.3
    //===== Compatible With: ===================================== 
    //= eAthena 11650 Trunk above or 11863 Stable above
    //===== Description: ========================================= 
    //= Player can rent MVP room for the player him/herself, for party or for guilds
    //===== Topic =================================================
    //= http://www.eathena.ws/board/index.php?showtopic=187654
    //===== Additional Comments: ================================== 
    //= 1.0 
    //= ---- break the tradition which a script only for a player, or only for a party.
    //=      now 1 room can be use for party and another room can use for guilds.
    //= ---- timeout feature to prevent player owns the room indefinitely,
    //=      by create a new account and sit/@at'ing inside overnight.
    //= ---- can disable mvp/boss summon via configuration and becomes a branch room script.
    //= ---- a double check to prevent players rent all the rooms for himself.
    //= 1.0a
    //= ---- fix a critial bug that the time count too fast "
    //= 1.1
    //= ---- added item cost to rent or to summon
    //= ---- added a config to limit summoning per session
    //= ---- added flood control option
    //= 1.2
    //= ---- rewrite the waitingroom counter
    //= ---- optimize the script in a way can add custom summon group
    //= ---- add config to kill the monsters if the room just being left empty
    //= ---- add GM can kick room in use
    //= ---- add able to spawn in numbers
    //= ---- add limitspawn can configure to negative to limit spawn in that group instead of individual one
    //= 1.3
    //= ---- fix chatroom countdown issue due to rev13269
    //= ---- fix a bug if 2 people rent a room at same time, the later 1 will get the room
    //= ---- add a feature so the GM can know how long the room has rented or abandoned
    //= 1.4
    //= ---- update with new mvp and mini bosses
    //= ---- fix an exploit if server allow to use @mail, player can send item/zeny away to prevent item/zeny deletion when registering the room
    //= ---- players die inside mvp room shouldn't lose exp
    //========================================================
    
    // This is the shop for this Branch room IF you already enable it. Can sell whatever things you want.
    - shop MVP room#branch -1,604:100000,12103:1000000
    
    
    
    - script MVP Summoner -1,{
    goto L_Start;
    
    OnInit:
    getmapxy .@map$, .@x, .@y, 1;
    if ( .@map$ == "" ) {
    
    // Config ---------------------------------------------------------------------------------------
    
    // Time for rent a room IN MINUTES. When time out, players inside the room will kick out. Do Not set this as 0
    set .timeout, 30;
    // if the room left empty for # minutes, will be treated as give up the room. Do Not set this as 0
    set .nobodygiveup, 5;
    
    // NOTE : The script only search item OR zeny. if you specify item amount, then it will ask for the item. If item amount is 0, then it will ask for zeny.
    
    // the cost to rent a room
    set .rentitemid, 0; // item id use for rent a room - 674 - mithil coin
    set .rentitemamount, 0; // amount of items to rent a room
    set .rentcost, 1000000; // otherwise, zeny cost to rent a room
    
    // limit each room can only summon 1 monster at a time. (only the Summoning option)
    // Turn it off (0) means the player can summon a lot of monsters as long as the player has enough zeny/item. High rate server players love the room with a lot MVPs
    // Turn it on (1) means the player have to kill existing monster before can summon a new one. Low rate server player prefer to take out MVP 1 by 1
    set .floodcontrol, 0;
    
    // if .floodcontrol is turn off, your players might experience lag if they summoned too many MVPs
    // so what is the maximum input to limit your players summon too many ?
    set .inputlimit, 30;
    
    // If the room has left over monsters while nobody in the room and the room not give up yet, shall we kill monsters in empty room ?
    set .killmonster, 0; // Default is yes
    
    // Options menu setting for MVP Summoner NPC.
    set .@menu[0], 1; // Turn Heal option On/Off
    set .@menu[1], 1; // Turn Group 1 summons On/Off -> MVP
    set .@menu[2], 1; // Turn Group 2 summons On/Off -> mini boss
    set .@menu[3], 1; // Turn Group 3 summons On/Off
    set .@menu[4], 0; // Turn Group 4 summons On/Off
    set .@menu[5], 0; // Turn Group 5 summons On/Off
    set .@menu[6], 0; // Turn Group 6 summons On/Off
    set .@menu[7], 0; // Turn Group 7 summons On/Off
    set .@menu[8], 0; // Turn Group 8 summons On/Off
    set .@menu[9], 0; // Turn Group 9 summons On/Off
    set .@menu[10], 0; // Sell shop items options On/Off ( shop npc above )
    
    // set respawn point when they leave the room. Obviously warp to the Private MVP Room Warper npc
    set .respawnmap$, "prontera"; // Note : "SavePoint" does NOT work
    set .respawnx, 150;
    set .respawny, 174;
    
    // The minimum GM level can kick a room in use
    set .gmlvlkick, 80;
    
    // .limitspawn in previous revision changed to .grouplimit .
    // it is for limit each monster spawn per session, prevent them only killing same monster again and again
    // Now you can configure one group has limited summon, and another group has unlimited summon
    // Tips: if you server has an insane custom MVP, you can put your custom mob to Group 3~9 with insane item cost, and limit only 1 summon per session
    // .grouplimit use amount, means if group1limit set to 10, then each session can only summon up to 10 amount of that kind of monster. 0 is unlimited
    
    // ---------
    // Group 1  
    // ---------
    set .group1name$, "Top Tier"; // Group 1 name
    set .group1itemid, 0; // item id use for summon any Group 1 monster - 674 - mithil coin
    set .group1itemamount, 0; // amount of items to summon a Group 1 monster
    set .group1cost, 40000000; // if no item is specify, zeny cost to summon a Group 1 monster
    set .group1limit, 0; // limit of summon of Group 1 monster per session, prevent them only killing same monster again and again
    setarray .group1id,
    1647,// Assassin Cross Eremes
    1871,// Fallen Bishop
    1768,// Gloom Under Night
    1086,// Golden Thief Bug
    1832,// Ifrit
    1734,// Kiel D-01
    1251,// Knight of Windstorm
    1646,// Lord Knight Seyren
    1147,// Maya
    1650,// Sniper Shecil
    1583,// Tao Gunka
    1708,// Thanatos
    1312,// Turtle General
    1751,// Valkyrie Randgris
    1685,// Vesper
    1648,// Whitesmith Harword
    1917;// Wounded Morroc
    
    // ---------
    // Group 2 -> mini boss
    // ---------
    set .group2name$, "Mid Tier"; // Group 2 name
    set .group2itemid, 0; // item id use for summon any Group 2 monster - 674 - mithil coin
    set .group2itemamount, 0; // amount of items to summon a Group 2 monster
    set .group2cost, 20000000; // if no item is specify, zeny cost to summon a Group 2 monster
    set .group2limit, 0; // limit of summon of Group 2 monster per session, prevent them only killing same monster again and again
    setarray .group2id,
    1511,// Amon Ra
    1630,// Bacsojin
    1039,// Baphomet
    1115,// Eddga
    1252,// Garm
    1649,// High Priest Magaleta
    1651,// High Wizard Katrinn
    1492,// Incantation Samurai
    1190,// Orc Lord
    1159,// Phreeoni
    1658;// Ygnizem
    
    // ---------
    // Group 3
    // ---------
    set .group3name$, "Low Tier"; // Group 3 name
    set .group3itemid, 0; // item id use for summon any Group 3 monster - 12109 - Poring box
    set .group3itemamount, 0; // amount of items to summon a Group 3 monster
    set .group3cost, 10000000; // if no item is specify, zeny cost to summon a Group 3 monster
    set .group3limit, 0; // limit of summon of Group 3 monster per session, prevent them only killing same monster again and again
    setarray .group3id,
    1785,// Atroce
    1096,// Angeling
    1388,// Archangeling
    1795,// Bloody Knight
    1874,// Beelzebub
    1272,// Dark Lord
    1719,// Datale
    1389,// Dracula
    1112,// Drake
    1046,// Doppelgangger
    1418,// Evil Snake Lord
    1120,// Ghostring
    1688,// Lady Tanee
    1373,// Lord of Death
    1289,// Maya Purple
    1150,// Moonlight Flower
    1087,// Orc Hero
    1038,// Osiris
    1157,// Pharaoh
    1623;// RSX 0806
    
    // ---------
    // Group 4
    // ---------
    set .group4name$, ""; // Group 4 name
    set .group4itemid, 0; // item id use for summon any Group 4 monster
    set .group4itemamount, 0; // amount of items to summon a Group 4 monster
    set .group4cost, 0; // if no item is specify, zeny cost to summon a Group 4 monster
    set .group4limit, 0; // limit of summon of Group 4 monster per session, prevent them only killing same monster again and again
    setarray .group4id,
    1001,
    1002;
    
    // ---------
    // Group 5
    // ---------
    set .group5name$, ""; // Group 5 name
    set .group5itemid, 0; // item id use for summon any Group 5 monster
    set .group5itemamount, 0; // amount of items to summon a Group 5 monster
    set .group5cost, 0; // if no item is specify, zeny cost to summon a Group 5 monster
    set .group5limit, 0; // limit of summon of Group 5 monster per session, prevent them only killing same monster again and again
    setarray .group5id,
    1001,
    1002;
    
    // ---------
    // Group 6
    // ---------
    set .group6name$, ""; // Group 6 name
    set .group6itemid, 0; // item id use for summon any Group 6 monster
    set .group6itemamount, 0; // amount of items to summon a Group 6 monster
    set .group6cost, 0; // if no item is specify, zeny cost to summon a Group 6 monster
    set .group6limit, 0; // limit of summon of Group 6 monster per session, prevent them only killing same monster again and again
    setarray .group6id,
    1001,
    1002;
    
    // ---------
    // Group 7
    // ---------
    set .group7name$, ""; // Group 7 name
    set .group7itemid, 0; // item id use for summon any Group 7 monster
    set .group7itemamount, 0; // amount of items to summon a Group 7 monster
    set .group7cost, 0; // if no item is specify, zeny cost to summon a Group 7 monster
    set .group7limit, 0; // limit of summon of Group 7 monster per session, prevent them only killing same monster again and again
    setarray .group7id,
    1001,
    1002;
    
    // ---------
    // Group 8
    // ---------
    set .group8name$, ""; // Group 8 name
    set .group8itemid, 0; // item id use for summon any Group 8 monster
    set .group8itemamount, 0; // amount of items to summon a Group 8 monster
    set .group8cost, 0; // if no item is specify, zeny cost to summon a Group 8 monster
    set .group8limit, 0; // limit of summon of Group 8 monster per session, prevent them only killing same monster again and again
    setarray .group8id,
    1001,
    1002;
    
    // ---------
    // Group 9
    // ---------
    set .group9name$, ""; // Group 9 name
    set .group9itemid, 0; // item id use for summon any Group 9 monster
    set .group9itemamount, 0; // amount of items to summon a Group 9 monster
    set .group9cost, 0; // if no item is specify, zeny cost to summon a Group 9 monster
    set .group9limit, 0; // limit of summon of Group 9 monster per session, prevent them only killing same monster again and again
    setarray .group9id,
    1001,
    1002;
    
    // Config Ends ------------------------------------------------------------------------
    
    if ( .timeout == 0 ) set .timeout, 60;
    if ( .nobodygiveup == 0 ) set .nobodygiveup, 5;
    if ( .inputlimit < 1 ) set .inputlimit, 1;
    
    if ( .rentitemid && .rentitemamount ) {
    if ( getitemname(.rentitemid) == "null" ) {
    debugmes "Private MVP Room: Rent a room is using invalid item id.";
    }
    }
    set .@i, 1;
    while ( .@i <= 9 ) {
    if ( .@menu[.@i] && getd(".group"+ .@i +"itemid") && getd(".group"+ .@i +"itemamount") ) {
    if ( getitemname( getd(".group"+ .@i +"itemid") ) == "null" ) {
    debugmes "Private MVP Room: Group no. "+ .@i +" is using invalid item id.";
    }
    }
    set .@i, .@i +1 ;
    }
    set .menu$, ( (.@menu[0])?"Heal":"" )+":"+( (.@menu[1])?"Summon "+ .group1name$:"" )+":"+( (.@menu[2])?"Summon "+ .group2name$:"" )+":"+( (.@menu[3])?"Summon "+ .group3name$:"" )+":"+( (.@menu[4])?"Summon "+ .group4name$:"" )+":"+( (.@menu[5])?"Summon "+ .group5name$:"" )+":"+( (.@menu[6])?"Summon "+ .group6name$:"" )+":"+( (.@menu[7])?"Summon "+ .group7name$:"" )+":"+( (.@menu[8])?"Summon "+ .group8name$:"" )+":"+( (.@menu[9])?"Summon "+ .group9name$:"" )+":"+( (.@menu[10])?"Buy branches":"" )+":Leave this room:Give up this room";
    
    set .@i, 1;
    while ( .@i <= 9 ) {
    setd ".group"+ .@i +"idsize", getarraysize( getd(".group"+ .@i +"id") );
    if ( .@menu[.@i] && getd(".group"+ .@i +"limit") <= 0 ) {
    set .@j, 0;
    while ( .@j < getd(".group"+ .@i +"idsize") ) {
    setd ".group"+ .@i +"menu$", getd(".group"+ .@i +"menu$") + getmonsterinfo( getd(".group"+ .@i +"id["+ .@j +"]"), 0) +":";
    set .@j, .@j +1 ;
    }
    }
    set .@i, .@i +1 ;
    }
    }
    else {
    sleep 1;
    mapannounce .@map$, "Admin has refresh the server, please register the room again.", 1;
    mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
    }
    end;
    
    L_Start: // I hate gotos ... but ...
    set .@dif, strnpcinfo(2);
    if ( .remind[.@dif] == 0 ) {
    set .remind[.@dif], 1;
    initnpctimer;
    }
    mes "[MVP Summoner]";
    mes "Hi, what can I do for you ?";
    next;
    switch ( select(.menu$) ) {
    case 1:
    mes "[MVP Summoner]";
    if ( mobcount("this","all") > 0 ) {
    mes "I cannot offer heal service when there are monsters around.";
    close;
    }
    sc_end sc_stone;
    sc_end sc_slowdown;
    sc_end sc_freeze;
    sc_end sc_sleep;
    sc_end sc_curse;
    sc_end sc_silence;
    sc_end sc_confusion;
    sc_end sc_blind;
    sc_end sc_bleeding;
    sc_end sc_decreaseagi;
    sc_end sc_poison;
    sc_end sc_hallucination;
    sc_end sc_stripweapon;
    sc_end sc_striparmor;
    sc_end sc_striphelm;
    sc_end sc_stripshield;
    sc_end sc_changeundead;
    sc_end sc_orcish;
    sc_end sc_berserk;
    sc_end sc_ske;
    sc_end sc_swoo;
    sc_end sc_ska;
    percentheal 100,100;
    specialeffect2 7;
    mes "You have completely healed.";
    close;
    default:
    set .@group, @menu -1;
    if ( .floodcontrol && mobcount("this","all") > 0 ) {
    mes "[MVP Summoner]";
    mes "I cannot summon another monster when there are monsters around.";
    close;
    }
    else if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
    mes "[MVP Summoner]";
    mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ getd(".group"+ .@group +"itemamount") +" "+ getitemname( getd(".group"+ .@group +"itemid") ) +".";
    if ( getd(".group"+ .@group +"limit") < 0 )
    mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
    next;
    }
    else if ( getd(".group"+ .@group +"cost") ) {
    mes "[MVP Summoner]";
    mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ callfunc("int__", getd(".group"+ .@group +"cost") ) +" zeny.";
    if ( getd(".group"+ .@group +"limit") < 0 )
    mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
    next;
    }
    else if ( getd(".group"+ .@group +"limit") < 0 ) {
    mes "[MVP Summoner]";
    mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
    next;
    }
    if ( getd(".group"+ .@group +"limit") < 0 && getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
    mes "[MVP Summoner]";
    mes "I'm sorry, but you can't summon any more monster for this group.";
    close;
    }
    else if ( getd(".group"+ .@group +"limit") > 0 ) {
    for ( set .@i, 0; .@i < getd(".group"+ .@group +"idsize"); set .@i, .@i +1 )
    set .@menu$, .@menu$ +( ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") >= getd(".group"+ .@group +"limit") )?"^999999":"^000000" )+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@i +"]"), 0) +" ("+ ( ( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") <= 0 )?0:( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") ) ) +")"+":";
    set .@menu, select(.@menu$) -1;
    }
    else
    set .@menu, select( getd(".group"+ .@group +"menu$") ) -1;
    mes "[MVP Summoner]";
    if ( .floodcontrol == 0 && .inputlimit > 1 ) {
    mes "Input an amount of monsters to summon.";
    next;
    input .@amount;
    if ( .@amount == 0 ) close;
    else if ( .@amount > .inputlimit )
    set .@amount, .inputlimit;
    mes "[MVP Summoner]";
    }
    else
    set .@amount, 1;
    if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
    if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) {
    mes "You don't have enough "+ getitemname( getd(".group"+ .@group +"itemid") ) +" to summon a "+ getd(".group"+ .@group +"name$") +".";
    close;
    }
    }
    else if ( getd(".group"+ .@group +"cost") ) {
    if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) {
    mes "You don't have enough zeny to summon a "+ getd(".group"+ .@group +"name$") +".";
    close;
    }
    }
    if ( .floodcontrol && mobcount("this","all") > 0 ) {
    mes "I cannot summon another monster when there are monsters around.";
    close;
    }
    else if ( getd(".group"+ .@group +"limit") > 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") >= getd(".group"+ .@group +"limit") ) {
    mes "I'm sorry, but you already summoned that monster too much. Try summon another.";
    close;
    }
    else if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) {
    mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
    close;
    }
    }
    else if ( getd(".group"+ .@group +"limit") < 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
    mes "I'm sorry, but you can't summon any more monster for this group.";
    close;
    }
    else if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) {
    mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
    close;
    }
    }
    mes "Summoning "+ .@amount +" "+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@menu +"]"), 0) +".";
    mes "Ok, get ready ?";
    close2;
    if ( .floodcontrol && mobcount("this","all") > 0 ) end;
    if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
    if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) end;
    delitem getd(".group"+ .@group +"itemid"), getd(".group"+ .@group +"itemamount") * .@amount;
    }
    else if ( getd(".group"+ .@group +"cost") ) {
    if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) end;
    set zeny, zeny - getd(".group"+ .@group +"cost") * .@amount;
    }
    if ( getd(".group"+ .@group +"limit") > 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) end;
    setd ".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]", getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount;
    }
    else if ( getd(".group"+ .@group +"limit") < 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) end;
    setd ".group"+ .@group +"limit"+ .@dif, getd(".group"+ .@group +"limit"+ .@dif) + .@amount;
    }
    monster "this", 0, 0, "--ja--", getd(".group"+ .@group +"id["+ .@menu +"]"), .@amount;
    end;
    case 11:
    if ( mobcount("this","all") > 0 ) {
    mes "[MVP Summoner]";
    mes "I cannot offer this service when there are monsters around.";
    close;
    }
    close2;
    callshop "MVP room#branch", 0;
    end;
    case 12:
    mes "[MVP Summoner]";
    mes "Are you sure you want to leave this room ?";
    mes "If this room left empty for more than "+ .nobodygiveup +" minutes, you lost ownership for this room.";
    if ( select( "Yes:No") == 2 ) close;
    warp .respawnmap$, .respawnx, .respawny;
    end;
    case 13:
    mes "[MVP Summoner]";
    getmapxy .@map$, .@x, .@y, 0;
    if ( getmapusers(.@map$) > 1 ) {
    mes "There are still some players in this room. Make sure you are the last member in this room to use this option.";
    close;
    }
    mes "Are you sure you want to give up this room ?";
    if ( .rentcost )
    mes "You will need to pay again to enter this room.";
    next;
    if ( select( "Yes:No" ) == 2 ) close;
    warp .respawnmap$, .respawnx, .respawny;
    set .remaintime[.@dif], -1;
    end;
    }
    close;
    
    OnEnterMap:
    set .@dif, strnpcinfo(2);
    set .remind[.@dif], 0;
    for ( set .@i, 1; .@i <= 9; set .@i, .@i +1 )
    deletearray getd(".group"+ .@i +"limit"+ .@dif), getd(".group"+ .@i +"idsize");
    set .nobodycounter[.@dif], 0;
    getmapxy .@map$, .@x, .@y ,1;
    set .starttime[.@dif], gettimetick(2);
    do {
    set .remaintime[.@dif], .timeout * 60 + .starttime[.@dif] - gettimetick(2);
    set .@hour[.@dif], .remainTime[.@dif] / 3600 ;
    set .@min[.@dif], .remainTime[.@dif] % 3600 / 60 ;
    set .@sec[.@dif], .remainTime[.@dif] % 3600 % 60 ;
    delwaitingroom strnpcinfo(0);
    waitingroom "Time Left = "+( ( .@hour[.@dif] )?( .@hour[.@dif] +":"):"" )+( ( .@min[.@dif] < 10 )?"0"+ .@min[.@dif]: .@min[.@dif] )+":"+( ( .@sec[.@dif] < 10 )?"0"+ .@sec[.@dif]: .@sec[.@dif] ), 0;
    if ( getmapusers(.@map$) )
    set .nobodycounter[.@dif], 0;
    else {
    set .nobodycounter[.@dif], .nobodycounter[.@dif] +1 ;
    if ( .nobodycounter[.@dif] > .nobodygiveup * 60 ) break;
    }
    sleep 995;
    } while ( .remaintime[.@dif] > 1 );
    set .remaintime[.@dif], 0;
    delwaitingroom "MVP Summoner#"+ .@dif;
    mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
    end;
    
    OnTimer100:
    stopnpctimer;
    npctalk "Hi ~ the bubble above my head is the countdown for using this room.";
    sleep 2000;
    npctalk "Sometimes, I can skip for about 1 second in the countdown.";
    sleep 3000;
    npctalk "That is because the server is experiencing minor lag problem.";
    sleep 3000;
    npctalk "So, don't complain about me cheated for the countdown ~ ^.^";
    sleep 3000;
    npctalk "Have a nice day ~";
    end;
    }
    
    prontera,164,175,4 script Private MVP Room 100,{
    mes "[Private MVP Room]";
    mes "Please select a private MVP room.";
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") )
    mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ getvariableofnpc(.rentitemamount, "MVP Summoner") +" "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +".";
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") )
    mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ callfunc("int__", getvariableofnpc(.rentcost, "MVP Summoner") ) +" zeny.";
    else
    mes "You can only use the room for only "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes.";
    mes " ";
    for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
    if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") ) {
    switch ( .type[.@i] ) {
    case 1: set .@color$, "^EE8800"; break;
    case 2: set .@color$, "^70CC11"; break;
    case 3: set .@color$, "^0000FF"; break;
    default: set .@color$, "^000000";
    }
    mes "Room #"+ .@i +" = "+ .@color$ + .whoinuse$[.@i] +"^000000";
    }
    }
    next;
    set .@room, select("MVP Room 1 ["+ getmapusers("06guild_01") +"]",
    "MVP Room 2 ["+ getmapusers("06guild_02") +"]",
    "MVP Room 3 ["+ getmapusers("06guild_03") +"]",
    "MVP Room 4 ["+ getmapusers("06guild_04") +"]",
    "MVP Room 5 ["+ getmapusers("06guild_05") +"]",
    "MVP Room 6 ["+ getmapusers("06guild_06") +"]",
    "MVP Room 7 ["+ getmapusers("06guild_07") +"]",
    "MVP Room 8 ["+ getmapusers("06guild_08") +"]");
    if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
    if ( .inuseid[.@room] == getcharid(.type[.@room]) ) {
    if ( getvariableofnpc(.killmonster,"MVP Summoner") && getmapusers("06guild_0"+ .@room) == 0 )
    killmonsterall "06guild_0"+ .@room;
    warp "06guild_0"+ .@room, 0,0;
    end;
    } else {
    mes "[Private MVP Room]";
    switch ( .type[.@room] ) {
    case 1: set .@color$, "^EE8800Party "; break;
    case 2: set .@color$, "^70CC11Guild "; break;
    case 3: set .@color$, "^0000FFPlayer ";
    }
    mes "This room is reserved for ";
    mes .@color$ + .whoinuse$[.@room] +"^000000 .";
    if ( getgmlevel() < getvariableofnpc(.gmlvlkick,"MVP Summoner") ) {
    mes "Please select another.";
    close;
    }
    mes " ";
    mes "Currently there are "+ getmapusers("06guild_0"+ .@room) +" players";
    mes "in that room.";
    set .@remaintime, getvariableofnpc(.remaintime[.@room],"MVP Summoner");
    mes "It still has "+( .@remaintime /60 )+"mn "+( .@remaintime %60 )+"s left.";
    set .@nobodycounter, getvariableofnpc(.nobodycounter[.@room],"MVP Summoner");
    if ( .@nobodycounter )
    mes "And have left empty for "+( .@nobodycounter /60 )+"mn "+( .@nobodycounter %60 )+"s.";
    mes "Kick them ?";
    next;
    if ( select ( "No:Yes" ) == 1 ) close;
    set getvariableofnpc(.remaintime[.@room],"MVP Summoner"), -1;
    mes "[Private MVP Room]";
    mes "Room#"+ .@room +" is empty now.";
    close;
    }
    }
    mes "[Private MVP Room]";
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
    if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
    mes "You don't have enough "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
    close;
    }
    }
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
    if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) {
    mes "You don't have enough zeny to rent a room.";
    close;
    }
    }
    mes "You reserve this room for ...";
    next;
    set .@type, select("For my party members", "For my guild members", "For personal account use" );
    if ( getcharid(.@type) == 0 ) {
    mes "[Private MVP Room]";
    mes "You do not own a "+( (.@type == 1)?"Party":"Guild" )+".";
    close;
    }
    else if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
    if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
    mes "You don't have enough "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
    close;
    }
    }
    else if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
    mes "[Private MVP Room]";
    mes "I'm sorry, somebody else has already register this room faster than you.";
    close;
    }
    for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
    if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") && .@type == .type[.@i] && getcharid(.@type) == .inuseid[.@i] ) {
    mes "[Private MVP Room]";
    mes "You already rented Room#"+ .@i +". Use that room instead.";
    close;
    }
    }
    set .type[.@room], .@type;
    set .inuseid[.@room], getcharid(.@type);
    set .whoinuse$[.@room], strcharinfo( (.@type == 3)?0:.@type );
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
    if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) end;
    delitem getvariableofnpc(.rentitemid, "MVP Summoner"), getvariableofnpc(.rentitemamount, "MVP Summoner");
    }
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
    if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) end;
    set zeny, zeny - getvariableofnpc(.rentcost, "MVP Summoner");
    }
    warp "06guild_0"+ .@room, 0,0;
    killmonsterall "06guild_0"+ .@room;
    donpcevent "MVP Summoner#"+ .@room +"::OnEnterMap";
    end;
    }
    
    06guild_01,49,49,4 duplicate(MVP Summoner) MVP Summoner#1 116
    06guild_02,49,49,4 duplicate(MVP Summoner) MVP Summoner#2 116
    06guild_03,49,49,4 duplicate(MVP Summoner) MVP Summoner#3 116
    06guild_04,49,49,4 duplicate(MVP Summoner) MVP Summoner#4 116
    06guild_05,49,49,4 duplicate(MVP Summoner) MVP Summoner#5 116
    06guild_06,49,49,4 duplicate(MVP Summoner) MVP Summoner#6 116
    06guild_07,49,49,4 duplicate(MVP Summoner) MVP Summoner#7 116
    06guild_08,49,49,4 duplicate(MVP Summoner) MVP Summoner#8 116
    
    
    06guild_01 mapflag nowarpto
    06guild_02 mapflag nowarpto
    06guild_03 mapflag nowarpto
    06guild_04 mapflag nowarpto
    06guild_05 mapflag nowarpto
    06guild_06 mapflag nowarpto
    06guild_07 mapflag nowarpto
    06guild_08 mapflag nowarpto
    06guild_01 mapflag nomemo
    06guild_02 mapflag nomemo
    06guild_03 mapflag nomemo
    06guild_04 mapflag nomemo
    06guild_05 mapflag nomemo
    06guild_06 mapflag nomemo
    06guild_07 mapflag nomemo
    06guild_08 mapflag nomemo
    06guild_01 mapflag noteleport
    06guild_02 mapflag noteleport
    06guild_03 mapflag noteleport
    06guild_04 mapflag noteleport
    06guild_05 mapflag noteleport
    06guild_06 mapflag noteleport
    06guild_07 mapflag noteleport
    06guild_08 mapflag noteleport
    06guild_01 mapflag nosave
    06guild_02 mapflag nosave
    06guild_03 mapflag nosave
    06guild_04 mapflag nosave
    06guild_05 mapflag nosave
    06guild_06 mapflag nosave
    06guild_07 mapflag nosave
    06guild_08 mapflag nosave
    06guild_01 mapflag nopenalty
    06guild_02 mapflag nopenalty
    06guild_03 mapflag nopenalty
    06guild_04 mapflag nopenalty
    06guild_05 mapflag nopenalty
    06guild_06 mapflag nopenalty
    06guild_07 mapflag nopenalty
    06guild_08 mapflag nopenalty

  12. getmapmobserror.jpg

    function script int__ {
    set .@num, atoi(getarg(0));
    if ( .@num == 0 || .@num >= 2147483647 ) return getarg(0);
    set .@l, getstrlen(.@num);
    for ( set .@i,0; .@i < .@l; set .@i, .@i + 1 ) {
     set .@num$, .@num % pow(10,.@i+1) / pow(10,.@i) + .@num$;
     if ( (.@i+1) % 3 == 0 && .@i+1 != .@l ) set .@num$, ","+ .@num$;
    }
    return .@num$;
    }
    
    // This is the shop for this Branch room IF you already enable it. Can sell whatever things you want.
    - shop MVP room#branch -1,604:100000,12103:1000000
    
    - script MVP Summoner -1,{
    goto L_Start;
    OnInit:
    getmapxy .@map$, .@x, .@y, 1;
    if ( .@map$ == "" ) {
    // Config ---------------------------------------------------------------------------------------
    // Time for rent a room IN MINUTES. When time out, players inside the room will kick out. Do Not set this as 0
    set .timeout, 60;
    // if the room left empty for # minutes, will be treated as give up the room. Do Not set this as 0
    set .nobodygiveup, 5;
    // NOTE : The script only search item OR zeny. if you specify item amount, then it will ask for the item. If item amount is 0, then it will ask for zeny.
    // the cost to rent a room
    set .rentitemid, 674; // item id use for rent a room - 674 - mithil coin
    set .rentitemamount, 0; // amount of items to rent a room
    set .rentcost, 1000000; // otherwise, zeny cost to rent a room
    // limit each room can only summon 1 monster at a time. (only the Summoning option)
    // Turn it off (0) means the player can summon a lot of monsters as long as the player has enough zeny/item. High rate server players love the room with a lot MVPs
    // Turn it on (1) means the player have to kill existing monster before can summon a new one. Low rate server player prefer to take out MVP 1 by 1
    set .floodcontrol, 0;
    // if .floodcontrol is turn off, your players might experience lag if they summoned too many MVPs
    // so what is the maximum input to limit your players summon too many ?
    set .inputlimit, 30;
    // If the room has left over monsters while nobody in the room and the room not give up yet, shall we kill monsters in empty room ?
    set .killmonster, 1; // Default is yes
    // Options menu setting for MVP Summoner NPC.
    set .@menu[0], 1; // Turn Heal option On/Off
    set .@menu[1], 1; // Turn Group 1 summons On/Off -> MVP
    set .@menu[2], 1; // Turn Group 2 summons On/Off -> mini boss
    set .@menu[3], 0; // Turn Group 3 summons On/Off
    set .@menu[4], 0; // Turn Group 4 summons On/Off
    set .@menu[5], 0; // Turn Group 5 summons On/Off
    set .@menu[6], 0; // Turn Group 6 summons On/Off
    set .@menu[7], 0; // Turn Group 7 summons On/Off
    set .@menu[8], 0; // Turn Group 8 summons On/Off
    set .@menu[9], 0; // Turn Group 9 summons On/Off
    set .@menu[10], 0; // Sell shop items options On/Off ( shop npc above )
    // set respawn point when they leave the room. Obviously warp to the Private MVP Room Warper npc
    set .respawnmap$, "prontera"; // Note : "SavePoint" does NOT work
    set .respawnx, 150;
    set .respawny, 174;
    // The minimum GM level can kick a room in use
    set .gmlvlkick, 80;
    // .limitspawn in previous revision changed to .grouplimit .
    // it is for limit each monster spawn per session, prevent them only killing same monster again and again
    // Now you can configure one group has limited summon, and another group has unlimited summon
    // Tips: if you server has an insane custom MVP, you can put your custom mob to Group 3~9 with insane item cost, and limit only 1 summon per session
    // .grouplimit use amount, means if group1limit set to 10, then each session can only summon up to 10 amount of that kind of monster. 0 is unlimited
    // ---------
    // Group 1 -> MVP
    // ---------
    set .group1name$, "MVP"; // Group 1 name
    set .group1itemid, 674; // item id use for summon any Group 1 monster - 674 - mithil coin
    set .group1itemamount, 0; // amount of items to summon a Group 1 monster
    set .group1cost, 100000; // if no item is specify, zeny cost to summon a Group 1 monster
    set .group1limit, 0; // limit of summon of Group 1 monster per session, prevent them only killing same monster again and again
    setarray .group1id,
     1511,// Amon Ra
     1647,// Assassin Cross Eremes
     1785,// Atroce
     1630,// Bacsojin
     1039,// Baphomet
     1874,// Beelzebub
     1272,// Dark Lord
     1719,// Datale
     1046,// Doppelgangger
     1389,// Dracula
     1112,// Drake
     1115,// Eddga
     1418,// Evil Snake Lord
     1871,// Fallen Bishop
     1252,// Garm
     1768,// Gloom Under Night
     1086,// Golden Thief Bug
     1885,// Gorynych
     1990,// Hardrock Mammoth
     1649,// High Priest Magaleta
     1651,// High Wizard Katrinn
     1832,// Ifrit
     1492,// Incantation Samurai
     1734,// Kiel D-01
     1251,// Knight of Windstorm
     1779,// Ktullanux
     1688,// Lady Tanee
     1646,// Lord Knight Seyren
     1373,// Lord of Death
     1147,// Maya
     1059,// Mistress
     1150,// Moonlight Flower
     1087,// Orc Hero
     1190,// Orc Lord
     1038,// Osiris
     1157,// Pharaoh
     1159,// Phreeoni
     1502,// Pori Pori
     1623,// RSX 0806
     1650,// Sniper Shecil
     1583,// Tao Gunka
     1991,// Tendril Lion
     1708,// Thanatos
     1312,// Turtle General
     1751,// Valkyrie Randgris
     1685,// Vesper
     1648,// Whitesmith Harword
     1917,// Wounded Morroc
     1658;// Ygnizem
    // ---------
    // Group 2 -> mini boss
    // ---------
    set .group2name$, "mini boss"; // Group 2 name
    set .group2itemid, 674; // item id use for summon any Group 2 monster - 674 - mithil coin
    set .group2itemamount, 0; // amount of items to summon a Group 2 monster
    set .group2cost, 10000; // if no item is specify, zeny cost to summon a Group 2 monster
    set .group2limit, 0; // limit of summon of Group 2 monster per session, prevent them only killing same monster again and again
    setarray .group2id,
     1096,// Angeling
     1388,// Archangeling
     1641,// Assassin Cross Eremes
     1873,// Beelzebub
     1830,// Bow Master
     1795,// Bloody Knight
     1839,// Byorgue
     1307,// Cat o' Nine Tails
     1283,// Chimera
     1302,// Dark Illusion
     1582,// Deviling
     1091,// Dragon Fly
     1093,// Eclipse
     1957,// Entweihen Crothen
     1205,// Executioner
     1783,// Galion
     1681,// Gemini-S58
     1592,// Gangster
     1120,// Ghostring
     1259,// Gryphon
     1626,// Hellion Revenant
     1643,// High Priest Margaretha
     1645,// High Wizard Kathryne
     1720,// Hydro
     1920,// Incarnation of Morroc
     1918,// Incarnation of Morroc 1
     1921,// Incarnation of Morroc 2
     1919,// Incarnation of Morroc 3
     1833,// Kasa
     1640,// Lord Knight Seyren
     1090,// Mastering
     1289,// Maya Purple
     1262,// Mutant Dragon
     1203,// Mysteltainn
     1870,// Necromancer
     1700,// Dame of Sentinel
     1295,// Owl Baron
     1320,// Owl Duke
     1702,// Baroness of Retribution
     1831,// Salamander
     1701,// Mistress of Shelter
     1916,// Satan Morroc
     1754,// Skeggiold
     1755,// Skeggiold 1
     1644,// Sniper Cecil
     1703,// Lady Solace
     1829,// Sword Master
     1705,// Despero of Thanato
     1710,// Despero of Thanato 1
     1707,// Dolor of Thanatos
     1712,// Dolor of Thanatos 1
     1711,// Maero of Thanatos
     1706,// Maero of Thanatos 1
     1704,// Odium of Thanatos
     1709,// Odium of Thanatos 1
     1960,// Thorn of Magic
     1961,// Thorn of Purification
     1959,// Thorn of Recovery
     1958,// Thorny Skeleton
     1204,// Ogretooth
     1089,// Toad
     1092,// Vagabond Wolf
     1765,// Valkyrie
     1642;// Whitesmith Howard
    // ---------
    // Group 3
    // ---------
    set .group3name$, "Poring-Family"; // Group 3 name
    set .group3itemid, 12109; // item id use for summon any Group 3 monster - 12109 - Poring box
    set .group3itemamount, 1; // amount of items to summon a Group 3 monster
    set .group3cost, 0; // if no item is specify, zeny cost to summon a Group 3 monster
    set .group3limit, -5; // limit of summon of Group 3 monster per session, prevent them only killing same monster again and again
    setarray .group3id,
     1002,// Poring
     1113,// Drops
     1031,// Poporing
     1242,// Marin
     1062,// Santa Poring
     1613,// Metaling
     1784,// Stapo
     1090,// Mastering
     1096,// Angeling
     1120,// Ghostring
     1582,// Deviling
     1388;// Arc Angeling
    // ---------
    // Group 4
    // ---------
    set .group4name$, ""; // Group 4 name
    set .group4itemid, 0; // item id use for summon any Group 4 monster
    set .group4itemamount, 0; // amount of items to summon a Group 4 monster
    set .group4cost, 0; // if no item is specify, zeny cost to summon a Group 4 monster
    set .group4limit, 0; // limit of summon of Group 4 monster per session, prevent them only killing same monster again and again
    setarray .group4id,
     1001,
     1002;
    // ---------
    // Group 5
    // ---------
    set .group5name$, ""; // Group 5 name
    set .group5itemid, 0; // item id use for summon any Group 5 monster
    set .group5itemamount, 0; // amount of items to summon a Group 5 monster
    set .group5cost, 0; // if no item is specify, zeny cost to summon a Group 5 monster
    set .group5limit, 0; // limit of summon of Group 5 monster per session, prevent them only killing same monster again and again
    setarray .group5id,
     1001,
     1002;
    // ---------
    // Group 6
    // ---------
    set .group6name$, ""; // Group 6 name
    set .group6itemid, 0; // item id use for summon any Group 6 monster
    set .group6itemamount, 0; // amount of items to summon a Group 6 monster
    set .group6cost, 0; // if no item is specify, zeny cost to summon a Group 6 monster
    set .group6limit, 0; // limit of summon of Group 6 monster per session, prevent them only killing same monster again and again
    setarray .group6id,
     1001,
     1002;
    // ---------
    // Group 7
    // ---------
    set .group7name$, ""; // Group 7 name
    set .group7itemid, 0; // item id use for summon any Group 7 monster
    set .group7itemamount, 0; // amount of items to summon a Group 7 monster
    set .group7cost, 0; // if no item is specify, zeny cost to summon a Group 7 monster
    set .group7limit, 0; // limit of summon of Group 7 monster per session, prevent them only killing same monster again and again
    setarray .group7id,
     1001,
     1002;
    // ---------
    // Group 8
    // ---------
    set .group8name$, ""; // Group 8 name
    set .group8itemid, 0; // item id use for summon any Group 8 monster
    set .group8itemamount, 0; // amount of items to summon a Group 8 monster
    set .group8cost, 0; // if no item is specify, zeny cost to summon a Group 8 monster
    set .group8limit, 0; // limit of summon of Group 8 monster per session, prevent them only killing same monster again and again
    setarray .group8id,
     1001,
     1002;
    // ---------
    // Group 9
    // ---------
    set .group9name$, ""; // Group 9 name
    set .group9itemid, 0; // item id use for summon any Group 9 monster
    set .group9itemamount, 0; // amount of items to summon a Group 9 monster
    set .group9cost, 0; // if no item is specify, zeny cost to summon a Group 9 monster
    set .group9limit, 0; // limit of summon of Group 9 monster per session, prevent them only killing same monster again and again
    setarray .group9id,
     1001,
     1002;
    // Config Ends ------------------------------------------------------------------------
     if ( .timeout == 0 ) set .timeout, 60;
     if ( .nobodygiveup == 0 ) set .nobodygiveup, 5;
     if ( .inputlimit < 1 ) set .inputlimit, 1;
     if ( .rentitemid && .rentitemamount ) {
      if ( getitemname(.rentitemid) == "null" ) {
    debugmes "Private MVP Room: Rent a room is using invalid item id.";
      }
     }
     set .@i, 1;
     while ( .@i <= 9 ) {
      if ( .@menu[.@i] && getd(".group"+ .@i +"itemid") && getd(".group"+ .@i +"itemamount") ) {
    if ( getitemname( getd(".group"+ .@i +"itemid") ) == "null" ) {
     debugmes "Private MVP Room: Group no. "+ .@i +" is using invalid item id.";
    }
      }
      set .@i, .@i +1 ;
     }
     set .menu$, ( (.@menu[0])?"Heal":"" )+":"+( (.@menu[1])?"Summon "+ .group1name$:"" )+":"+( (.@menu[2])?"Summon "+ .group2name$:"" )+":"+( (.@menu[3])?"Summon "+ .group3name$:"" )+":"+( (.@menu[4])?"Summon "+ .group4name$:"" )+":"+( (.@menu[5])?"Summon "+ .group5name$:"" )+":"+( (.@menu[6])?"Summon "+ .group6name$:"" )+":"+( (.@menu[7])?"Summon "+ .group7name$:"" )+":"+( (.@menu[8])?"Summon "+ .group8name$:"" )+":"+( (.@menu[9])?"Summon "+ .group9name$:"" )+":"+( (.@menu[10])?"Buy branches":"" )+":Leave this room:Give up this room";
     set .@i, 1;
     while ( .@i <= 9 ) {
      setd ".group"+ .@i +"idsize", getarraysize( getd(".group"+ .@i +"id") );
      if ( .@menu[.@i] && getd(".group"+ .@i +"limit") <= 0 ) {
    set .@j, 0;
    while ( .@j < getd(".group"+ .@i +"idsize") ) {
     setd ".group"+ .@i +"menu$", getd(".group"+ .@i +"menu$") + getmonsterinfo( getd(".group"+ .@i +"id["+ .@j +"]"), 0) +":";
     set .@j, .@j +1 ;
    }
      }
      set .@i, .@i +1 ;
     }
    }
    else {
     sleep 1;
     mapannounce .@map$, "Admin has refresh the server, please register the room again.", 1;
     mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
    }
    end;
    L_Start: // I hate gotos ... but ...
    set .@dif, strnpcinfo(2);
    if ( .remind[.@dif] == 0 ) {
     set .remind[.@dif], 1;
     initnpctimer;
    }
    mes "[MVP Summoner]";
    mes "Hi, what can I do for you ?";
    next;
    switch ( select(.menu$) ) {
     case 1:
      mes "[MVP Summoner]";
      if ( getmapmobs("this") > 0 ) {
    mes "I cannot offer heal service when there are monsters around.";
    close;
      }
      sc_end sc_stone;
      sc_end sc_slowdown;
      sc_end sc_freeze;
      sc_end sc_sleep;
      sc_end sc_curse;
      sc_end sc_silence;
      sc_end sc_confusion;
      sc_end sc_blind;
      sc_end sc_bleeding;
      sc_end sc_decreaseagi;
      sc_end sc_poison;
      sc_end sc_hallucination;
      sc_end sc_stripweapon;
      sc_end sc_striparmor;
      sc_end sc_striphelm;
      sc_end sc_stripshield;
      sc_end sc_changeundead;
      sc_end sc_orcish;
      sc_end sc_berserk;
      sc_end sc_ske;
      sc_end sc_swoo;
      sc_end sc_ska;
      percentheal 100,100;
      specialeffect2 7;
      mes "You have completely healed.";
      close;
     default:
      set .@group, @menu -1;
      if ( .floodcontrol && getmapmobs("this") > 0 ) {
    mes "[MVP Summoner]";
    mes "I cannot summon another monster when there are monsters around.";
    close;
      }
      else if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
    mes "[MVP Summoner]";
    mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ getd(".group"+ .@group +"itemamount") +" "+ getitemname( getd(".group"+ .@group +"itemid") ) +".";
    if ( getd(".group"+ .@group +"limit") < 0 )
     mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
    next;
      }
      else if ( getd(".group"+ .@group +"cost") ) {
    mes "[MVP Summoner]";
    mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ callfunc("int__", getd(".group"+ .@group +"cost") ) +" zeny.";
    if ( getd(".group"+ .@group +"limit") < 0 )
     mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
    next;
      }
      else if ( getd(".group"+ .@group +"limit") < 0 ) {
    mes "[MVP Summoner]";
    mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
    next;
      }
      if ( getd(".group"+ .@group +"limit") < 0 && getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
    mes "[MVP Summoner]";
    mes "I'm sorry, but you can't summon any more monster for this group.";
    close;
      }
      else if ( getd(".group"+ .@group +"limit") > 0 ) {
    for ( set .@i, 0; .@i < getd(".group"+ .@group +"idsize"); set .@i, .@i +1 )
     set .@menu$, .@menu$ +( ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") >= getd(".group"+ .@group +"limit") )?"^999999":"^000000" )+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@i +"]"), 0) +" ("+ ( ( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") <= 0 )?0:( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") ) ) +")"+":";
    set .@menu, select(.@menu$) -1;
      }
      else
    set .@menu, select( getd(".group"+ .@group +"menu$") ) -1;
      mes "[MVP Summoner]";
      if ( .floodcontrol == 0 && .inputlimit > 1 ) {
    mes "Input an amount of monsters to summon.";
    next;
    input .@amount;
    if ( .@amount == 0 ) close;
    else if ( .@amount > .inputlimit )
     set .@amount, .inputlimit;
    mes "[MVP Summoner]";
      }
      else
    set .@amount, 1;
      if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
    if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) {
     mes "You don't have enough "+ getitemname( getd(".group"+ .@group +"itemid") ) +" to summon a "+ getd(".group"+ .@group +"name$") +".";
     close;
    }
      }
      else if ( getd(".group"+ .@group +"cost") ) {
    if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) {
     mes "You don't have enough zeny to summon a "+ getd(".group"+ .@group +"name$") +".";
     close;
    }
      }
      if ( .floodcontrol && getmapmobs("this") > 0 ) {
    mes "I cannot summon another monster when there are monsters around.";
    close;
      }
      else if ( getd(".group"+ .@group +"limit") > 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") >= getd(".group"+ .@group +"limit") ) {
     mes "I'm sorry, but you already summoned that monster too much. Try summon another.";
     close;
    }
    else if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) {
     mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
     close;
    }
      }
      else if ( getd(".group"+ .@group +"limit") < 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
     mes "I'm sorry, but you can't summon any more monster for this group.";
     close;
    }
    else if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) {
     mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
     close;
    }
      }
      mes "Summoning "+ .@amount +" "+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@menu +"]"), 0) +".";
      mes "Ok, get ready ?";
      close2;
      if ( .floodcontrol && getmapmobs("this") > 0 ) end;
      if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
    if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) end;
    delitem getd(".group"+ .@group +"itemid"), getd(".group"+ .@group +"itemamount") * .@amount;
      }
      else if ( getd(".group"+ .@group +"cost") ) {
    if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) end;
    set zeny, zeny - getd(".group"+ .@group +"cost") * .@amount;
      }
      if ( getd(".group"+ .@group +"limit") > 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) end;
    setd ".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]", getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount;
      }
      else if ( getd(".group"+ .@group +"limit") < 0 ) {
    if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) end;
    setd ".group"+ .@group +"limit"+ .@dif, getd(".group"+ .@group +"limit"+ .@dif) + .@amount;
      }
      monster "this", 0, 0, "--ja--", getd(".group"+ .@group +"id["+ .@menu +"]"), .@amount;
      end;
     case 11:
      if ( getmapmobs("this") > 0 ) {
    mes "[MVP Summoner]";
    mes "I cannot offer this service when there are monsters around.";
    close;
      }
      close2;
      callshop "MVP room#branch", 0;
      end;
     case 12:
      mes "[MVP Summoner]";
      mes "Are you sure you want to leave this room ?";
      mes "If this room left empty for more than "+ .nobodygiveup +" minutes, you lost ownership for this room.";
      if ( select( "Yes:No") == 2 ) close;
      warp .respawnmap$, .respawnx, .respawny;
      end;
     case 13:
      mes "[MVP Summoner]";
      getmapxy .@map$, .@x, .@y, 0;
      if ( getmapusers(.@map$) > 1 ) {
    mes "There are still some players in this room. Make sure you are the last member in this room to use this option.";
    close;
      }
      mes "Are you sure you want to give up this room ?";
      if ( .rentcost )
    mes "You will need to pay again to enter this room.";
      next;
      if ( select( "Yes:No" ) == 2 ) close;
      warp .respawnmap$, .respawnx, .respawny;
      set .remaintime[.@dif], -1;
      end;
    }
    close;
    OnEnterMap:
    set .@dif, strnpcinfo(2);
    set .remind[.@dif], 0;
    for ( set .@i, 1; .@i <= 9; set .@i, .@i +1 )
     deletearray getd(".group"+ .@i +"limit"+ .@dif), getd(".group"+ .@i +"idsize");
    set .nobodycounter[.@dif], 0;
    getmapxy .@map$, .@x, .@y ,1;
    set .starttime[.@dif], gettimetick(2);
    do {
     set .remaintime[.@dif], .timeout * 60 + .starttime[.@dif] - gettimetick(2);
     set .@hour[.@dif], .remainTime[.@dif] / 3600 ;
     set .@min[.@dif], .remainTime[.@dif] % 3600 / 60 ;
     set .@sec[.@dif], .remainTime[.@dif] % 3600 % 60 ;
     delwaitingroom strnpcinfo(0);
     waitingroom "Time Left = "+( ( .@hour[.@dif] )?( .@hour[.@dif] +":"):"" )+( ( .@min[.@dif] < 10 )?"0"+ .@min[.@dif]: .@min[.@dif] )+":"+( ( .@sec[.@dif] < 10 )?"0"+ .@sec[.@dif]: .@sec[.@dif] ), 0;
     if ( getmapusers(.@map$) )
      set .nobodycounter[.@dif], 0;
     else {
      set .nobodycounter[.@dif], .nobodycounter[.@dif] +1 ;
      if ( .nobodycounter[.@dif] > .nobodygiveup * 60 ) break;
     }
     sleep 995;
    } while ( .remaintime[.@dif] > 1 );
    set .remaintime[.@dif], 0;
    delwaitingroom "MVP Summoner#"+ .@dif;
    mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
    end;
    OnTimer100:
    stopnpctimer;
    npctalk "Hi ~ the bubble above my head is the countdown for using this room.";
    sleep 2000;
    npctalk "Sometimes, I can skip for about 1 second in the countdown.";
    sleep 3000;
    npctalk "That is because the server is experiencing minor lag problem.";
    sleep 3000;
    npctalk "So, don't complain about me cheated for the countdown ~ ^.^";
    sleep 3000;
    npctalk "Have a nice day ~";
    end;
    }
    prontera,164,175,4 script Private MVP Room 100,{
    menu "Malay",Q_1, "English",Q_2;
    Q_1:
    mes "[bilik MvP Peribadi]";
    mes "Pilih kawasan bilik persendirian anda untuk MvP.";
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") )
     mes "Harga untuk penyewaan bilik ini adalah "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ getvariableofnpc(.rentitemamount, "MVP Summoner") +" "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +".";
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") )
     mes "Harga untuk penyewaan bilik ini adalah "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ callfunc("int__", getvariableofnpc(.rentcost, "MVP Summoner") ) +" zeny.";
    else
     mes "Anda hanya boleh menggunakan bilik ini hanya "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes.";
    mes " ";
    for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
     if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") ) {
      switch ( .type[.@i] ) {
    case 1: set .@color$, "^EE8800"; break;
    case 2: set .@color$, "^70CC11"; break;
    case 3: set .@color$, "^0000FF"; break;
    default: set .@color$, "^000000";
      }
      mes "Room #"+ .@i +" = "+ .@color$ + .whoinuse$[.@i] +"^000000";
     }
    }
    next;
    set .@room, select("MVP Room 1 ["+ getmapusers("06guild_01") +"]",
     "MVP Room 2 ["+ getmapusers("06guild_02") +"]",
     "MVP Room 3 ["+ getmapusers("06guild_03") +"]",
     "MVP Room 4 ["+ getmapusers("06guild_04") +"]",
     "MVP Room 5 ["+ getmapusers("06guild_05") +"]",
     "MVP Room 6 ["+ getmapusers("06guild_06") +"]",
     "MVP Room 7 ["+ getmapusers("06guild_07") +"]",
     "MVP Room 8 ["+ getmapusers("06guild_08") +"]");
    if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
     if ( .inuseid[.@room] == getcharid(.type[.@room]) ) {
      if ( getvariableofnpc(.killmonster,"MVP Summoner") && getmapusers("06guild_0"+ .@room) == 0 )
    killmonsterall "06guild_0"+ .@room;
      warp "06guild_0"+ .@room, 0,0;
      end;
     } else {
      mes "[bilik MvP Peribadi]";
      switch ( .type[.@room] ) {
    case 1: set .@color$, "^EE8800Party "; break;
    case 2: set .@color$, "^70CC11Guild "; break;
    case 3: set .@color$, "^0000FFPlayer ";
      }
      mes "Bilik ini ditempah oleh ";
      mes .@color$ + .whoinuse$[.@room] +"^000000 .";
      if ( getgmlevel() < getvariableofnpc(.gmlvlkick,"MVP Summoner") ) {
    mes "Pilih bilik yang lain.";
    close;
      }
      mes " ";
      mes "Sukacitanya mereka adalah "+ getmapusers("06guild_0"+ .@room) +" players";
      mes "didalam bilik tersebut.";
      set .@remaintime, getvariableofnpc(.remaintime[.@room],"MVP Summoner");
      mes "Ia masih ada "+( .@remaintime /60 )+"mn "+( .@remaintime %60 )+"s left.";
      set .@nobodycounter, getvariableofnpc(.nobodycounter[.@room],"MVP Summoner");
      if ( .@nobodycounter )
    mes "Dan telah ditinggalkan kosong selama "+( .@nobodycounter /60 )+"mn "+( .@nobodycounter %60 )+"s.";
      mes "Keluarkan mereka ?";
      next;
      if ( select ( "No:Yes" ) == 1 ) close;
      set getvariableofnpc(.remaintime[.@room],"MVP Summoner"), -1;
      mes "[bilik MvP Peribadi]";
      mes "Room#"+ .@room +" is empty now.";
      close;
     }
    }
    mes "[bilik MvP Peribadi]";
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
     if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
      mes "Kamu tidak mencukupi "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
      close;
     }
    }
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
     if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) {
      mes "Zeny anda tidak mencukupi untuk bilik ini.";
      close;
     }
    }
    mes "Kamu menyewa bilik ini untuk ...";
    next;
    set .@type, select("Untuk kawan-kawan", "Untuk ahli kesatuan", "Untuk peribadi sahaja" );
    if ( getcharid(.@type) == 0 ) {
     mes "[bilik MvP Peribadi]";
     mes "Kamu tidak ada "+( (.@type == 1)?"Party":"Guild" )+".";
     close;
    }
    else if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
     mes "[bilik MvP Peribadi]";
     mes "Minta maaf kerana sudah ada orang yang tempah lebih awal daripada kamu.";
     close;
    }
    for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
     if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") && .@type == .type[.@i] && getcharid(.@type) == .inuseid[.@i] ) {
      mes "[bilik MvP Peribadi]";
      mes "Kamu sudah menyewa Room#"+ .@i +". masih ingin menggunakannya?.";
      close;
     }
    }
    set .type[.@room], .@type;
    set .inuseid[.@room], getcharid(.@type);
    set .whoinuse$[.@room], strcharinfo( (.@type == 3)?0:.@type );
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
     if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) end;
     delitem getvariableofnpc(.rentitemid, "MVP Summoner"), getvariableofnpc(.rentitemamount, "MVP Summoner");
    }
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
     if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) end;
     set zeny, zeny - getvariableofnpc(.rentcost, "MVP Summoner");
    }
    warp "06guild_0"+ .@room, 0,0;
    killmonsterall "06guild_0"+ .@room;
    donpcevent "MVP Summoner#"+ .@room +"::OnEnterMap";
    end;
    Q_2:
    mes "[Private MVP Room]";
    mes "Please select a private MVP room.";
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") )
     mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ getvariableofnpc(.rentitemamount, "MVP Summoner") +" "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +".";
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") )
     mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ callfunc("int__", getvariableofnpc(.rentcost, "MVP Summoner") ) +" zeny.";
    else
     mes "You can only use the room for only "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes.";
    mes " ";
    for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
     if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") ) {
      switch ( .type[.@i] ) {
    case 1: set .@color$, "^EE8800"; break;
    case 2: set .@color$, "^70CC11"; break;
    case 3: set .@color$, "^0000FF"; break;
    default: set .@color$, "^000000";
      }
      mes "Room #"+ .@i +" = "+ .@color$ + .whoinuse$[.@i] +"^000000";
     }
    }
    next;
    set .@room, select("MVP Room 1 ["+ getmapusers("06guild_01") +"]",
     "MVP Room 2 ["+ getmapusers("06guild_02") +"]",
     "MVP Room 3 ["+ getmapusers("06guild_03") +"]",
     "MVP Room 4 ["+ getmapusers("06guild_04") +"]",
     "MVP Room 5 ["+ getmapusers("06guild_05") +"]",
     "MVP Room 6 ["+ getmapusers("06guild_06") +"]",
     "MVP Room 7 ["+ getmapusers("06guild_07") +"]",
     "MVP Room 8 ["+ getmapusers("06guild_08") +"]");
    if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
     if ( .inuseid[.@room] == getcharid(.type[.@room]) ) {
      if ( getvariableofnpc(.killmonster,"MVP Summoner") && getmapusers("06guild_0"+ .@room) == 0 )
    killmonsterall "06guild_0"+ .@room;
      warp "06guild_0"+ .@room, 0,0;
      end;
     } else {
      mes "[Private MVP Room]";
      switch ( .type[.@room] ) {
    case 1: set .@color$, "^EE8800Party "; break;
    case 2: set .@color$, "^70CC11Guild "; break;
    case 3: set .@color$, "^0000FFPlayer ";
      }
      mes "This room is reserved for ";
      mes .@color$ + .whoinuse$[.@room] +"^000000 .";
      if ( getgmlevel() < getvariableofnpc(.gmlvlkick,"MVP Summoner") ) {
    mes "Please select another.";
    close;
      }
      mes " ";
      mes "Currently there are "+ getmapusers("06guild_0"+ .@room) +" players";
      mes "in that room.";
      set .@remaintime, getvariableofnpc(.remaintime[.@room],"MVP Summoner");
      mes "It still has "+( .@remaintime /60 )+"mn "+( .@remaintime %60 )+"s left.";
      set .@nobodycounter, getvariableofnpc(.nobodycounter[.@room],"MVP Summoner");
      if ( .@nobodycounter )
    mes "And have left empty for "+( .@nobodycounter /60 )+"mn "+( .@nobodycounter %60 )+"s.";
      mes "Kick them ?";
      next;
      if ( select ( "No:Yes" ) == 1 ) close;
      set getvariableofnpc(.remaintime[.@room],"MVP Summoner"), -1;
      mes "[Private MVP Room]";
      mes "Room#"+ .@room +" is empty now.";
      close;
     }
    }
    mes "[Private MVP Room]";
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
     if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
      mes "You don't have enough "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
      close;
     }
    }
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
     if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) {
      mes "You don't have enough zeny to rent a room.";
      close;
     }
    }
    mes "You reserve this room for ...";
    next;
    set .@type, select("For my party members", "For my guild members", "For personal account use" );
    if ( getcharid(.@type) == 0 ) {
     mes "[Private MVP Room]";
     mes "You do not own a "+( (.@type == 1)?"Party":"Guild" )+".";
     close;
    }
    else if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
     mes "[Private MVP Room]";
     mes "I'm sorry, somebody else has already register this room faster than you.";
     close;
    }
    for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
     if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") && .@type == .type[.@i] && getcharid(.@type) == .inuseid[.@i] ) {
      mes "[Private MVP Room]";
      mes "You already rented Room#"+ .@i +". Use that room instead.";
      close;
     }
    }
    set .type[.@room], .@type;
    set .inuseid[.@room], getcharid(.@type);
    set .whoinuse$[.@room], strcharinfo( (.@type == 3)?0:.@type );
    if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
     if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) end;
     delitem getvariableofnpc(.rentitemid, "MVP Summoner"), getvariableofnpc(.rentitemamount, "MVP Summoner");
    }
    else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
     if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) end;
     set zeny, zeny - getvariableofnpc(.rentcost, "MVP Summoner");
    }
    warp "06guild_0"+ .@room, 0,0;
    killmonsterall "06guild_0"+ .@room;
    donpcevent "MVP Summoner#"+ .@room +"::OnEnterMap";
    end;
    }
    06guild_01,49,49,4 duplicate(MVP Summoner) MVP Summoner#1 116
    06guild_02,49,49,4 duplicate(MVP Summoner) MVP Summoner#2 116
    06guild_03,49,49,4 duplicate(MVP Summoner) MVP Summoner#3 116
    06guild_04,49,49,4 duplicate(MVP Summoner) MVP Summoner#4 116
    06guild_05,49,49,4 duplicate(MVP Summoner) MVP Summoner#5 116
    06guild_06,49,49,4 duplicate(MVP Summoner) MVP Summoner#6 116
    06guild_07,49,49,4 duplicate(MVP Summoner) MVP Summoner#7 116
    06guild_08,49,49,4 duplicate(MVP Summoner) MVP Summoner#8 116
    
    06guild_01 mapflag nowarpto
    06guild_02 mapflag nowarpto
    06guild_03 mapflag nowarpto
    06guild_04 mapflag nowarpto
    06guild_05 mapflag nowarpto
    06guild_06 mapflag nowarpto
    06guild_07 mapflag nowarpto
    06guild_08 mapflag nowarpto
    06guild_01 mapflag nomemo
    06guild_02 mapflag nomemo
    06guild_03 mapflag nomemo
    06guild_04 mapflag nomemo
    06guild_05 mapflag nomemo
    06guild_06 mapflag nomemo
    06guild_07 mapflag nomemo
    06guild_08 mapflag nomemo
    06guild_01 mapflag noteleport
    06guild_02 mapflag noteleport
    06guild_03 mapflag noteleport
    06guild_04 mapflag noteleport
    06guild_05 mapflag noteleport
    06guild_06 mapflag noteleport
    06guild_07 mapflag noteleport
    06guild_08 mapflag noteleport
    06guild_01 mapflag nosave SavePoint
    06guild_02 mapflag nosave SavePoint
    06guild_03 mapflag nosave SavePoint
    06guild_04 mapflag nosave SavePoint
    06guild_05 mapflag nosave SavePoint
    06guild_06 mapflag nosave SavePoint
    06guild_07 mapflag nosave SavePoint
    06guild_08 mapflag nosave SavePoint
    

  13. 1.data/sprite/¾ÆÀÌÅÛ and then data/sprite/¾Ç¼¼»ç¸®/¿© and data/sprite/¾Ç¼¼»ç¸®/³²

    2.data/sprite/Àΰ£Á/(job folder) example : ¿¬±Ý¼ú»ç or ¿î¿µÀÚ or ±â»ç or »óÀÎ etc

    3.all spr/act files in data/sprite/Àΰ£Á/(job folder) example : in data/sprite/Àΰ£Á/¿¬±Ý¼ú»ç/¿¬±Ý¼ú»ç_¿©_13428 and data/sprite/Àΰ£Á/¿¬±Ý¼ú»ç/¿¬±Ý¼ú»ç_¿©_13428.spr

    spritefolder-1.jpg

×
×
  • Create New...