Jump to content

KingKronos' Dynamic [Quest/Full/WoE/...] Warper 1.1


MusiDex

Recommended Posts


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Hello everyone!

Long time has passed, since I released my last warper. It had some features, so it was still dowloaded. But the configuration was ugly, and it took way too much of space. The way Toasty did his Menu-Configuration impressed me, and I decided to script this new warper, including many more features than before, so that it could take some time, to understand all the settings. (Without the manual I wouldn't ;) ) So here we go!

Dynamic-Warper

Downloads:

rAthena only

eAthena AND rAthena

Single Files:

warper.txt - duplis.txt

Dungeon-Configurations:

Only Entrance Warpers (default)

Pre-Configurations:

Please tell me your suggestions of

Pre-Configurations!

Language-Packs:

English (default)

German

List of features:

  • Easy configuration (when you get it once ;) )
  • Many possibilitys to config your Menus and Maps
  • Many addable restrictions like zeny/item-cost, level, class and more
  • Remember lastwarps
  • Possibility to easy add and manage Favourites!
  • Questwarping (so your users have to visit a place on their own first)
  • Partywarping (party leaders can take their guild with them)
  • Multithreading: every party member will be asked if he/she wants to warp at the same time

Compatibility:

  • Tested on SVN 16767
  • Should work from rAthena SVN 15340
  • For using with eAthena you have to chose the eAthena-Version of the warper, and follow the configuration:

Configuration for eAthena:

When using the eAthena-Version of this warper, you need to change the following value in your conf/script_athena.conf like this:

check_gotocount: 8192

8192 works fine with the default configuration of this warper. When you add more dungeon levels and get "infinity_loop"-errors, just raise the value to 16384 (or any value you like...).

Screenshots:

costs.pngtimer.png

waiting.pngcheckout.png

