Jump to content

MusiDex

Members
  • Posts

    11
  • Joined

  • Last visited

Profile Information

  • Gender
    Not Telling

Recent Profile Visitors

1572 profile views

MusiDex's Achievements

Poring

Poring (1/15)

3

Reputation

  1. It was so very usefull!

  2. Hey, there! i just wanna say 'THANK YOU' very much for sharing this amazing script KingKrono's Dynamic Warper!

  3. 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... 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
  4. 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
  5. 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 :/
  6. 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 This error appears on startup, doesn't it? So this must be an error, which was created while you did you configuration :/ Greetz, Musi
  7. 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 The real win about this 3 layers system, is the unique ID, which prevents errors, after the admin changed map orders Greetz, Musi
  8. 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 Here we go: - 16 Types - 128 Submenus (Mains) per type - 32 Maps per Submenu I think this should be enough. Have fun! Greetz, Musi
  9. 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 Greetz, Musi
  10. 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 Dynamic-Warper 1.1 (rar)Single Files: warper.txt - duplis.txt eAthena AND rAthena Dynamic-Warper 1.1 (rar) Single Files: warper.txt - duplis.txt Dungeon-Configurations: Only Entrance Warpers (default) Full Dungeon-Level 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: 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 "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... 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
  11. add an "isPlayerReading()"-command, to check if a player has got a mes-window or a menu opened. When using doevent on a player, without checking this, you may have 2 buttons at once. Very weird Greetz
  12. The ' ' are there to show you where rA found an error. As it says, it misses an argument: announce "A Gamemaster has started the Disguise Event",0; greetz
  13. freeloop(<toggle>), make it working better when nested. This command was a great idea, but I think it needs a little bit more optimisation: When you work with functions like this: freeloop(1); while(1) { function1(); } freeloop(0); //===== function function1 { //many stuff freeloop(1); while(1) { //many stuff } freeloop(0); //many stuff } The freeloop will be deactivated leaving the while-loop in the function1, causing an infinity-loop error in my main-code, when the amount of "gotos" was reached in the "many stuff" regions. This means using the function1 is only possible like this: freeloop(1); function1(); freeloop(0); because using the freeloop inside the function will head to the infinity loop error. Greetz, MD
×
×
  • Create New...