-
Posts
446 -
Joined
-
Last visited
-
Days Won
34
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by Mabuhay
-
-
5 hours ago, BFPkiller said:
Hi there!
I'd like to ask some help regarding a script that i use.
It's the Wheel of Fortune script and i'd like to add a limit per use per ip, once a day.
Can someone help me out on that ?Much appreciated!
- script Wheel_of_Fortune FAKE_NPC ,{ OnInit: disablenpc("Wheel of Fortune#Main"); // disablenpc("Hussein#WOF"); .Eventname$ = "[Wheel Of Fortune]"; end; OnClock1500: OnClock1630: OnClock1900: OnClock2200: OnStart: .Start = true; announce(sprintf("%s : The event will begin in 1 minute, in the Secret Gambling Room.", .Eventname$), bc_blue | bc_all); initnpctimer(); end; OnTimer60000: // 1 min enablenpc("Wheel of Fortune#Main"); // enablenpc("Hussein#WOF"); announce(sprintf("%s : Come to Secret Gambling Room and test your luck", .Eventname$), bc_blue | bc_all); end; OnTimer1800000: // 30 mins announce(sprintf("%s : One more minute, do your last spin!", .Eventname$), bc_blue | bc_all); end; OnTimer1860000: // 31 mins OnEndEvent: .Start = false; announce(sprintf("%s : The event is now over.", .Eventname$), bc_blue | bc_all); stopnpctimer(); disablenpc("Wheel of Fortune#Main"); // disablenpc("Hussein#WOF"); end; OnCommand: if (.@atcmd_numparameters != 1) { dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); end; } if (.@atcmd_parameters$[0] == "start") { if (!.Start) donpcevent(sprintf("%s::OnStart", strnpcinfo(NPC_NAME))); else { dispbottom("The Wheel of Fortune has already started.", 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); } } else if (.@atcmd_parameters$[0] == "end") { if (.Start) donpcevent(sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME))); else { dispbottom("The Wheel of Fortune is not active.", 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); } } else { dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); } end; } vip_lounge,145,60,3 script Wheel of Fortune#Main 2_SLOT_MACHINE,{ OnTalk: if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) { mes(.Eventname$); mes("You are out of Zeny"); mes("and have no more"); mes("free spins. Come back"); mes("next time for more!"); close(); } .@mes$ = (#freewheelfortunespin > 0) ? sprintf(", but you, my friend, have %d free spin%s!", #freewheelfortunespin, (#freewheelfortunespin == 1) ? "" : "s") : "."; cutin("aca_salim02", 2); addtimer(1, sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME))); mes(.Eventname$); mes("Do you want to spin the wheel?"); mes(sprintf("It costs ^FF0000%d Zeny^000000 to play%s", .Zeny_Cost, .@mes$)); next(); while (true) { if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) callsub(S_End); switch (select( (#freewheelfortunespin > 0) ? sprintf("Yes! Use free spin! (%d left)", #freewheelfortunespin) : "", (Zeny >= .Zeny_Cost ) ? sprintf("Yes! Use Zeny. (costs %dz)", .Zeny_Cost) : "", "No (Leave)" )) { // pay with free spin case 1: if (#freewheelfortunespin > 0) { if ((#freewheelfortunespin -= 1) < 0) #freewheelfortunespin = 0; callsub(S_Spin); } else callsub(S_End); break; // Pay with zeny case 2: if (Zeny >= .Zeny_Cost) { Zeny -= .Zeny_Cost; callsub(S_Spin); } else { cutin("aca_salim02", 2); mes(.Eventname$); mes("Awww, you don't have enough to gamble..."); mes(" "); mes("Have you ever heard?"); mes("'Money isn't all that matters' Got it?"); mes("Byeeeeeeeeeeeeee ;)"); callsub(S_End); } break; default: callsub(S_End); } } // Wheel spin animation S_Spin: .@Sector = rand(.Sector_Range[0], .Sector_Range[1]); .@Display = .@Sector * 2 - 1; .@Speed = .Spin_Speed; for (.@i = 0; .@i < .nbTurns; .@i++) { .@b = .Cutin_Range[0]; while (.@b <= .Cutin_Range[1]) { cutin(sprintf("%s%d", .Cutin$, .@b), 4); sleep2(.@Speed); .@b++; .@Speed += 1; // not ++, because you may want to adjust the stopping +1 +2 +3 } } .@b = .Cutin_Range[0]; while (.@b < .@Display) { cutin(sprintf("%s%d", .Cutin$, .@b), 4); sleep2(.@Speed); .@b++; } cutin(sprintf("%s%d", .Cutin$, .@b), 4); if (.Prize_ID[.@Sector] == -1) { // Free spin if (.Sound_Effects) soundeffect("wheel_jackpot.wav", 0); announce(sprintf("[%s] : Wow, %dx more Free spins!!!", .Eventname$, .Prize_Qty[.@Sector]), bc_blue | bc_self); #freewheelfortunespin = #freewheelfortunespin == 0 ? .Prize_Qty[.@Sector] : #freewheelfortunespin + .Prize_Qty[.@Sector]; } else if (.Prize_ID[.@Sector] == 0) { // Nothing if (.Sound_Effects) soundeffect("wheel_lost.wav", 0); announce(sprintf("[%s] : Awwww, no luck in your gamble, more luck in love...", .Eventname$), bc_blue | bc_self); } else { // Item if (.Sound_Effects) soundeffect("wheel_won.wav", 0); announce(sprintf("[%s] : %dx %s - enjoy your prize!", .Eventname$, .Prize_Qty[.@Sector], getitemname(.Prize_ID[.@Sector])), bc_blue | bc_self); getitem(.Prize_ID[.@Sector], .Prize_Qty[.@Sector]); } sleep2(1000); if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) { mes(.Eventname$); mes("You are out of Zeny"); mes("and have no more"); mes("free spins. Come back"); mes("next time for more!"); close(); } return; S_End: close2(); OnEndEvent: cutin("", 255); end; OnInit: .Eventname$ = "Wheel Of Fortune"; bindatcmd("wof", "Wheel_of_Fortune::OnCommand", 99, false); .Spin_Speed = 50; // What is the base spin speed? (ms) .nbTurns = 2; // How many times the arrow makes a complete turn, before entering the stopping routine .Zeny_Cost = 100000; // How much zeny does it cost for a spin? .Sound_Effects = true; // Enable sound effects? (true/false) // You must have a total of 10 prizes. DO NOT remove 0 or -1 from the array and do not // change their order. setarray(.Prize_ID[1], -1, 6046, 13277, 12187, 617, 607, 603, 604, 0, 23093); setarray(.Prize_Qty[1], 2, 1, 1, 1, 3, 3, 3, 3, 0, 1); // Don't touch below .Cutin$ = "WheelOfFortune_"; setarray(.Sector_Range, 1, 10); // Sector range setarray(.Cutin_Range, 0, 19); // Cutin range end; }
Not tested.
- script Wheel_of_Fortune FAKE_NPC ,{ OnInit: disablenpc("Wheel of Fortune#Main"); // disablenpc("Hussein#WOF"); .Eventname$ = "[Wheel Of Fortune]"; end; OnClock1500: OnClock1630: OnClock1900: OnClock2200: OnStart: .Start = true; announce(sprintf("%s : The event will begin in 1 minute, in the Secret Gambling Room.", .Eventname$), bc_blue | bc_all); initnpctimer(); end; OnTimer60000: // 1 min enablenpc("Wheel of Fortune#Main"); // enablenpc("Hussein#WOF"); announce(sprintf("%s : Come to Secret Gambling Room and test your luck", .Eventname$), bc_blue | bc_all); end; OnTimer1800000: // 30 mins announce(sprintf("%s : One more minute, do your last spin!", .Eventname$), bc_blue | bc_all); end; OnTimer1860000: // 31 mins OnEndEvent: .Start = false; announce(sprintf("%s : The event is now over.", .Eventname$), bc_blue | bc_all); stopnpctimer(); disablenpc("Wheel of Fortune#Main"); // disablenpc("Hussein#WOF"); end; OnCommand: if (.@atcmd_numparameters != 1) { dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); end; } if (.@atcmd_parameters$[0] == "start") { if (!.Start) donpcevent(sprintf("%s::OnStart", strnpcinfo(NPC_NAME))); else { dispbottom("The Wheel of Fortune has already started.", 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); } } else if (.@atcmd_parameters$[0] == "end") { if (.Start) donpcevent(sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME))); else { dispbottom("The Wheel of Fortune is not active.", 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); } } else { dispbottom(sprintf("Usage: %s <start/end>", .@atcmd_command$), 0x00FF00); dispbottom(sprintf("%s failed.", .@atcmd_command$), 0x00FF00); } end; } vip_lounge,145,60,3 script Wheel of Fortune#Main 2_SLOT_MACHINE,{ OnTalk: .@today = atoi( gettimestr( "%Y%m%d", 9 ) ); if ( $wof_today != .@today ) { $wof_today = .@today; deletearray $wof_charip$; } if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) { mes(.Eventname$); mes("You are out of Zeny"); mes("and have no more"); mes("free spins. Come back"); mes("next time for more!"); close(); } .@mes$ = (#freewheelfortunespin > 0) ? sprintf(", but you, my friend, have %d free spin%s!", #freewheelfortunespin, (#freewheelfortunespin == 1) ? "" : "s") : "."; cutin("aca_salim02", 2); addtimer(1, sprintf("%s::OnEndEvent", strnpcinfo(NPC_NAME))); mes(.Eventname$); mes("Do you want to spin the wheel?"); mes(sprintf("It costs ^FF0000%d Zeny^000000 to play%s", .Zeny_Cost, .@mes$)); next(); while (true) { if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) callsub(S_End); switch (select( (#freewheelfortunespin > 0) ? sprintf("Yes! Use free spin! (%d left)", #freewheelfortunespin) : "", (Zeny >= .Zeny_Cost ) ? sprintf("Yes! Use Zeny. (costs %dz)", .Zeny_Cost) : "", "No (Leave)" )) { // pay with free spin case 1: if (#freewheelfortunespin > 0) { if ((#freewheelfortunespin -= 1) < 0) #freewheelfortunespin = 0; callsub(S_Spin); } else callsub(S_End); break; // Pay with zeny case 2: if (Zeny >= .Zeny_Cost) { Zeny -= .Zeny_Cost; callsub(S_Spin); } else { cutin("aca_salim02", 2); mes(.Eventname$); mes("Awww, you don't have enough to gamble..."); mes(" "); mes("Have you ever heard?"); mes("'Money isn't all that matters' Got it?"); mes("Byeeeeeeeeeeeeee ;)"); callsub(S_End); } break; default: callsub(S_End); } } // Wheel spin animation S_Spin: .@Sector = rand(.Sector_Range[0], .Sector_Range[1]); .@Display = .@Sector * 2 - 1; .@Speed = .Spin_Speed; .@charip$ = getcharip(); if ( countinarray($wof_charip$,.@charip$) ) { mes "You can only spin one IP per day."; close; } else $wof_charip$[getarraysize($wof_charip$)] = .@charip$; for (.@i = 0; .@i < .nbTurns; .@i++) { .@b = .Cutin_Range[0]; while (.@b <= .Cutin_Range[1]) { cutin(sprintf("%s%d", .Cutin$, .@b), 4); sleep2(.@Speed); .@b++; .@Speed += 1; // not ++, because you may want to adjust the stopping +1 +2 +3 } } .@b = .Cutin_Range[0]; while (.@b < .@Display) { cutin(sprintf("%s%d", .Cutin$, .@b), 4); sleep2(.@Speed); .@b++; } cutin(sprintf("%s%d", .Cutin$, .@b), 4); if (.Prize_ID[.@Sector] == -1) { // Free spin if (.Sound_Effects) soundeffect("wheel_jackpot.wav", 0); announce(sprintf("[%s] : Wow, %dx more Free spins!!!", .Eventname$, .Prize_Qty[.@Sector]), bc_blue | bc_self); #freewheelfortunespin = #freewheelfortunespin == 0 ? .Prize_Qty[.@Sector] : #freewheelfortunespin + .Prize_Qty[.@Sector]; } else if (.Prize_ID[.@Sector] == 0) { // Nothing if (.Sound_Effects) soundeffect("wheel_lost.wav", 0); announce(sprintf("[%s] : Awwww, no luck in your gamble, more luck in love...", .Eventname$), bc_blue | bc_self); } else { // Item if (.Sound_Effects) soundeffect("wheel_won.wav", 0); announce(sprintf("[%s] : %dx %s - enjoy your prize!", .Eventname$, .Prize_Qty[.@Sector], getitemname(.Prize_ID[.@Sector])), bc_blue | bc_self); getitem(.Prize_ID[.@Sector], .Prize_Qty[.@Sector]); } sleep2(1000); if (Zeny < .Zeny_Cost && #freewheelfortunespin < 0) { mes(.Eventname$); mes("You are out of Zeny"); mes("and have no more"); mes("free spins. Come back"); mes("next time for more!"); close(); } return; S_End: close2(); OnEndEvent: cutin("", 255); end; OnInit: .Eventname$ = "Wheel Of Fortune"; bindatcmd("wof", "Wheel_of_Fortune::OnCommand", 99, false); .Spin_Speed = 50; // What is the base spin speed? (ms) .nbTurns = 2; // How many times the arrow makes a complete turn, before entering the stopping routine .Zeny_Cost = 100000; // How much zeny does it cost for a spin? .Sound_Effects = true; // Enable sound effects? (true/false) // You must have a total of 10 prizes. DO NOT remove 0 or -1 from the array and do not // change their order. setarray(.Prize_ID[1], -1, 6046, 13277, 12187, 617, 607, 603, 604, 0, 23093); setarray(.Prize_Qty[1], 2, 1, 1, 1, 3, 3, 3, 3, 0, 1); // Don't touch below .Cutin$ = "WheelOfFortune_"; setarray(.Sector_Range, 1, 10); // Sector range setarray(.Cutin_Range, 0, 19); // Cutin range end; }
- 1
-
Item/Variable(Points) reward function for beginners or lazy!
Hi, there! this functions is ideal for newbie scripters or just someone who wants to "add" or "modify" scripts with rewards. It may be item or variables such as points or stuff...
This function can also be used by experienced scripters who are lazy to code and stuff xD. Easy to use and all
Here are the sample npcs on how to use it. (included in the downloadable files)
// Sample NPC for using F_Reward_Item and F_Reward_Var // For beginners. prontera,150,180,0 script F_Reward_Test 123,{ mes "What do you want to get?"; switch(select("Item","Points")) { case 1: F_Reward_Item("501:10,502:5,503:10"); break; case 2: F_Reward_Var("#CASHPOINTS","Cash Points",100); break; } mes "Enjoy!"; close; } // This is just a pseudo-code, you can understand what I mean by this xD // For advance scripters. You can do something like. prontera,150,180,0 script F_Reward_Test 123,{ mes "get items"; close2; F_Reward_Item(.itemlist$); end; OnInit: .itemlist$ = "501:10,502:5,503:10"; end; }
I hope this will help! Keep those upvotes coming to motivate me moooore
Enjoy the rest of the day!
-
Submitter
-
Submitted11/28/2019
-
Category
-
Video
-
Content AuthorMabuhay
- 1
- 1
-
-
Replace the minimap in data/texture/.. /minimap/<mapname>.bmp to a blank one if i get your question correctly.
This is not a script problem tho.
Edit: not sure if the folder is called minimap or just map.. Just check.. Im on mobile so i can't say where exactly.
-
24 minutes ago, spinzaku said:
Very nice!
Thanks!
PS: I also accept suggestions for improvement of the script
-
Hey guys! I'd like to showcase a script I've been busy for a while. Game mechanics is based on RWC. There are quite a lot of stuffs I modified from it tho. Here are the mechanics of the script :
Spoiler-
Flexible in-game setter :
- Set the variables via @setwc command by a GM Account.
-
You may set the ff in-game :
- Players per team
- Party vs Party or Guild vs Guild
- No same class / job
- Register with Party/Guild leader only
- Points to win
- Mins per round in-game
- Map selection ( map rotation / random )
- item Reward ( enable or disable )
- Var Reward ( enable or disable )
- Gepard Check upon registration
- Announce time when looking for contender
- Cooldown
-
Spectator mode [ src mod ]
- No chat and skill while spectating.
- Cannot be hit and cant hit
- Cannot be seen (same with @hide)
- Free walk for participants (no cell block)
-
Event Consumable NPC [ Event consumable patch ]
- I used this update I posted not so long ago.
- Guild Ranker ( only on GvG Settings )
- Entrance to and Exit from lobby NPC
- Healer NPC
- Repair NPC
- Storage NPC
Maps used are 2012rwc_01-04 maps since I dont know how to make custom map xD.
Anyways, here is a video on how it work in-game for better understanding.SpoilerTo-Do:
- Add registration cooldown after match [ Added ]
- Add points as reward [ Added ]
- Disable [Guild Skill] Emergency Call while on Arena [cancelled - Already available in Extended BG's MF_NOECALL ]
- 7
- 2
- 1
- 1
-
Flexible in-game setter :
-
23 minutes ago, Bringer said:
i check that part but on my offline server i cant get that debug msg but on my online server i get that
Based on how I understand, its just a warning tho. And reading that part doesnt seem to harm the server in any ways.. May be used for debugging.. But for whatever reason that it is not working consistently on both of your servers, it is best answered by Easycore.
-
I think its just an information for debug. If vend_loot / item is 0, it shouldnt open.
otherwise, you just can comment that part out?@@ -7153,6 +7153,13 @@ void clif_openvendingreq(struct map_session_data* sd, int num) nullpo_retv(sd); + // Vending shouldn't open if vend_loot is 0 and extended vending is enabled [Easycore] + // ShowWarning("vend loot = %d\n", sd->vend_loot); + if (battle_config.extended_vending && sd->vend_loot == 0) { + sd->state.prevend = 0; + return; + }
Not sure tho. Just wait for easycore to reply.
- 1
-
2 minutes ago, n0tttt said:
Isn't this based on my own modification?
The var names and announce hex colors are even the same.
I dunno, somebody just asked me to fix this. So, I did. :s
-
[FREE] Event Manager
Ehh since my event scripts are piling up, I decided to make an Event Manager
// Basic Event Manager // By Mabuhay /*-=-=-=-=-=-=-=-=-=-=-=-=-=- Currently added are the ff : {#} NAME - "NPC_NAME" [1] Bombring - "Event_Bombring" [2] Dice - "Event_Dice" [3] Last Man Standing - "Event_LMS" [4] Novice V Zombie - "Event_NvZ" [5] Poring Catcher - "Poring_Catcher" [6] Poring Hunter - "Poring_Hunter" (Added 12-15-2019) -=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ // For easier management of Event NPCs ///////////////////////////////////// // NOTE: // ///////////////////////////////////// // I don't support any modifications unless I want to. // But if you want to change things especially the rewards, // Please refer to my F_Reward Functions // https://rathena.org/board/files/file/4068-itemvariablepoints-reward-function-for-beginners-or-lazy/ // You should be able to easily change the rewards // If you have basic scripting knowledge
Header Settings:
OnInit: // 1 = item reward // 2 = variable/cashpoints reward // If you want to set item and variable/cashpoints rewards, do 1|2. // If you only want 1, just choose between 1 or 2 $event_options = 1|2; // If item reward enabled // What items will be rewarded setarray $event_item_reward, 501, 10, 502, 5; // If variable reward.. set to your variable. // If cashpoints.. set to #CASHPOINTS / #KAFRAPOINTS (Free Cash Points) $event_var$ = "#EVENTVARIABLE"; // Variable name? // If cash points, set to Cash Points // If your custom var, set to the name of that thing. $event_var_name$ = "Custom Points"; // How much points gain if #VAR / #CASHPOINTS / #KAFRAPOINTS? $event_var_gain = 1; $event_item_arr = getarraysize($event_item_reward); // @eventstart for GM bindatcmd "eventstart", strnpcinfo(0)+"::OnStart",60,60; // @eventjoin bindatcmd "eventjoin", strnpcinfo(0)+"::OnJoinEvent"; end;
You may now use @eventstart for GMs to select which ones to start.
@eventjoin for players to enter and see which event is currently active
Event timers / Clock are to be set here :
// OnClock<hour><minute>: donpcevent "<npc_name>::OnStart"; OnClock0000: donpcevent "Event_Bombring::OnStart"; end; //----- 12 mn OnClock0100: donpcevent "Event_Dice::OnStart"; end; OnClock0200: donpcevent "Event_LMS::OnStart"; end; OnClock0300: donpcevent "Poring_Catcher::OnStart"; end; OnClock0400: donpcevent "Event_NvZ::OnStart"; end; OnClock0500: donpcevent "Poring_Hunter::OnStart"; end; OnClock0600: donpcevent "Event_Bombring::OnStart"; end; //----- 6 am OnClock0700: donpcevent "Event_Dice::OnStart"; end; OnClock0800: donpcevent "Event_LMS::OnStart"; end; OnClock0900: donpcevent "Poring_Catcher::OnStart"; end; OnClock1000: donpcevent "Event_NvZ::OnStart"; end; OnClock1100: donpcevent "Poring_Hunter::OnStart"; end; OnClock1200: donpcevent "Event_Bombring::OnStart"; end; //----- 12 nn OnClock1300: donpcevent "Event_Dice::OnStart"; end; OnClock1400: donpcevent "Event_LMS::OnStart"; end; OnClock1500: donpcevent "Poring_Catcher::OnStart"; end; OnClock1600: donpcevent "Event_NvZ::OnStart"; end; OnClock1700: donpcevent "::OnStart"; end; OnClock1800: donpcevent "Event_Bombring::OnStart"; end; //----- 6 pm OnClock1900: donpcevent "Event_Dice::OnStart"; end; OnClock2000: donpcevent "Event_LMS::OnStart"; end; OnClock2100: donpcevent "Poring_Catcher::OnStart"; end; OnClock2200: donpcevent "Event_NvZ::OnStart"; end; OnClock2300: donpcevent "Poring_Hunter::OnStart"; end; //----- 11 pm
Currently I just alternately activate events per hour. You can change the event time as you wish. You may choose any of the ff:
OnClock<hour><minute>: OnMinute<minute>: OnHour<hour>: On<weekday><hour><minute>: OnDay<month><day>:
I hope this helps. If you want me to add more, just PM me on an event script that needs to be updated. Thank you.
Compatibility is your responsibility.
No backward Compatibility Support.Enjoy!
NOTE : If you find this useful, please click the Upvote button to motivate me to do stuffs like this And you are welcome!
-
Submitter
-
Submitted11/23/2019
-
Category
-
Video
-
Content AuthorMabuhay
- 8
- 1
- 2
- 3
-
-
Bombring Event
This is only working like an ordinary bombring event.
No modifications added.Edit the time start using OnClockTimers.
As per request by @shatowolf via PM
No version 2 (with event timer checks and stuff) and no plans on adding it again in the future. - Pretty useless xD
-
Submitter
-
Submitted11/23/2019
-
Category
-
Video
-
Content AuthorMabuhay
-
-
1 hour ago, nomade said:
Hello everyone!
I wonder if is can enable upe from a certain level only if you complete a certain quest.For example: maximum level is 1000 and the player can freely level up to level 150, after that level he will have to do a quest to level up 151, 152, 153....
Each level will need to do a quest to enable the up.Then for the quest, just do something like this
BaseLevel++; // 1 + level
when completing the quest ( you have to do this manually to all quest npcs that you want to give a level upon completion )
-
3 hours ago, Surefirer said:
Hello,
Is there any way to limit a specific amount of experience recieve from killing MVP and monster in a specific map? Say the player will only get 50% of regualr experience from killing MVP and monster in a specific map. I have a MVP monster map, and the player just kill the MVP to leveling, its way to fast. So I want to limit or reduce the experience from this map without change other file. Thanks.
Check doc/mapflag.txt..
*bexp <rate> *jexp <rate> Changes the base and job experience rates on a map. Supports negative values to reduce EXP rates as well. <rate> is given as a percentage (i.e. 100 = 1x EXP). This takes into account the modifiers 'base_exp_rate' and 'job_exp_rate' in '/conf/battle/exp.conf'.
-
Event Consumables (a Telma patch update)
So, I decided to update this patch :
However, I didnt realize that this is already available just right after I finished updating it from this :
But... I gonna release this anyways... But made some modifications...
So, what I did was I made my own consumable named 'Event'. These consumables can only be used on maps with "event_consume" mapflags.
This patch is NOT to be diffed if you have Extended BG Pre-installed or If you are planning to install it in the future ESPECIALLY IF YOU DON'T KNOW A SINGLE THING ON SRC. This is likely for Servers who dont/wont have the Extended BG but wants to have this feature. Unless you know what you're doing. You can actually add this to Extended BG by Easycore. I intentionally coded it similarly and avoided conflicts to it for people who wants to add this but have Extended BG installed in their servers.
Enjoy! I hope this will be to any use of any of you.
Compatibility is your responsibility.
No backward compatibility support.
-
Submitter
-
Submitted11/22/2019
-
Category
-
Video
-
Content AuthorBrian, AnubisK, xSoul, Easycore, Mabuhay
- 1
-
-
6 hours ago, Yuno said:
Hello to the Rathena community!
I apologize in advance if I post in the wrong place, I am not English and I have a little trouble with the language, as you can see I write to you using google translation.
My problem being that one of the players of my private server used the command @autotrade (or @at) having open Guildstorage ... By reconnecting the next day, he can not reopen his Gstorage at all. It tells him that he is already open and that he has to wait for it to be closed by another user to be able to open it. Except he's alone in guild. I try to look in my SQL tables but no way to find a solution to solve the problem. In short, my server considers that the Gstorage is constantly open when it is not. The player just did @at while his Gstorage was open.
Has anyone ever had the trouble? And if so how did you solve it? Any help puts precious.
Cordially, Yuno.
Tested and I can confirm to this..
This may not be a solution but more of a prevention for future incidents. Tho untested, this should work.
Go to atcommand.cpp.
Look for this :
ACMD_FUNC(autotrade) { nullpo_retr(-1, sd); if( map_getmapflag(sd->bl.m, MF_AUTOTRADE) != battle_config.autotrade_mapflag ) { clif_displaymessage(fd, msg_txt(sd,1179)); // Autotrade is not allowed on this map. return -1; } if( pc_isdead(sd) ) { clif_displaymessage(fd, msg_txt(sd,1180)); // You cannot autotrade when dead. return -1; } if( !sd->state.vending && !sd->state.buyingstore ) { //check if player is vending or buying clif_displaymessage(fd, msg_txt(sd,549)); // "You should have a shop open to use @autotrade." return -1; }
Place this under :
if (sd->state.storage_flag == 1) { clif_displaymessage(fd, "Close your storage before using @autotrade."); return -1; } if (sd->state.storage_flag == 2) { clif_displaymessage(fd, "Close your guild storage before using @autotrade."); return -1; } if (sd->state.storage_flag == 3) { clif_displaymessage(fd, "Close your storage before using @autotrade."); return -1; }
- 1
-
I dont understand the script but this may help you.
add something like
if ( !getcharid(1) ) { // Checks if player have no party mes "You dont have any party."; close; }
add it to some places where you want to put this check.
-
11 minutes ago, Krypt said:
@Mabuhay What fix should this change give ?
if (sd->status.shield && battle_getcurrentskill(&sd->bl) == LG_SHIELDSPELL) unit_skillcastcancel(&sd->bl, 0); // Cancel Shield Spell if player swaps shields.
That is just for Royal Guard's Shield Spell. When players switch shield, it should cancell shield spell ( as what the description says )
Try this part at pc.cpp.. didnt test but commenting it out may get you what you want. @Krypt
if(sd->status.shield <= 0) { // Skills requiring a shield const enum sc_type scs_list[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD, SC_REFLECTDAMAGE }; for (i = 0; i < ARRAYLENGTH(scs_list); i++) if(sd->sc.data[scs_list[i]]) status_change_end(&sd->bl, scs_list[i], INVALID_TIMER); }
-
47 minutes ago, Krypt said:
Is there any way to keep the buff when changing shield ? I tried to remove this but there is a bug on it that if you don't have shield then you can still cast shield skills like autoguard etc..
https://github.com/rathena/rathena/commit/d612788ed79f37851d6a3ce83561e922abf550fe
check ..\db\pre-re(re)\skill_require_db.txt249,0,0,12:14:16:18:20:22:24:26:28:30,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD
remove the shield and put 0Edit: Shoot, didnt read properly, my bad. Ignore me please UwU
-
6 minutes ago, Takuyakii said:
Good day is it possible be like this
shop that currency is 7959 or any item
this is my shop
- itemshop misc -1,7959,12790:15
PS: i already used search engine and found out many but if only possible to make this code into that,Check doc/script_commands.txt
<map name>,<x>,<y>,<facing>%TAB%itemshop%TAB%<NPC Name>%TAB%<sprite id>,<costitemid>{:<discount>},<itemid>:<price>{,<itemid>:<price>...}
Answer is yes.
-
18 minutes ago, MatheusRDS said:
Yes, the winner's announcement is made, but the prize is not delivered!
Strange that.Ohh i see the problem again.
My bad. This is because I made a lot of changes and forgot to properly check xD
Find :
announce strcharinfo(0)+" won the Poring Catcher Event!",bc_all,0xFF7F50;
add below:
.@amt = getarraysize(.item);
- 1
-
I believe you missed putting the instance id? I dunno if putting 0 would work but if your instance id is not 0, i will really throw an error. The instance id created in the mapserver shown is 1..so... That may be the cause.
*instance_announce <instance id>,"<text>",<flag>{,<fontColor>{,<fontType>{,<fontSize>{,<fontAlign>{,<fontY>}}}} Personally i use mapannounce instead. It is easier and less confusing to use. Just call the instance map name and proper instance id.
-
28 minutes ago, MatheusRDS said:
Strange, is not generating any error in map-server, my rathena is a bit outdated, it was downloaded in 2018, does it have anything to do?
Im not sure, maybe or maybe not..
When killing the correct poring, this should trigger :
announce strcharinfo(0)+" won the Poring Catcher Event!",bc_all,0xFF7F50;
if it doesnt trigger, there might be a problem with your rathena files.
-
30 minutes ago, Humble_Bee said:
It didn't work either.I tested my self, and yeah it seems not to be working. On my free time, I will look into this and if I find the answer before somebody got it correctly, I will post it here again.
-
14 hours ago, MatheusRDS said:
Hello, I'm having a problem, the event winner is not receiving the prizes!
Is anyone else having this problem?Check mapserver for error so I can assist you better.
I cant produce this problem myself.
-
6 hours ago, sprdosat said:
Hi @Mabuhay, When the event ends, the player does not receive the prize.
Ohh im sorry, I see the error.
.@size = getmapunits(BL_PC,"quiz_01",.@aid);
change to
.@size = getmapunits(BL_PC,"06guild_01",.@aid);
Thanks!
- 1
Seeking help with a script (Checkweight)
in Scripting Support
Posted
Put checkweight before spinning the wheel.