How to configure:

  • Configuration starts at line ~54 ( CONFIGURATION - START )
  • Price Items: Here you can add up to 32 Items and amounts. They will automatically get the IDs 1,2,4,8,16,32.... (bitmask). These are the items you can use later for payments:
    setarray .price_items[0],
     //item-id, amount, // ID
      512, 10,  // 1
      513, 10,  // 2
      514, 5,  // 4
      515, 20;  // 8
    


  • Flags: Here you can add Vars (e.g. Account vars), an integer Value , which you need to add as string(!) They also will get bitmask IDs. With the third value you can configure how the relation between the var and your value needs to be.
    setarray .flags$[0],
     // 1 = smaller, 2 = equal , 4 = bigger
     //flagname, true-val,  option  // ID
      "special_quest_var", "1", "6",  // 1
      "#another_var",   "1", "6";  // 2
    


  • Percentages: Still working on this...will have no effect!
  • Menu Structure:
    Your main-menu can contain up to 15 different Types (e.g. Towns, Castles).
    You add a type with
    addType(<name>,<uniqueid>{,"modifier1",mod-value1{,"modifier2".....}});
    In each Type-Menu you can add up to 127 Submenus. (e.g. Prontera, Payon Dungeon)
    Adding those is possible with
    addMain(<name>,<uniqueid>{,"modifier1",mod-value1{,"modifier2".....}});
    In Each of this submenus you can add up to 31 Maps (e.g. pay_dun00, prontera) with the following command:
    addMap(<map title>,<map name=>,<uniqueid>{,"modifier1",mod-value1{,"modifier2".....}});
    So, to add a city into the city menu, this could look like this:
    addType("Citys",1);
     addMain("Alberta",1);
      addMap("Alberta","alberta",1);  
     addMain("Aldebaran",2);
      addMap("Aldebaran","aldebaran",2);
    


    Okay, this looks strange. A Submenu with only one map?
    Actually, when opening a menu which only contains one selection, the menu will be skipped, chosing the single point.
    Also this npc features a little system, which avoids the necessity of adding coordinates, and even the "addMap":

    addType("Citys",1);
     addMain("Alberta",1);
     addMain("Aldebaran",2);
    


    When a "Main"-menu does not contain any Map, the NPC will watch out for a warper-duplicate with the same ID than the menu, chosing its position as destination:

    aldebaran.gat,135,119,4 duplicate(dw_1_2) Warper::dw_1_3 859
    amatsu.gat,208,103,4 duplicate(dw_1_2) Warper::dw_1_4 859
    


    The name of the duplicate is always Warper::dw_<typeid>_<mainid>
    You even don't need to add coordinates. The NPC just takes those, of the Warper-Duplicate. (You will be warped to a 5x5-area around the NPC)

  • Adding Dungeons:
    addType("Dungeons",2);
     addMain("Abbey Dungeon",1);
      addMap("Abbey Dungeon Entry","nameless_n",1);
      addMap("Abbey Dungeon Lvl 1","abbey01",2);
      addMap("Abbey Dungeon Lvl 2","abbey02",3);
      addMap("Abbey Dungeon Lvl 3","abbey03",4);
    


    Okay, looks fine.....wait! No coordinates either?! That's right.
    When a map has got the ID "1", the npc will also checkout the warper with the menu-ID, using his position as destination.

    nameless_n.gat,159,187,4 duplicate(dw_1_2) Warper::dw_2_1 859
    


    If you want to be warped to an other level you will be warped randomly on the map in this case.
    (Don't panic, if you really need , there is a possibility to add coordinates :) )

Modifiers:

The idea, to add modifiers like this, is of course Toasty's! The explanation is also his one.

With the 'addType', 'addMain' and 'addMap' commands you are able to add modifiers to either give a set price or dynamically allow access to the specified menu or map (and some other things).

All modifiers will cascade down all children nodes until overwritten by another modifier. You can apply multiple modifiers but only one of each (ie..can't use 2x "gm" modifiers, but you can use 1x "gm", 1x "woe")Descriptions of all avaiable modifiers and examples follow:

There is no big difference between our two modifier-systems, except mine features more mods :)

  • "gm":
    Add this modifier, to only allow GMs to warp. In this example, you need to have gm-level 50 or higher to be able to access the Map.
    Maps or Menu-Points you are not allowed to use because of your GM Level won't be shown in the menu!
    addType("Secret Places",1,"gm",50);
    addMain("Place 1",1);
    addMain("Secret Dungeon",2);
     addMap("Secret Level 1","secret_map00",1);
     addMap("Secret Level 2","secret_map01",2);
    addMain("Another Place",3);
    


  • "woe":
    This one is a bit complex. The value you add, is a bitmask value, and you have to following options:
    0x0001: Hide this when WoE FE is acitve
    0x0002: Hide this when WoE FE is inactive
    0x0004: Hide this when WoE SE is acitve
    0x0008: Hide this when WoE SE is inactive
    =============================================
    (the following only works for maps of course)
    =============================================
    0x0010: Hide this when GvG is activated on the given map
    0x0020: Hide this when GvG is inactive on the given map
    0x0040: Hide this when you are not member of the guild claiming the castle
    =============================================
    When you set the hide options, you can also add unhide-options,
    which overwrite the Hiding in the given situation:
    =============================================
    0x0100: Unhide this when WoE FE is acitve
    0x0200: Unhide this when WoE FE is inactive
    0x0400: Unhide this when WoE SE is acitve
    0x0800: Unhide this when WoE SE is inactive
    =============================================
    (the following only works for maps of course)
    =============================================
    0x1000: Unhide this when GvG is activated on the given map
    0x2000: Unhide this when GvG is inactive on the given map
    0x4000: Unhide this when you are a member of the guild claiming the castle
    

    The following example, will always prohibit warping to the maps, except if GvG is activated into the castle, or if you are a member of the claiming guild:

    addType("Castles",3,"woe",0x500F);
    addMain("Aldebaran Castles",1);
     addMap("Neuschwanstein (Aldebaran)","aldeg_cas01",1);
     addMap("Hohenschwangau (Aldebaran)","aldeg_cas02",2);
     addMap("Nuenberg (Aldebaran)","aldeg_cas03",3);
     addMap("Wuerzburg (Aldebaran)","aldeg_cas04",4);
     addMap("Rothenburg (Aldebaran)","aldeg_cas05",5);
    


    Maps or Menu-Points you are not allowed to use because of WoE-issues won't be shown in the menu!

  • "class"
    This limits access to the menu/map according to the player's current job. Calculation method is exactly the same as the one used for jobs in item_db (ie..add up the bitmasks)
    (S.) Novice (2^00): 0x00000001
    Swordman (2^01): 0x00000002
    Mage (2^02): 0x00000004
    Archer (2^03): 0x00000008
    Acolyte (2^04): 0x00000010
    Merchant (2^05): 0x00000020
    Thief (2^06): 0x00000040
    Knight (2^07): 0x00000080
    Priest (2^08): 0x00000100
    Wizard (2^09): 0x00000200
    Blacksmith (2^10): 0x00000400
    Hunter (2^11): 0x00000800
    Assassin (2^12): 0x00001000
    Unused (2^13): 0x00002000
    Crusader (2^14): 0x00004000
    Monk (2^15): 0x00008000
    Sage (2^16): 0x00010000
    Rogue (2^17): 0x00020000
    Alchemist (2^18): 0x00040000
    Bard/Dancer (2^19): 0x00080000
    Unused (2^20): 0x00100000
    Taekwon (2^21): 0x00200000
    StarGladi (2^22): 0x00400000
    Soul Linker (2^23): 0x00800000
    Gunslinger (2^24): 0x01000000
    Ninja (2^25): 0x02000000


    //Eg. This will only allow access to the Payon dungeons to Wizards and Hunters
    addMain("Payon Dungeon",10, "job", 0x00000A00);
    addMap("Payon Dungeon - Lvl 1", "pay_dun00",1);
    addMap("Payon Dungeon - Lvl 2", "pay_dun01",2);
    addMap("Payon Dungeon - Lvl 3", "pay_dun02",3);
    


    Maps or Menu-Points you are not allowed to use because of class-issues won't be shown in the menu! (by default)

  • "upper"
    This limits access to the menu/map according to wherever the player is a normal/high/baby class. Like with 'job' this works the same as the 'upper' value in item_db.
    //1: Normal jobs
    //2: Upper jobs
    //4: Baby jobs


    //Eg. This will only allow access to the casino to non-baby classes
    addMap("Casino", "cmd_in02",1,"upper", 3);


  • "questwarp"
    Adding this to a node, will only allow players to warp to a kind of "Mains", it they visited this place on their own before. (Mains are added with "addMain")
    Means, if they enter the Payon-Dungeon, they will be able now to access all Maps in the Payon-Dungeon Menu. You have the following bitmask options:
    1: acitvate questwarping
    2: use account-vars instead of char-vars (recommended)
    


    // Account based questwarping. Once the user enters on of the tree maps, he will be able to access all those maps with the warper.
    addMain("Payon Dungeon",10, "questwarp", 3);
    addMap("Payon Dungeon - Lvl 1", "pay_dun00",1);
    addMap("Payon Dungeon - Lvl 2", "pay_dun01",2);
    addMap("Payon Dungeon - Lvl 3", "pay_dun02", 3);
    


    Each type needs <mains>/32 integer-vars to save the players status.
    So when you have 32 Towns, this will use exactly one var/account. But when you have 33 this will need two vars.

  • "bmaxlvl" , "bminlvl"
    Adding this options, will only grant you access when your Baselevel is bigger or equal/lower or equal to the given level.
    // To have access, you need to have a level from 30 to 50:
    addMain("Payon Dungeon",10, "bmaxlvl", 50,"bminlvl",30);
    addMap("Payon Dungeon - Lvl 1", "pay_dun00",1);
    addMap("Payon Dungeon - Lvl 2", "pay_dun01",2);
    addMap("Payon Dungeon - Lvl 3", "pay_dun02", 3);
    


  • "flag"
    This allows you to use the vars, you had to set before.
    //e.g. we setted:
    "special_quest_var1",  "1", "6",   // ID: 1
    "special_quest_var2",  "20", "5"; // ID: 2
    


    // You only will be able to enter if var1 is bigger or equal 1, and if var 2 is lower or equal 20
    addMain("Payon Dungeon",10, "flag",3); // 3 = 2+1
    addMap("Payon Dungeon - Lvl 1", "pay_dun00",1);
    addMap("Payon Dungeon - Lvl 2", "pay_dun01",2);
    addMap("Payon Dungeon - Lvl 3", "pay_dun02", 3);
    


  • "price"
    Simply add a value, and the user will have to pay the fee.
    Users can access every menu, even if they don't have enough money.
    They just won't be able to warp.
  • "price_item"
    This works similar to the flag-modifier. Just set the bitmask-ID of the items you have setted before.
    // To enter payon dungeon, you will need 10000 zeny and the items with IDs 1+4+8 = 13
    addMain("Payon Dungeon",10, "price",10000,"price_item",13);
    addMap("Payon Dungeon - Lvl 1", "pay_dun00",1);
    addMap("Payon Dungeon - Lvl 2", "pay_dun01",2);
    addMap("Payon Dungeon - Lvl 3", "pay_dun02", 3);
    


  • "price_red"
    ...not implemented yet :P
  • "mapusers"
    As the most warpers, this on gives you the possibility to show you how many users are on a specific map, or in a dungeon, or even in all the towns. There are tree options:
    1: show users of this type in the type-menu (for example in all citys)
    2: show users online on all maps of this submenu/dungeon/town
    4: show users online on every single map in the Map-Menu
    


    //Watch this screenshot what this does 
    addType("Dungeons",2,"mapusers",6);
    


  • "blindmap"
    Blindmaps will be ignored, when counting users in a Dungeon e.g. , and When you enter such a map, you will not activate the questwarp-effect.
    This is usefull, when you add an entrance warper to a dungeon. You don't want to know how many users are in front of a dungeon, and you did not visit a dungeon, just because you stood in front of it... =)
    blindmap don't needs any value at the moment, just add:
    "blindmap",0,...
    


  • "srcmap"
    This is nearly the same as blindmap. But in this case you need to give a map name:
    
    addMap("Neuschwanstein (Aldebaran)", "alde_gld",2,"x",48,"y",83, "srcmap", "aldeg_cas01");
    


    With this, the Warper will count the users into the castle, and not on the guild map.
    Also the map "alde_gld" won't count as visiting map. "aldeg_cas01" will do instead.

  • "x" , "y"
    As I promised: With this modifiers, you can add specific coordinates to your map =)
  • "lastwarps" , "favourites
    This modifier only works with the 'addType' Command, and will add the Lastwarp or Favourites menu.point. The argument contains the maximum of maps a user can store.
    The maximum is 64 for the moment. I don't think more will ever be necessairy.
    //this will add the favourites und lastwarps menu points to the menu and allow the users to store 6 maps in each of them
    addType("Favourites",4,"favourites",6);
    addType("Last Warps",5,"lastwarps",6);
    

    Each map stored will use half of an integer var. Means you need one integer var to store two maps. (yes, every map uses 4+7+5 bits ;) )

