Jump to content

Winterfox

Members
  • Content Count

    403
  • Joined

  • Last visited

  • Days Won

    10

Everything posted by Winterfox

  1. @@jaiko23 You could try this one: - script ItemRestrictionSystem 1,{ OnInit: setarray( .mapNames$, "prtg_cas01", "prtg_cas02", "prtg_cas03", "prtg_cas04", "prtg_cas05", "aldeg_cas01", "aldeg_cas02", "aldeg_cas03", "aldeg_cas04", "aldeg_cas05", "payon" ); setarray( .restrictedItemIds, 30158, 30159, 30160, 30161, 30162, 30163, 30164, 30165, 30166, 30167, 30168, 30169, 30170, 30145 ); for( .@i = 0; .@i < getarraysize( .mapNames$ ); .@i++ ) setmapflag(.mapNames$[ .@i ], mf_loadevent ); end; OnPCLoadMapEvent: getmapxy( .@currentMap$, .@x, .@y, 0 ); for( .@i = 0; .@i < getarraysize( .mapNames$ ); .@i ++) { if( .@currentMap$ == .mapNames$[ .@i ] ) { .@onMap$ = .mapNames$[ .@i ]; break; } } if( .@onMap$ == "" ) end; while( sleep2( 200 ) && .@currentMap$ == .@onMap$ ) { for( .@i = 1; .@i <= 20; .@i++ ) { for( .@j = 0; .@j < getarraysize( .restrictedItemIds ); .@j++ ) { if ( getequipid( .@i ) == .restrictedItemIds[ .@j ] ) { unequip( .@i ); dispbottom( "Equipment " + getitemname( .restrictedItemIds[ .@j ] ) + " is not permitted on map " + .@onMap$ + ". It has been stripped." ); } } } getmapxy( .@currentMap$, .@x, .@y, 0 ); } end;} It is based on the one you saw but i extended it. In .mapNames$ you need to put the maps you want the function to work on and in .restrictedItemids holds the list of item ids that are restricted.
  2. Why don't you try it with the english names of the item? As far as i can see the configuration uses those. disabled_items: { Assumptio_5_Scroll: true Greed_Scroll: true Pty_Assumptio_Scroll: true Velum_Jamadhar: false Velum_Scare: false Velum_Buster: false Velum_Guillotine: false Velum_Spear: false Velum_Glaive: false Velum_Bible: false Velum_Encyclopedia: false Velum_Claw: false Velum_Arc_Wand: false Velum_Damascus: false Velum_Stunner: false Velum_Flail: false Velum_Arbalest: false Velum_CrossBow: false Velum_Claymore: false Velum_Katzbalger: false Siege_Arrow_A: false Siege_Arrow_S: false Siege_Greave: false Siege_Boots: false Siege_Shoes: false Siege_Manteau: false Siege_Muffler: false Siege_White_Potion: false Siege_Blue_Potion: false Woe_Violet_Potion: false Woe_White_Potion: false Woe_Blue_Potion: false Siege_Plate: false Siege_Suits: false Siege_Robe: false C_Beginner_Cap: true}
  3. @jaiko The 2 means which slot the item takes and getequipid returns the id so to check for a certain item it has to be: if ( getequipid( SLOTID ) == ITEMDID ) unequip SLOTID; That will unequip the the item ITEMID if it is in slot SLOTID
  4. Not exe diffing, but client reverse engineering :-) Well diffing is technically the automated process to apply changes that a reverse engineer would do by hand. So there isn't that much difference except it's easier to apply a diff than to reverse engineer and change it yourself.
  5. A simple script that allows to apply a hydra effect on a mob. This means if you kill it 2 of that monster will spawn to take its place. You can define what monsters get the effect applied by their ids and on what maps the effect is active. I think standalone it is not that usefull but could be interesting for reference how to achieve such a effect or to add it to a event or something similiar. http://upaste.me/60fb2107057117031
  6. There are plenty free forums around. http://www.simplemachines.org/ https://www.phpbb.com/ http://vanillaforums.org/ http://www.mybb.com/
  7. @@Nagad I looked up what i could find that needs to be changed to transfer a character from one acc to another. I didn't test it there may be bugs due that i forgot some table or something. You will have to test that out. Also be aware that you can't transfer bank or storage things. So if a player transfers, he has to give his char zeny or items he wants to transfer before doing so. Here is the sql: UPDATE `char` SET `account_id` = NEW_ACCOUNTID WHERE `account_id` = OLD_ACCOUNTID AND `char_id` = CHARID;UPDATE `friends` SET `friend_account` = NEW_ACCOUNTID WHERE `friend_account` = OLD_ACCOUNTID AND `friend_id` = CHARID;UPDATE `guild_member` SET `account_id` = NEW_ACCOUNTID WHERE `account_id` = OLD_ACCOUNTID AND `char_id` = CHARID;UPDATE `party` SET `leader_id` = NEW_ACCOUNTID WHERE `leader_id` = OLD_ACCOUNTID AND `leader_char` = CHARID;
  8. @@Nagad I made a update since i thought the checks could be done a little better. I noticed that i forgot to check if the boost is allready given. That means the script you currently use will allways apply the boost if the class is right even though its infinite anyway. The new version pre checks if it needs to change something and just exits if it doesn't. If it does it will either enable or disable the boost according to the class. - script FloatingClassRates -1,{ OnRefresh: OnPCLoginEvent: addtimer( 10000, strnpcinfo(3) + "::OnRefresh" ); .@boostActive = getstatus( SC_CASH_PLUSEXP, 0 ); .@classBonusApplies = ( Class == 10 || Class == 12 || Class == 16 || Class == 4046 || Class == 4047 || Class == 4048 || Class == 4049 || Class == 23 || Class == 24 || Class == 25 ); if( .@classBonusApplies && .@boostActive ) end; if( .@classBonusApplies ) sc_start( SC_CASH_PLUSEXP, -1, 100 ); else if( .@boostActive ) sc_end( SC_CASH_PLUSEXP );}
  9. Do you have renewal enabled? Since that changes how exp are given based on the level of you and the mob you kill.
  10. - script FloatingClassRates -1,{ OnRefresh: OnPCLoginEvent: if( Class == 10 || Class == 12 || Class == 16 || Class == 4046 || Class == 4047 || Class == 4048 || Class == 4049 || Class == 23 || Class == 24 || Class == 25 ) { sc_start( SC_CASH_PLUSEXP, -1, 100 ); } else if( getstatus( SC_CASH_PLUSEXP, 0 ) ) { sc_end( SC_CASH_PLUSEXP ); } addtimer( 60000, strnpcinfo(3) + "::OnRefresh" );} This way it will apply the boost if your class is right. If its wrong it will check if you have a active boost and disable it. In both cases will it add the timer. The purpose of this is that if a person changes his class to a fitting class or a non fitting class, it will be able to enable or disable the boost in both directions.
  11. Well i would look in the source code for the OnNPCKillEvent and try to create something like a OnNPCSupportKillEvent based on this. Theoretically you have to track who attacked that mob and afterwards trigger that label for all players that got tracked earlier..
  12. *monster "<map name>",<x>,<y>,"<name to show>",<mob id>,<amount>{,"<event label>",<size>,<ai>};<ai> can be:0 = none (default)1 = attack/friendly2 = sphere (Alchemist skill)3 = flora (Alchemist skill)4 = zanzou (Kagerou/Oboro skill) You need to set ai to 1 to make a mob attack another mob.
  13. @@Nagad I am not sure if you can make the SC_CASH_PLUSEXP effect infinite by setting the tick to -1. I don't get why you set the exp bonus to zero though. But your class part is correct. If you want it truly permanent and setting the tick to -1 and that 0 exp bonus work as intended everything should be allright. Be aware though: If someone changes his class to a class that isn't on the list he will have the bonus anyway. I would recommend to add check if a player has the status effect allready. This prevents the effect from beeing refreshed if it doesn't need to. - script FloatingClassRates -1,{ OnPCLoginEvent: if( !getstatus( SC_CASH_PLUSEXP, 0 ) && ( Class == 10 || Class == 12 || Class == 16 || Class == 4046 || Class == 4047 || Class == 4048 || Class == 4049 || Class == 23 || Class == 24 || Class == 25 ) ) sc_start( SC_CASH_PLUSEXP, -1, 0);} If it doesn't work with tick set to -1 or you don't want a player to have the bonus when he changes his class to another that doesn't belong to the chosen ones i would go for: - script FloatingClassRates -1,{ OnRefresh: OnPCLoginEvent: // if player has the right class. if( Class == 10 || Class == 12 || Class == 16 || Class == 4046 || Class == 4047 || Class == 4048 || Class == 4049 || Class == 23 || Class == 24 || Class == 25 ) { // add a 1 minute 100% exp bonus sc_start( SC_CASH_PLUSEXP, 60000, 200 ); // set a timer 1 minute timer to refresh the bonus addtimer( 60000, strnpcinfo(3) + "::OnRefresh" ); }}
  14. - script FloatingClassRates -1,{ // labels of times to enable floating rates. OnFri0000: .floatingClassRates = 1; end; // labels of times to end the floating rates. OnMon0000: .floatingClassRates = 0; end; OnRefresh: OnPCLoginEvent: // ignore it if the player allready has a exp bonus or the floating exp event is disabled. if( getstatus( SC_CASH_PLUSEXP, 0 ) || !.floatingClassRates ) end; // if player has the right class. if( .classes[ Class ] ) { // add a 1 minute 100% exp bonus sc_start( SC_CASH_PLUSEXP, 60000, 200 ); // set a timer 1 minute timer to refresh the bonus addtimer( 60000, strnpcinfo(3) + "::OnRefresh" ); } end; OnInit: // switch if the script is enabled at the server start .floatingClassRates = 0; // list of class ids setarray( .@classIds, 1, 2, 3, 4, 5 ); for( .@i = 0; .@i < getarraysize( .classIds ); .@i++ ) .classes[ .classIds[ .@i ] ] = 1; end;} This snippet will apply a exp bonus of 100% to a class given in the .@classids array on login that lasts 1 minute and refreshes every minute as long as the player doesn't allready have a running exp boost, a fitting class and the floating rates are enabled. I didn't test it so it might have a typo here and there. I cant say if it is a good idea to use the expoboost state from the cash shop items when you have also cash items. Neither do i know how hard the hit on performance will be when so many timers run every minute to check the class of a player etc. but i didn't find a better way to do it. At the end you should experiment with it and see if the results work for you.
  15. Where is this monster arena option?
  16. Replace: setarray .Open_Maps$[0],"guild_vs3","guild_vs1","payg_cas01","gefg_cas01","prtg_cas01"; with: setarray .Open_Maps$[0], "guild_vs3","payg_cast01","gefg_Cast01","prtg_cas01","guild_vs1","guild_v5";
  17. @@Oxxy he did but just said it doesn't work and if i can look at it. When i asked him, what didn't work he told me he would ask the community to debug it. But atleast here he said what the problem seems to be.
  18. @@Zhao Chow @@Akaneharuka [衣装] ビギナー帽 translates to [Costume] Beginner Cap. So i think that would be a bit better: ACCESSORY_Beginner_Hood = 2500,[ACCESSORY_IDs.ACCESSORY_Beginner_Hood] = "_ ºñ±â³Ê¸¶Å©", AegisName: "Beginner_Hood"Name: "Beginner Hood" unidentifiedDisplayName = "Beginner Hood",identifiedDisplayName = "Beginner Hood",
  19. Maybe the client is just unstable from beeing hexed. Not all clients allways work stable with certain hex modifications.
  20. To have success rate and adding crafting points you could do something like this: ...if( rand( 10000 ) <= .receiptSuccessRates[ .@selectedReceipt ] ) {...craftingPoints += .craftingPoints;...}...OnInit:...// Rate : 1 = 0.01% / 100 = 1% / 1000 = 10% / 10000 = 100%setarray( .receiptSuccessRates, 100, 100 );.craftingPoints = 5;...
  21. { // =================== Mandatory fields =============================== Id: 50000 AegisName: "Beginner Item" Name: "Beginner Item" // =================== Optional fields ================================ Type: Item Type (int, defaults to 3 = etc item) Buy: Buy Price (int, defaults to Sell * 2) Sell: Sell Price (int, defaults to Buy / 2) Weight: Item Weight (int, defaults to 0) Atk: Attack (int, defaults to 0) Matk: Magical Attack (int, defaults to 0, ignored in pre-re) Def: Defense (int, defaults to 0) Range: Attack Range (int, defaults to 0) Slots: Slots (int, defaults to 0) Job: Job mask (int, defaults to all jobs = 0xFFFFFFFF) Upper: Upper mask (int, defaults to any = 0x3f) Gender: Gender (int, defaults to both = 2) Loc: Equip location (int, required value for equipment) WeaponLv: Weapon Level (int, defaults to 0) EquipLv: Equip required level (int, defaults to 0) EquipLv: [min, max] (alternative syntax with min / max level) Refine: Refineable (boolean, defaults to true) View: View ID (int, defaults to 0) BindOnEquip: true/false (boolean, defaults to false) ForceSerial: true/false (boolean, defaults to false) BuyingStore: true/false (boolean, defaults to false) Delay: Delay to use item (int, defaults to 0) KeepAfterUse: true/false (boolean, defaults to false) Trade: { (defaults to no restrictions) override: GroupID (int, defaults to 100) nodrop: true/false (boolean, defaults to false) notrade: true/false (boolean, defaults to false) partneroverride: true/false (boolean, defaults to false) noselltonpc: true/false (boolean, defaults to false) nocart: true/false (boolean, defaults to false) nostorage: true/false (boolean, defaults to false) nogstorage: true/false (boolean, defaults to false) nomail: true/false (boolean, defaults to false) noauction: true/false (boolean, defaults to false) } Nouse: { (defaults to no restrictions) override: GroupID (int, defaults to 100) sitting: true/false (boolean, defaults to false) } Stack: [amount, type] (int, defaults to 0) Sprite: SpriteID (int, defaults to 0){ Script: <"bonus bHit, 30; bonus bMaxHP, 1000; bonus bMaxSP, 200; skill 28, 1; skill 70, 1; skill 231, 1; skill 2051, 1; skill 2043, 1;"> OnEquipScript: <" OnEquip Script (can also be multi-line) "> OnUnequipScript: <" OnUnequip Script (can also be multi-line) ">}}, It is important to give that item a high enough id so it doesn't collide with normal items. the important part for what you want is this: Script: <"bonus bHit, 30; bonus bMaxHP, 1000; bonus bMaxSP, 200; skill 28, 1; skill 70, 1; skill 231, 1; skill 2051, 1; skill 2043, 1;"> bonus bHit, x; gives x additional hit. bonus bMaxHP, x; gives x additional hp. bonus bMaxSP, 200; gives x additional hp. skill x, y; gives skill x with level y. 28 is heal, 70 is sanctuay, 231 is potion pitcher, 2051 is highness heal and 2043 is culoceo heal.
  22. prontera,142,177,3 script Cooking Chef 730,{ mes( "[Chef]" ); if( !learnedReceipts ) { mes( "You didn't learn any receipt, go away!" ); close; } for( .@i = 0; .@i < getarraysize( .receiptInfos$ ); .@i++ ) { if( .@i == 0 ) .@flag = 1; else .@flag += .@flag; if( learnedReceipts & .@flag ) .@menu$ += .receiptInfos$[ .@i ] + ":"; } mes( "Select a receipt." ); .@selectedReceipt = select(.@menu$) -1; next; mes( "[Chef]" ); mes( .receiptInfos$[ .@selectedReceipt ] ); for( .@i = 0; .@i < .ingridientListCount; .@i++ ) { .@ingridient$ = getd( ".ingriedientList" + ( .@i + 1) + "$[" + .@selectedReceipt + "]" ); if( .@ingridient$ ) .@ingridientMenue$ += .@ingridient$; else break; } mes( "Select a ingridient." ); .@selectedIngridient = select( .@ingridientMenue$ ); next; .@ingridient$ = getd( ".ingriedientList" + .@selectedIngridient + "$[" + .@selectedReceipt + "]" ); mes( "[Chef]" ); mes( .@ingridient$ ); close; end; OnInit: setarray( .@receiptNames$, "Diablo", "Valkyrie" ); setarray( .ingriedientList1$, "Cheese", "Bread" ); setarray( .ingriedientList2$, "Fish", "Wine" ); setarray( .ingriedientList3$, "Onion", "Sausage" ); .ingrientListCount = 3; for( .@i = 0; .@i < getarraysize( .@receiptNames$ ); .@i++ ) .receiptInfos$[ .@i ] = .@receiptNames$[ .@i ]; end;}
  23. You should move that request into a source request, it is maybe possible but it would be quirky, hardly performant or not exactly as you would want it to be.
  24. @@WhiteEagle Maybe if you use the color codes in the item.lub/lua like this for example and change: tbl = { [501] = { unidentifiedDisplayName = "Red Potion", unidentifiedResourceName = "빨간포션", unidentifiedDescriptionName = { "A potion made from grinded Red Herbs that restores about ^00008845 HP^000000.", "^FFFFFF_^000000", "Weight: ^7777777^000000" }, identifiedDisplayName = "Red Potion", identifiedResourceName = "빨간포션", identifiedDescriptionName = { "A potion made from grinded Red Herbs that restores about ^00008845 HP^000000.", "^FFFFFF_^000000", "Weight: ^7777777^000000" }, slotCount = 0, ClassNum = 0 },...... to: tbl = { [501] = { unidentifiedDisplayName = "^0000FFRed Potion^000000", unidentifiedResourceName = "빨간포션", unidentifiedDescriptionName = { "A potion made from grinded Red Herbs that restores about ^00008845 HP^000000.", "^FFFFFF_^000000", "Weight: ^7777777^000000" }, identifiedDisplayName = "^0000FFRed Potion^000000", identifiedResourceName = "빨간포션", identifiedDescriptionName = { "A potion made from grinded Red Herbs that restores about ^00008845 HP^000000.", "^FFFFFF_^000000", "Weight: ^7777777^000000" }, slotCount = 0, ClassNum = 0 },......
  25. @@Dastgir Damn i was close i tried <ITEM> and <ITEMID> i would have never thougt of <ITEMLINK> Are all tags documented somewhere? I think it would be great addition.
×
×
  • Create New...

Important Information

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