Jump to content

Mastagoon

Members
  • Content Count

    37
  • Avg. Content Per Day

    0
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by Mastagoon

  1. Hi everyone Now I used to play PvP all the time in classic and early renewal. But unforutnately PvP in RO is extremely unbalanced not really that great, especially in Renewal. So I came up with the idea to take a different approach to PvP, and today I'll share with you three PvP modes that I created. Some of these modes require source modification, but alot of the mechanics can be achieved with scripts only, I hope you enjoy ; ) PvP Mode: Abracadabra PvP Mode: Rapidfire PvP Mode: Biohazard What do you guys think of this approach to pvp? is there a pvp mode you'd like to see in RO? please reply with your thoughts, Cheers.
  2. View File WoE rewards depending on time spent in castle This script rewards players for each minute spent on WoE castle. Features: Can reward players for every minute they spend inside a WoE castle Can reward players for every kill in WoE castle, and will also display the name of the killed/killer. Excludes AFK players and players who are not in a guild. Announces kills with different colors depending on the killer's castle Can set a modifier for certain classes to gain more points than others Settings: setarray .maps$ ,"schg_cas03", "prtg_cas01"; //maps where the system is active .points_per_minute = 1; //number of points earned for each minute you spend in the castle for ([email protected] = 0 ; [email protected] < getarraysize(.maps$) ; [email protected]++) if (!getmapflag(.maps$[[email protected]],mf_loadevent)) setmapflag .maps$[[email protected]],mf_loadevent; .s_idle_time = 180; // time before player is considered idle (in seconds) .rewardId = 909; // ID of the reward item .announce = 0; // Announce kills (0 = no announcement, 1 = map announcement, 2 = global announcement) .color_defenders$ = "0xffff00"; // Announcement color when a defending player kills an attacking player .color_attackers$ = "0x99ccff"; // Announcement color when an attacking player kills a member of the castle's owner .kill_reward = 1; // Amount of points earned for every kill, set to 0 to disable it setarray .class_modifier[0],4063,3,4076,2; // Modifier for certain classes [Id, Modifier, Id, Modifier....] This script is a part of a larger rewards script that includes a WoE ranking, emperium breaking rewards, and rewards depending on the damage dealt during WoE. I might release the entire script in the future. Submitter Mastagoon Submitted 02/18/2021 Category PvP, GvG, WoE, Battleground Video Content Author Mastagoon  
  3. If you mean the massive 1st and 2nd job update mentioned here, then yes, it's all implemented in rAthetna afaik. just make sure you have the latest version of rAthena.
  4. Make sure you're using a normal account and not a GM account. GMs can bypass all skill requirements.
  5. Version 1.0.0

    103 downloads

    This script rewards players for each minute spent on WoE castle. Features: Can reward players for every minute they spend inside a WoE castle Can reward players for every kill in WoE castle, and will also display the name of the killed/killer. Excludes AFK players and players who are not in a guild. Announces kills with different colors depending on the killer's castle Can set a modifier for certain classes to gain more points than others Settings: setarray .maps$ ,"schg_cas03", "prtg_cas01"; //maps where the system is active .points_per_minute = 1; //number of points earned for each minute you spend in the castle for ([email protected] = 0 ; [email protected] < getarraysize(.maps$) ; [email protected]++) if (!getmapflag(.maps$[[email protected]],mf_loadevent)) setmapflag .maps$[[email protected]],mf_loadevent; .s_idle_time = 180; // time before player is considered idle (in seconds) .rewardId = 909; // ID of the reward item .announce = 0; // Announce kills (0 = no announcement, 1 = map announcement, 2 = global announcement) .color_defenders$ = "0xffff00"; // Announcement color when a defending player kills an attacking player .color_attackers$ = "0x99ccff"; // Announcement color when an attacking player kills a member of the castle's owner .kill_reward = 1; // Amount of points earned for every kill, set to 0 to disable it setarray .class_modifier[0],4063,3,4076,2; // Modifier for certain classes [Id, Modifier, Id, Modifier....] This script is a part of a larger rewards script that includes a WoE ranking, emperium breaking rewards, and rewards depending on the damage dealt during WoE. I might release the entire script in the future.

    Free

  6. The success rate for HD ores is the same rate for normal ore. Just edit Normal Chance to change it.
  7. Well, if you want to this only using scripts, it's gonna be tricky... you can perhaps replace the "broken" weapon with a different item, for example Damaged Weapon, and save the original weapon's data as a character array or in SQL, and then allow the players to trade the broken weapon with their original item. If your problem is only with @repairall, adding this one line in Atcommand.cpp will make the command ignore +10 equipment or higher ACMD_FUNC(repairall) { int count, i; nullpo_retr(-1, sd); count = 0; for (i = 0; i < MAX_INVENTORY; i++) { if(sd->inventory.u.items_inventory[i].refine >= 10) continue; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Add this line if (sd->inventory.u.items_inventory[i].nameid && sd->inventory.u.items_inventory[i].card[0] != CARD0_PET && sd->inventory.u.items_inventory[i].attribute == 1) { sd->inventory.u.items_inventory[i].attribute = 0; clif_produceeffect(sd, 0, sd->inventory.u.items_inventory[i].nameid); count++; } } if (count > 0) { clif_misceffect(&sd->bl, 3); clif_equiplist(sd); clif_displaymessage(fd, msg_txt(sd,107)); // All items have been repaired. } else { clif_displaymessage(fd, msg_txt(sd,108)); // No item need to be repaired. return -1; } return 0; }
  8. You can use event labels like @Gladius said to figure it if a monster was killed by a player or another monster, but there is no way to access the information of the killer monster without a source mod
  9. Try this - script testing -1,{ OnPCMapLoadEvent: if ((agitcheck() || agitcheck2()) && ( strcharinfo(3) == [email protected]$[[email protected]])) set WoeReward, WoeReward +1; // set points // Check if woe is on and if you entered a castle end; OnAgitEnd: if (WoeReward >= 30) { getitem 14232,1; // reward set WoeReward, 0; // reset the points }// if points is 15 or more get item end; OnInit: setarray [email protected]$[0],"payg_cas03","prtg_cas03"; end; }
  10. you forgot to end the OnInit event just add end; below `bindatcmd "guide", strnpcinfo(3) +"::Onguide";`
  11. This looks cool, i'll test it now
  12. Great work! however these maps seem to be missing: rush_cas01 ~ rush_cas04 region_8 also i can't download the file anymore, was it taken down?
  13. Hello everyone. Today i would like to share with you Yggdarsil bot, a discord bot that was created with the launch of my private server for simple verification, and has grown ever since to provide a fun and interactive game/discord experience. Features and commands Multilanguage support Account verification (Link your in-game account to your discord account) Mob/Item lookup In-game rewards Server donation Vendors Search Auction System And that's mostly all the available commands Discord Events/Minigames Yggdrasil Bot can also run several different minigames on discord, and reward the event winners in-game directly. Random Drops Trivia Event Disguise Event Boss Fights And that'd be all folks. Any feedback is appreciated
  14. if you just want to change a skill to a passive skill, no source modification is needed. Unless if you want to change the behavior of the skill . for changing a skill to passive: go to the skill_db.yml file, find the skill you want and change TargetType to passive. (or you can remove the line completely since passive is the default) example: - Id: 1004 Name: AS_VENOMKNIFE Description: Throw Venom Knife MaxLevel: 1 Type: Weapon #TargetType: Attack <<<<<<<<<<<<<<<< remove this line DamageFlags: IgnoreAtkCard: true Flags: IsQuest: true IgnoreAutoGuard: true IgnoreCicada: true Range: 9
  15. Armor elements will not stack. the player element is set by a the bDefEle bonus script, and its value will be overwritten by the next bDefEle value. basically what happens is that first the gear script will be executed, so if you're wearing a water element armor, your element will become water. right after that the cards script will be executed. so if you have a pasana card in your armor, your element will become fire. and finally the random option bonuses will execute. so if you have a bonus that sets your element to wind it will change to wind, and if you have another bonus that set is to ghost then that will overwrite your element to ghost etc.. i'm not sure about the order of the random option bonuses, but probably the last option will be the active one. it is possible, but you'll need a source modification to achieve this
  16. this is probably the fastest way to do it: (untested) if ( !isloggedin( [email protected][[email protected]], [email protected][[email protected]] ) || // what happens if someone in the party member is offline =/ strcharinfo(3,[email protected][[email protected]]) != [email protected]$ || // If the party member is not on the same map of the killer checkidle(rid2name([email protected][[email protected]])) > 5 || // If player is idle for 30 seconds getmapxy([email protected]$, [email protected], [email protected], BL_PC, $partymemberaid[[email protected]]) == -1 || distance([email protected], [email protected], [email protected], [email protected]) > 15 ) // if the search failed or if ths distance is larger than 15 cells. from the docs: --------------------------------------- *distance(<x0>,<y0>,<x1>,<y1>) Returns distance between 2 points. Example: [email protected] = distance(100,200,101,202); --------------------------------------- --------------------------------------- *getmapxy("<variable for map name>",<variable for x>,<variable for y>{,<type>,"< value>"}) This function will locate a character object, NPC object or pet's coordinates and place their coordinates into the variables specified when calling it. It will return 0 if the search was successful, and -1 if the parameters given were not variables or the search was not successful. Type is the type of object to search for: BL_PC - Character object (default) BL_NPC - NPC object BL_PET - Pet object BL_HOM - Homunculus object BL_MER - Mercenary object BL_ELEM - Elemental object The search value is optional. If it is not specified, the location of the invoking character will always be returned for types BL_PC and BL_PET, the location of the NPC running this function for type BL_NPC. If a search value is specified, for types BL_PC and BL_NPC, the character or NPC with the specified name or GID will be located. you could also try to use attachrid() to the party member and then check his location with getmapxy.
  17. try this: if ( [email protected]$ == "guild_vs1" && (BaseLevel < 85 || BaseLevel > 115) )
  18. View File Find the GM (hide and seek) A simple event. the GM npc will teleport to a random location in the specified map, and the first player to find him will win the round. //SETTINGS .rounds = 3; // for how many rounds should the event last? .map$ = "prontera"; // the event where the gm will hide .itemReward = 1; setarray .rewards[0],909,5,716,2; // [itemId, itemAmount, {....}] .zenyReward = 0; .zenyAmount = 1000; .debugMode = 0; .npcName$ = "GM Masta"; .countdown = 3; // the time between event announcements and when the event actually starts. .automatic = 1; // automatic event or does it need a gm to run it manually? .runEvery = 1; // (ignore if manual) run the event ever X hours .offset = 1; // (ignore if manual) sometimes, you might have another event/announcement at the same time as the event announcement. you can set an offset (announce X minutes after event time.) Submitter Mastagoon Submitted 01/30/2021 Category Games, Events, Quests Video https://www.youtube.com/watch?v=ZiXuwO0Ng9U&ab_channel=Mastagoon Content Author Mastagoon  
  19. Version 1.0.0

    88 downloads

    A simple event. the GM npc will teleport to a random location in the specified map, and the first player to find him will win the round. //SETTINGS .rounds = 3; // for how many rounds should the event last? .map$ = "prontera"; // the event where the gm will hide .itemReward = 1; setarray .rewards[0],909,5,716,2; // [itemId, itemAmount, {....}] .zenyReward = 0; .zenyAmount = 1000; .debugMode = 0; .npcName$ = "GM Masta"; .countdown = 3; // the time between event announcements and when the event actually starts. .automatic = 1; // automatic event or does it need a gm to run it manually? .runEvery = 1; // (ignore if manual) run the event ever X hours .offset = 1; // (ignore if manual) sometimes, you might have another event/announcement at the same time as the event announcement. you can set an offset (announce X minutes after event time.)

    Free

  20. if i'm understanding correctly, the problem is that the event/round ends as soon as the npc announces its coordinates? and you need to to wait 15s first? if that's the case, just add this line: if ([email protected] == 2) set [email protected]$,"morocc"; if ([email protected] == 1) set [email protected]$,"prontera"; announce "Jumper Event : Go Find me!! I'm here in "[email protected]$+"!!!",bc_blue; set [email protected],10; sleep 15000; // <<<<<<<<<<<<<<< Add this goto OnStart; and the npc will wait 15 seconds after announcing its map before jumping again. and more importantly you should be using sleep and not sleep2 in this script. change all your "sleep2" lines with sleep.
  21. this is probably a client-side problem. check your data\luafiles514\lua files\skillinfoz\skilltreeview.lub file and make sure you have the latest version from kRO
  22. sorry i had a typo in the code. this one should work : - script max_castle_guild_members -1,{ OnInit: //settings here setarray .maps$, "prtg_cas01","prtg_cas03"; // insert your woe castles here .max_members_in_castle = 1; // set the maximum number of guild members in a castle //don't edit this for([email protected] = 0; [email protected] < getarraysize(.maps$); [email protected]++) { if(!getmapflag(.maps$[[email protected]], mf_loadevent)) setmapflag .maps$[[email protected]], mf_loadevent; } end; OnPCLoadMapEvent: if(inarray(.maps$, strcharinfo(3)) == -1) end; if(getmapguildusers(strcharinfo(3), getcharid(2)) > .max_members_in_castle) { dispbottom "There can only be "+.max_members_in_castle+" guild members inside a castle during woe."; warp "SavePoint",0,0; } end; }
  23. View File @restock - get items from storage with a command My take on the @restock command. This script allows you to set a list of item to restock from your storage, for example 100 blue gemstones and 300 white potions. When using the command, a ticket item will be consumed to get the specified items from storage. This script is so that you'll always have the needed quantity of items in the list. for example, if you have 22 gemstones in your inventory and you use @restock, you'll get the 78 gemstones missing to the full 100 any feedback is appreciated. Submitter Mastagoon Submitted 01/22/2021 Category Utilities Video Content Author Mastagoon  
  24. Version 1.0.0

    80 downloads

    My take on the @restock command. This script allows you to set a list of item to restock from your storage, for example 100 blue gemstones and 300 white potions. When using the command, a ticket item will be consumed to get the specified items from storage. This script is so that you'll always have the needed quantity of items in the list. for example, if you have 22 gemstones in your inventory and you use @restock, you'll get the 78 gemstones missing to the full 100 any feedback is appreciated.

    Free

×
×
  • Create New...

Important Information

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