Yeah, that's all about them for the moment <.<

Cascading Rules:

Yeah...the rules. Good look understanding them instantly ^^'

  • When you add a modifier to a Menu, the Submenus und Maps will use this modifier.
  • When you add a modifier to a Submenu or Map, it will completly overwrite the value you set in the parent node.
    This makes it possible to prohibit the access to all Citys but one:
    //allow access to all citys only for players on level 20 or higher, except alberta
    addType("Citys",1,"bminlvl",20);
     addMain("Alberta",2,"bminlvl",0);
     addMain("Aldebaran",3);
     addMain("Amatsu",4);
    


  • When you have set a restriction, players won't be able to open the submenu, if they don't meet up the requirements. But if there is a Submenu or Map, overwriting a value you set with a less strong value, palyers will alway be able to access this sub menu!
    //Players below level 20 won't be allowed to access the Citys-Submenu.
    addType("Citys",1,"bminlvl",20);
     addMain("Alberta",2,"bminlvl",40);
     addMain("Aldebaran",3);
     addMain("Amatsu",4);
    


    //Every player will be able to enter the submenu!
    addType("Citys",1,"bminlvl",20);
     addMain("Alberta",2,"bminlvl",0);
     addMain("Aldebaran",3);
     addMain("Amatsu",4);
    


    This is the disadvantage of my system. It would be too expensive to check every Sub-menu and Map... :P

Got it? =)

Other things you should now:

  • I added lots of debug messages which appear on starting up your server. It shouldn't be easy to make a mistake without recognizing it.
    E.g. when a map doesn't exist, doubled IDs, Empty Names, wrong settings, empty menus, too big menus.
    The client does only accept Strings up to 2047 characters. On starting up, the NPC will check out the worst-case length of every menu. When there is no error, you don't need to worry.
    (There is a little mistake in my calculation, the npc will count about 20 characters more, the worst case menu actually has...too bussy to fix this now...)
  • When you use this warper with lastwarp, favourites or questwarping, it will use the uniqueID of the types, mains and maps, to store the data. This means you should never change the IDs, after your players started using the warper.
    When you add new Maps, just use another ID. You can even swap the maps as you want like this:
     addMain("Jawaii",13);
     addMain("Einbech",7);
     addMain("Hugel",11);
     addMain("Einbroch",8);
     addMain("Izlude",12);
     addMain("Geffen",9);
     addMain("Gonryun",10);
    


    The maps will shown in the order, you ordered them. The IDs are only there to store data permanently.
    If users have maps in there Lastwarp-Menu you removed, the will automatically be deleted from their data.

  • I don't know about gotos as Toasty does, and the freeloop-command is not very helpfull when you are calling down about 10 functions. So when starting up, I had to use some "sleep 1"s. This is why the NPC will need up to 5 seconds to load his data after the OnInit-event got executed. During this time, players won't be able to speak to the NPC.
  • When the Warper finished loading, you will get a debugmes With the amount of maps that were loaded.
  • When a Party leader wants to take his party with him, the members who want to join him will have to be on the same map, and meet the requirements to warp.
    The Leader will get a list of his members, and if/why they are able to join.
    Then all members will be askied the same time if they want to join. A 15 seconds timer will start to wait for the members. When all members checked in/out, the timer will stop.

Technical Stuff

  • Every map needs 16 bits to be saved:
    - 4 Bits for the Type
    - 7 Bits for the Main
    - 5 Bits for the Map
    (don't ask me , why I called this "main"... -.-)
    Informations are stored like this:
    .typeName_<typeid>
    .mainName_<typeid>_<mainid>
    .mapName_<typeid>_<mainid>_<mapid>
    So this is like I store the lastwarps und favourites.
    The disadvantage to Toasty is that it takes more storage, as he only has got as much IDs as Maps =)
    But when you remove or add a Map, after players added Lastwarps you will have completly different Maps in your menu suddenly. :/
  • Every player has got a dw_infoSave var, containing some informations.
    Before it contained 2 pointers and the amounts of favourites and lastwarps, but after I changed the structure of storing the maps, it only contains two amounts:
    [ 10 bits free ] [ 6 bits: amount of favourites ] [10 bits free ] [ 6 bits: amount of lastwarps]
    This is on reason, why the maximum is 64.
    The other reason ist, that the lastwarps and favourites each have a string to store the data. Each map uses 16 Bits, which will be transformed to 3 chars. 3*64 = 192 (Max 255). This means you could add some more...but is this really necessairy?
  • Every Type, Main and Map has got a modifier Int-Var (.typeMod_<id>)
    In this var, every modifier that has got the ability to cascade down, uses two bits,
    to indicate, if there is a value existing, and if there is a less-strong requirement in a sub-menu.
    When I need to check out all the modifiers which have to be hidden in the menu, I just use a var called .modifier_showInMenu , which contains all those modifiers.
    You can take a look at this searching for "settings: modifier groups START".
    The modifier-values themselves are stored like this:
    .mapMod_questwarp_<tID>_<mID>_<mpID>
  • When you activate questwarping, the OnMapLoadEvent is used.
    To fast check if this is a questwarping map, there is a int-var for each of this maps,
    ( $@dw_maps_<mapname> ), containing the full ID of the map.
  • This NPC uses the instancing commands, to send the warping information to all the Party members.
    To attach the partymembers to a thread, I use a global pipe-array, which contains all the waiting charIDs. I need to improve this, because at the moment it could happen that members are overwritten, when to party leaders warp exactly at the same time.
    (should not happen...but when it does, it is just annoying...)
    Oh, and when a player is using an other npc while the party leader aks to warp, it becomes very odd...
    But how to check if a player is already talking to a npc?....
  • When a party is warped, the members all appear somewhere in a 5x5-area around the goal, instead of landing on one single point. I think this looks more natural.
  • eaj2base is a little function, which converts the BaseJob value to the right bitmask value. I thought this would be easier, than storing all the values....not sure about this. But it looks cute.
  • The RO-Client is not able to count seconds properly (seems to..)<.<
    If you use showdigit 15,3; it will take about 5 to 15 seconds, until the count down has ended...(depends on CPU

That's all about it! I would appreciate critique and compliments =)

Greetz, MusiChronos

Credits: Toasty for the Adding basic idea, some descriptions of this manual and some of the coordinates.

Bugtracker:

Version: 1.0 , Minor-Bug
debugmes "[Warper/Error] Instance Error No. "+.@id+" occured!"; //should only be -3 ==> max instances
.@id has to be .@iID
Fixed in Version: 1.0.1

Version:1.0 , Minor-Bug

for(set .@i,0; .@i < 'warpID; set .@i,.@i+1) {
	if('warpID[.@i] == getcharid(3)) {
		set .@num,.@i;
		break;
	}
}
becomes:


for(set .@i,0; .@i < getarraysize('warpID); set .@i,.@i+1) {
	if('warpID[.@i] == .@aID) {
		set .@num,.@i;
		break;
	}
}
Fixed in Version: 1.0.1

Edited by MusiDex
  • Upvote 2
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  162
  • Reputation:   1
  • Joined:  08/08/12
  • Last Seen:  

Bravo! I gonna use this! Especially quest warp ability, just because it has more available dungeons and much more abilities than quest warper in SVN.

would be perfect, if this one would have some in-game settings for GM accounts just like main quest warper has. So, allows to enable and configure settings in- game )

Anyway, wrm first sight it's just a brilliant warper :)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Hello Golem, thanks for your reply :)

I will think about the GM-Menu idea. But I think for Admins it is easier to save their configurations,

when they set them into the file itself. Also, configuring this warper ingame would be very annoying,

as the settings in the file are already very complex. :/

One possibility would be, to save the settings into a complex sql database, to be able to export them to other servers.

Will think about it :P

Greetz, Musi

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  162
  • Reputation:   1
  • Joined:  08/08/12
  • Last Seen:  

Thanks for your reply...

Wanted to ask about quest warper function.

If I will put:

addMain("Payon Dungeon",25, "questwarp", 1);
addMap("Payon Dungeon Entrance","pay_arche",1,"srcmap","pay_dun00");

Will it trigger and save location by entering pay_arche or only entering pay_dun00?

This is quite important, because I very like present system- he warps to the entrance, and It will be very usefull for high-level dungeons.

I rule my low-rate and this script will be just brilliant.

And one more question, sir- I can add up to 255 maps to get this warper work? For example I need 48 dungeons with only 1 level warp (it will warp only to level 1 of each dungeon, as I plain- to the entrance of each dungeon). Will it be able to do? Cause the warper in the SVN can't store more than 30 dungeons (dungeons, not levels in summ)... Thanks for next reply :)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Hi Golem :)

addMain("Payon Dungeon",25, "questwarp", 1);

addMap("Payon Dungeon Entrance","pay_arche",1,"srcmap","pay_dun00");

Yes, with this configuration a player selecting "Payon Dungeon" will directly be warped to this map,and the effect will trigger when the player is entering the "pay_dun00" map :)

Oh, I forgot to write how many maps you can add :D

Here we go:

- 16 Types

- 128 Submenus (Mains) per type

- 32 Maps per Submenu

I think this should be enough. Have fun! :)

Greetz, Musi

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  162
  • Reputation:   1
  • Joined:  08/08/12
  • Last Seen:  

Hi Golem :)

addMain("Payon Dungeon",25, "questwarp", 1);

addMap("Payon Dungeon Entrance","pay_arche",1,"srcmap","pay_dun00");

Yes, with this configuration a player selecting "Payon Dungeon" will directly be warped to this map,and the effect will trigger when the player is entering the "pay_dun00" map :)

Oh, I forgot to write how many maps you can add :D

Here we go:

- 16 Types

- 128 Submenus (Mains) per type

- 32 Maps per Submenu

I think this should be enough. Have fun! :)

Greetz, Musi

just perfect /no1

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  162
  • Reputation:   1
  • Joined:  08/08/12
  • Last Seen:  

One question more, If I want to make towns as questwarp, what should I put than?

This way?

   	 addMain("Aldebaran",2, "questwarp", 1);

Ahh, tested, think that this way is right one :)

And, could we all have 1.0.1 version if warper were updated?

And could you do the very nice option for questwarp? Basicly I want to unlocked dungeons would be shown in list first, than unlocked... This is not neccesarry through, cause there is nice "favourites" option :D

Edited by Golem1988
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  4
  • Topics Per Day:  0.00
  • Content Count:  44
  • Reputation:   48
  • Joined:  11/19/11
  • Last Seen:  

I'm glad someone out there understands my script enough to take ideas out of it =P

The big difference between our systems is, that when I cascade down, I don't save the modifier for every single Submenu or map. They just look upwards if they find the values over there. This should save a bit of space.

Ah... There is a reason for this. When I write scripts I tend to put memory usage over processing time. A few hundred extra variables is considered cheap compared to doing an extra 2-3 comparisons/retrievals per map per player click in my book.

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Hi Golem :)

Yes, your setting will activate questwarping for this map.

To activate this on every Map in the towns menu, it is enough to add this option to the Type Towns liekt this:

addType("Towns",1,"questwarp",1);

I will release 1.0.1 soon. The bugs are only minor bugs, so there should not be any problems for players.

You have the possibility to decide, if non-fullfilled conditions for menu-points are hidden. shown in red, or even not checked in the menu. But the questwarp up to now was the only one which does not support this, but with some little changes this will do.

Just wait for 1.0.1 ;)

(to sort the list would be to complex, sorry =(

@Toasty:

Hi, thanks for your reply! Actually, I wrote this npc and the text half a year ago.

But because of time problemes, I had to move the release date.

If I would rewrite this, I also would save more informations, instead of looking for them somewhere else.

(In the worst case this saves about 16*128*32*10 = ~650 000 int-vars, average case (full dungeons, fields, 4 mods used) about 2000 int vars, so nothing)

But the checking sequence per modifier gets about 6 checks more (worst case), so I can live with this childhood mistake :P

The real win about this 3 layers system, is the unique ID, which prevents errors, after the admin changed map orders :)

Greetz, Musi

Edited by MusiDex
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  8
  • Topics Per Day:  0.00
  • Content Count:  27
  • Reputation:   0
  • Joined:  02/02/12
  • Last Seen:  

I get an error online line 459. It says "parse line needs ';'"

if(.warpConfirm) {

mes .name$;

mes sprintf(.t_warpto$' date='.@destination$);[/b']

if(.@price) {

mes sprintf(.t_cost$,.@price);

}

Edited by kealzorz
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  112
  • Topics Per Day:  0.03
  • Content Count:  388
  • Reputation:   4
  • Joined:  05/01/12
  • Last Seen:  

guys please add light halzen dungeon from level 1 to 4 :Oa

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Hi kangfredy.

You can use the full-level conffiguration:

http://kingkronos.bplaced.net/ea/dungeons_full.txt

Copy this, and paste it into your script and add Level 4.. Otherwise you will have to wait for 1.0.1, which should come on 16th october . :)

kealzorz:

Could you please tell me your athena rev. and show me your configuration, or the full script?

Because in this snippet, this error doesn't make any sense to me :D

This error appears on startup, doesn't it? So this must be an error, which was created while you did you configuration :/

Greetz, Musi

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  8
  • Topics Per Day:  0.00
  • Content Count:  27
  • Reputation:   0
  • Joined:  02/02/12
  • Last Seen:  

I didn't modify it at all,l and it's quite an old one, although toastys warper works fine on it. its like 14967 or something eathena

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Hi kealzorz, as I said, eAthena misses the freeloop command. I did not think about, how to script this without it,

so for now this script will only be available for rAthena users :/

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  72
  • Topics Per Day:  0.02
  • Content Count:  2997
  • Reputation:   1130
  • Joined:  05/27/12
  • Last Seen:  

You can add "sleep2 1" at the end of loops to simulate a freeloop, but it'll be slower, of course. Another option is to raise the check_gotocount setting in conf\script_athena.conf, but you'll have to be especially careful with infinite loops.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Adding sleep2 1 slows down the script too much, as you said.

Maybe I will release a version without the freeloops and check out, how much gotos I have to allow, thanks for this information,

didn't know abotu this setting.

greetz, musi

Link to comment
Share on other sites

  • 2 weeks later...

  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  11
  • Reputation:   3
  • Joined:  03/08/12
  • Last Seen:  

Update to 1.1!

New:

  • Now compatible to eAthena (view the configuration) (I did not test this on a real eAthena server, but should work...)
  • All the modifiers values are now duplicated while cascading to gain cpu. I loved creating my special system, but this simple one just works faster :)
  • minor bugfixes solved
  • @Golem: I added a way now, to hide the non-visited citys in the menus. Just watch out for this line:
    //= settings: modifier groups START


    Now, by moving the ".modifier_questwarp" from showInMenu to dontShowInMenu, the warper will only list the citys/dungeons already visited by the player :) hf

Now I will have to update this old manual above... :P

If you find bugs or something else please tell me. And if you like it, tell me. too ;)

Greetz, Musi

€dit: What do you think about a system, which adds a position on worldmap to each destination,

so the price (items, zeny) will be raised proportional with the distance between :P

Edited by MusiDex
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  162
  • Reputation:   1
  • Joined:  08/08/12
  • Last Seen:  

Brilliant, I was waiting for that 1.1 release. My players like your warper very well and I like it as well :D

Edited by Golem1988
Link to comment
Share on other sites

  • 2 months later...

  • Group:  Members
  • Topic Count:  112
  • Topics Per Day:  0.03
  • Content Count:  388
  • Reputation:   4
  • Joined:  05/01/12
  • Last Seen:  

guys need tutor installation how to add full dungeon...installation dupplicate.. :( im interesting but it's make me confuse... please make full include full dungeon and duplicate..

Edited by kangfredy
Link to comment
Share on other sites

  • 7 months later...

  • Group:  Members
  • Topic Count:  75
  • Topics Per Day:  0.02
  • Content Count:  231
  • Reputation:   9
  • Joined:  12/16/11
  • Last Seen:  

Any field warper?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  112
  • Topics Per Day:  0.03
  • Content Count:  388
  • Reputation:   4
  • Joined:  05/01/12
  • Last Seen:  

i hope someone can update this script

Link to comment
Share on other sites

  • 8 months later...

  • Group:  Members
  • Topic Count:  76
  • Topics Per Day:  0.02
  • Content Count:  461
  • Reputation:   61
  • Joined:  08/28/12
  • Last Seen:  

This script doenst work anymore for the latest rAthena rev, cause the instance system was rewrite. http://rathena.org/board/topic/84123-r17386-instance-system-rewrite/?p=206394

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...