Jump to content

Radian

Members
  • Content Count

    70
  • Joined

  • Last visited

  • Days Won

    1

Reputation Activity

  1. Upvote
    Radian reacted to fourxhackd in Overview of Ragnarok Online Server Development   
    Introduction
    I'm planning to write a guide to Ragnarok Online development that begins with the big picture of server development, and transition into more detail through a series of carefully selected newbie questions to guide our path.
    I'll be providing extended reading materials (other people's guides, relevant tools) relevant to the current topic.
    Table of Contents
    How is this guide different Expectations Learning RO development the best way Who are we and what do we know? What do we see in games? High-level overview of Games Mid-level overview of Hercules  
    How is this guide different?
    The guide will read less like a technical document that tells you "what to do". It will read more like a novel that walks through the questions a newbie would ask, just like when a newbie is on an adventure and exploring the unknown. 
    So don't be afraid of the unknown, or the difficult challenges ahead. That's where we're going (there's more EXP there), and we'll find treasure and grow stronger that way!
    Expectations
    This guide works with the following assumptions:
    The target audience is a thirteen year old who has no computer science background at all (Or at least, the guide will explain things very simply to make sure even thirteen year olds could do it). Software development terminologies will be given two things: (a) an Explain Like I'm Five years old explanation; and (b) links for deeper reading. The target audience has never coded, or scripted before. The target audience has played other games. Preferably online games and RPGs such as World of Warcraft, DotA 2. The other games will be examples I will use when explaining certain topics.   Learning RO development the best way
    Here are a few suggestions to make your RO development experience less frustrating and much, much more pleasant:
    Have an interest in playing RO and wanting to have an RO of your own. Have a little bit of patience and diligence to read about how things work. Have commitment to keep your eyes on what you want to accomplish. Cherish every victory no matter how small (e.g. make this npc talk, make this item give +99 LUK instead of +1 LUK). Every victory is a victory. Be open to experiencing things that you do not know. Have the humility to acknowledge what you cannot do and what you do not know, and to ask for help when you are lost. Have the humility, respectful reverence to the forum leaders who spare some of their valuable time not only to educate and teach you what they know, but also who contribute to building RO servers for free (open source development). Who are we and what do we know?
    We begin with what all gamers know: we like to play games.
    What are games that you are actually familiar with? I know I've played RO back in 2003. I played counter strike a decade ago, I tried out Gunbound and Runescape, I played Adventure Quest (Flash game). I even enjoyed writing in Gaia Online, doing role-play in forum threads. During my stay in the university (2011-2018), I played loads of DotA 2 and it showed me what competitive/professional gaming looked like, showing me the depth of gaming that I haven't seen before. I played shooter games like Overwatch, PUBG, Destiny 2, and different kinds of games from Steam like Project Zomboid and Stardew Valley.
    The reason why I bring up different kinds of games is because this is our shared or common knowledge. It is what unites you and me, two strangers in the internet. Our common love for playing RO and playing games in general.
    So now that you've gotten to know me a little better, we now ask the question: How does a person transition from a gamer into a game developer?
     
    What do we see in games?
    Scenario
    It's 8PM and you are at your house. You just finished having dinner, and are now about to start playing in your favorite RO private server. You go to your computer, you open up the game's patcher. You find some updates. "New game content!" you think to yourself. You go to the website to read about the changes: It might be changes to the items, buffs to your favorite RO class, or changes to the map, or new NPCs and events and dungeons! Your RO finishes updating, and your game begins.
     
    What happened?
    We begin our journey into game and server development with terminologies. 
     
    Terminologies? Why do I have to memorize these things?
    We have to know what we call things to make sure we understand each other. If you don't understand me, you will not learn. If you get confused, you will get lost. If you do not know the terminology for the things you are having a problem with, you won't know how to say what your problem is.
    Game Website - This is the website where you go to learn how to install a private RO server, read about game changes and news, and interact with other people in the community through forums. Patcher - This is the tool that you use to make sure you're updated. Otherwise, you'll encounter outdated game information, problems, and worst case scenario: crashes. Game Client - This is the runnable program that you are in when playing the game. For example TalonRO.exe, or AeRO.exe.
    From the perspective of a gamer, these are all the areas where they interact with a game provider:
    They use the website to download the installer. The patcher updates the game. They run the game to play.
     

     
    High-level overview of Games
    What is a client?
    Simply put, a client is an application or a program that communicates with a remote system called a server. These terminologies are used when under a system that follows a client-server architecture. 
     
    Alright, so what is a client and a server architecture?
    Imagine the following: You go to a restaurant to eat dinner. When you sit down, the waiter comes to you. The waiter is who you talk to and interact with so that the kitchen knows what food to cook for you. The waiter who takes your order and makes sure you are having a good time is the client. He is the interface between you and the kitchen. The kitchen which  deals with the inventory of goods and making sure that chefs are doing the processes to produce food is the server.
    You can have multiple clients (e.g. TalonRO.exe distributed to different players across the world) that connect to one server. That in a nutshell is a client and server architecture.
     
    What does a client-to-server interaction look like?
    The illustration below is a very simplified illustration of a client-server architecture. This means that a client 
    The server (on the left) and the client (on the right) communicate with each other. That is how the game works.
    Green - When it comes to accessing a game website (which is actually a web server) requires a web client or web browser like Google Chrome or Mozilla Firefox.
      Orange - When your patcher is running, it asks the question "Are there any new updates?" specifically to a patch server, which has a master list of patches. It's like how a customer in a restaurant asks "What can I order?" and the client tells them "This is what the kitchen can cook".
      Blue - When your game connects to the server, it not only can ask questions (e.g. "What is my player's level and stats?") it can also tell the server what to do (e.g. "Move my player to prontera X and Y location). The client interfaces between you (the player) and the server.
     
    That's the high-level overview of how games work. It's a combination or orchestration of fast-paced conversations between people (players on clients) and machines (servers that allow players to play together). There are machines in between to facilitate all of these complicated processes.
    Keywords: Port forwarding
     
    One example of a machine that facilitates people playing together is Hercules, or rAthena. These are game servers that follows a specific set of rules or instructions that dictate what is expected when RO clients connect to RO servers.
     
    What do you mean by "follows a specific set of rules or instructions"?
    A protocol is a set of specific rules or instructions. Having a set of specific rules or instructions makes sure that we follow the same rules.
     
    For example, if we play the game Rock Paper Scissors (roshambo, bato bato piks), we need to know the following rules:
    You're supposed to make a choice of either Rock or Paper or Scissors. You only choose one. You're supposed to make a choice after counting 1, 2, and 3. Rock is represented as a closed fist. Scissors is represented with two fingers (index and middle) extended. Paper is represented with five fingers extended. Rock beats Scissors. Paper beats Rock. Scissors beats Paper. When we learn about the rules and follow them, we can play Rock Paper Scissors. Two players can then follow the rules, understand each other, and agree as to who won the game.
    If players did not follow the rules ("1, 2, 3 - Suddenly, a player shows Fire which he says beats Rock Paper and Scissors!") then people would be confused, feel cheated, and things will not work. There will be misunderstandings.
     
    When it comes to game servers, we need a set of rules to follow as well. The protocol is the set of rules for how the server and the client will communicate. If your game server and your client does not follow the same protocol, they will have misunderstandings and they will not work.
    An example of protocols in RO development is the use of the following port values: 5121, 6121, 6900. If you don't have a client that talks to the server at the expected port, your server will be confused and will not respond to any requests.
    An example of protocol is the agreement on which packet version to use. If you use the wrong packet version, your server will not understand the packets being sent by your client.
     
    Relevant Keywords: Packets, PACKETVER, Compiling, Ports
     
    We talked about an example of machines that facilitate processes to enable multiple people to play together (MMORPG). An example of this is Hercules, which we look into more detail below in the following post.
  2. Upvote
    Radian reacted to Tio Akima in [Showcase] VIP Room [GAIA]   
    Hii Guys! plus a map made with the GAIA theme! I've already done a pvp on this subject, and I'm thinking of making a GAIA map pack! With lots of green, lots of nature, lots of earth, lots of LIFE, lots of fantasy of course.

    Below are the images of VIP ROOM [GAIA]

     








    Print in game






    part of the project

  3. Upvote
    Radian reacted to Rytech in 2018-06-20/21RagexeRE Char Select Fix   
    I recently learned that some of the textures for the character select screen were changed at some point between 2018-06-20 and today (2018-10-24) which will cause the 2018-06-20/21 RagexeRE to crash when reaching the character select screen. A few of them look different and are of a different size but I don't know why its causing this issue. So im releasing this here. The download contains the old and new textures for compare. To use the fix, place the select_character_v3 folder from the old textures folder in your "data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/" directory.
    Char Select Textures.zip
  4. Upvote
    Radian reacted to AnnieRuru in Advance SQL commands   
    4. AUTO_INCREMENT
    CREATE TABLE `support_ticket` ( `id` INT(11) AUTO_INCREMENT, `title` VARCHAR(70), `message` VARCHAR(255), PRIMARY KEY (`id`) ) ENGINE = InnoDB; In this kind of query that has AUTO_INCREMENT, many people do ....
    $support_ticket_id++; query_sql "INSERT INTO `support_ticket` VALUES ( "+ $support_ticket_id +", '"+ escape_sql(.@title$) ... can be optimize .... using NULL
    query_sql "INSERT INTO `support_ticket` VALUES ( NULL, '"+ escape_sql(.@title$) ... can retrieve the last row with
    query_sql "SELECT MAX(`id`) FROM `support_ticket`", .@id; // ----- OR ----- query_sql "SELECT LAST_INSERT_ID()", .@id;  
    Question : This question was asked on eathena forum board
    One of my friend touched my custom table and the AUTO_INCREMENT has jump off the value
    | 1 | <data set 1> | 2 | <data set 2> | 3 | <data set 3> | 25854 | <data set 4> | 25855 | <data set 5> | 25856 | <data set 6> I want to make the value return back to normal as shown
    | 1 | <data set 1> | 2 | <data set 2> | 3 | <data set 3> | 4 | <data set 4> | 5 | <data set 5> | 6 | <data set 6> How to do this WITHOUT losing any of the current data ?
    Answer: The trick is ... just drop that column and rebuild it
    ALTER TABLE `inventory` DROP COLUMN `id`; ALTER TABLE `inventory` ADD COLUMN `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; convert the table into MyISAM will process the query much faster
  5. Upvote
    Radian reacted to AnnieRuru in Advance SQL commands   
    6. How to show the current rank of the player
    Question : This is the part of the script, output as below
    .@nb = query_sql("SELECT `name`, `kills` FROM `pvpladder` ORDER BY `kills` DESC LIMIT 5", .@name$, .@kills); for ( .@i = 0; .@i < .@nb; .@i++ ) mes "No."+(.@i+1)+" ["+ .@name$[.@i] +"] ~ "+ .@kills[.@i] +" kills"; No.1 [Alice] ~ 19 kills No.2 [Emily] ~ 11 kills No.3 [Irene] ~ 11 kills No.4 [Brittany] ~ 8 kills No.5 [Fiona] ~ 7 kills  2nd place and 3rd place has the same amount of kills, how do I make both of them display as 2nd place like this ?
    No.1 [Alice] ~ 19 kills No.2 [Emily] ~ 11 kills No.2 [Irene] ~ 11 kills No.4 [Brittany] ~ 8 kills No.5 [Fiona] ~ 7 kills  
    Answer :
    Method no.1: Convert the table into InnoDB will return the result faster. Allow to use OFFSET
    .@nb = query_sql("SELECT `name`, `kills`, FIND_IN_SET(`kills`, (SELECT GROUP_CONCAT(`kills` ORDER BY `kills` DESC) FROM `pvpladder`)) FROM `pvpladder` ORDER BY `kills` DESC LIMIT 5", .@name$, .@kills, .@rank); for ( .@i = 0; .@i < .@nb; ++.@i ) mes "No."+ .@rank[.@i] +" ["+ .@name$[.@i] +"] ~ "+ .@kills[.@i] +" kills"; Method no.2: This method return result faster than method 1 in huge table. Not allow to use OFFSET
    .@query$ = "SELECT `name`, IF(@d=t.`kills`, @r, @r:=@i), @d:=t.`kills`, @i:=@i+1 "; .@query$ += "FROM `pvpladder` t, (SELECT @d:=0, @r:=0, @i:=1)q "; .@query$ += "ORDER BY `kills` DESC LIMIT 5"; .@nb = query_sql(.@query$, .@name$, .@rank, .@kills, .@dummy); for ( .@i = 0; .@i < .@nb; ++.@i ) mes "No."+ .@rank[.@i] +" ["+ .@name$[.@i] +"] ~ "+ .@kills[.@i] +" kills"; .
    .
    Question : How do I show the current ranking of the player ?
    mes "Your kills -> "+ .@kills; mes "Your rank -> "+ .@rank; Answer :
    query_sql "SELECT `kills`, 1+(SELECT COUNT(1) FROM `pvpladder` t1 WHERE t1.`kills` > t2.`kills`) FROM `pvpladder` t2 WHERE `char_id` = "+ getcharid(0), .@kills, .@rank; Remember to index the `kills` field
     
    Reference : https://dba.stackexchange.com/questions/13703/get-the-rank-of-a-user-in-a-score-table
    .
     
  6. Upvote
    Radian reacted to AnnieRuru in King of Emperium Hill   
    got a PM from rAthena member ask me to fix this
    yeah both rathena patch and hercules plugin ... all broken
    so ....
    update to 1.2
    Script
    Plugin for Hercules
    Patch for rAthena
  7. Upvote
    Radian reacted to AnnieRuru in :hide:   
    anyone miss meh?
  8. Upvote
    Radian got a reaction from Daifuku in Daifuku | Graphics, Sprites, Maps, Wiki, Forum, Advertising, Scripts & more   
    I would recommend her to everyone no doubts. she is the best!
  9. Upvote
    Radian reacted to Sephus in Item Option System Demo NPC   
    So with the release of Item Options System I had created a demo NPC with a small number of options to test the system out or be used as a full fledged NPC.
     
    Configuration
    /** * General Configuration */ /* Chance of the enhancement process to fail. (0 - 99 in percent) */ .chance_of_failure = 10; /* Delete the item on failure? (true/false) */ .delete_on_failure = true; /* Required amount of zeny for a try. */ .zeny_requirement = 100; /* Minimum amount of the bonus value. * For negative effects or certain bonuses that require negative values * Maximum possible value is -INT16_MAX) */ .minimum_bonus_amount = -100; // usually used with delay bonus options, although not provided in the script. /* Maximum amount of the bonus value. * Maximum possible value is INT16_MAX */ .maximum_bonus_amount = 100; /* Disable selection of bonus value (true/false) */ .enable_random_bonus = false; /* Item Option Descriptions */ setarray(.options$[0], "Max HP", "Max SP", "STR", "AGI", "VIT", "INT", "DEX", "LUK"); /* Item Option Constants */ setarray(.option_constants[0], VAR_MAXHPAMOUNT, VAR_MAXSPAMOUNT, VAR_STRAMOUNT, VAR_AGIAMOUNT, VAR_VITAMOUNT, VAR_INTAMOUNT, VAR_DEXAMOUNT, VAR_LUKAMOUNT); end;  
    File v1.0
    item_options.txt 
     
    Let me know what you think!
     
    Enjoy~!
  10. Upvote
    Radian got a reaction from wengbenedict93 in Instant Job/255/120 trans only job changer npc   
    //==============================================================================////= Script Release : Job Changer + Max Leveler [ Version 1.6 ]//==================================By==========================================////= ManiacSociety//==============================================================================////= Idea Came From : ManiacSociety//= Helper : Emistry & Kenpachi//==============================================================================////= D E S C R I P T I O N S//==============================================================================//// -- 1. Character can choose a Job which he like to be.// -- 2. This NPC only have 1 Time Usage.// If it is set to Account Based then that account can use 1 times.// If it is set to Character Based then all new character can use 1 times.// -- 3. Complete skills / Skill Points will be given if it is set to be.// -- 4. Base Level and Job Level will be given upon Job Change.// -- 5. Allow players to click an items to call out the NPC.//==============================================================================////= V E R S I O N S//==============================================================================//// -- [ 1.6 ] : Added Item Script which allow the Scripts work as a "Tickets".// -- [ 1.5 ] : Added Configuration for Account Based / Character Based Settings// -- [ 1.4 ] : Added Baby Classes + 3rd Job Classes. // -- [ 1.3 ] : Added Configuration Option , 4 Announce Option , Informations. // -- [ 1.2 ] : Simplified Scripts + Shorten the Scripts. // -- [ 1.1 ] : Added New Job Change Option. // -- [ 1.0 ] : Simple Login Auto Max Level + Job Changer. //==============================================================================////= R U L E S//==============================================================================//// -- 1. Do not use for exchanging purpose. // -- 2. Do not claim it as yours. // -- 3. Do not change or remove the credits.// -- 4. Do not sell the script in order to get paid.// -- 5. Do not re-sharing upon modified without permission.//==============================================================================//// OnPCLoginEvent:// -- Add this at item DB. ( Change it to any items to your like. )// -- 30000,JobClassTicket,JobClassTicket,11,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ doevent "ClassHelper::OnPCLoginEvent"; },{},{}prontera,150,150,4 script Class Helper 779,{// -- Configuration Optionset .npcname$,"[ ^0000FF Class Helper ^000000 ]";set .InfoMenu,0; // Classes Informations Option [ 0 - Disable / 1 - Enable ]set .1stClassMenu,1; // First Job Class Option [ 0 - Disable / 1 - Enable ]set .2ndClassMenu,1; // Second Job Class Option [ 0 - Disable / 1 - Enable ]set .High1stClassMenu,1; // High 1st Class Option [ 0 - Disable / 1 - Enable ]set .Trans2ndClassMenu,1; // Transcendent Class Option [ 0 - Disable / 1 - Enable ]set .Trans3rdClassMenu,0; // Third Job Class Option [ 0 - Disable / 1 - Enable ]set .ExpandedClassMenu,1; // Expanded Class Option [ 0 - Disable / 1 - Enable ]set .BabyClassMenu,1; // Baby Job Class Option [ 0 - Disable / 1 - Enable ]set .Baby3rdClassMenu,0; // Baby Third Job Class Option [ 0 - Disable / 1 - Enable ]set .Allskills,1; // Complete Skills Option [ 0 - Disable / 1 - Enable ]// -- Usable for Only 1 Timeset .Based,1; // [ 0 - Account Based / 1 - Character Based ]if( ClassHelper == 1 || #ClassHelper == 1 ) end;Main_Menu: mes .npcname$; mes "I am the Job Class Helper..."; mes "I am here to help you."; mes " ^FF0000________________________________^000000"; mes "Do you wish to become Stronger ?"; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "Do you admire those who have a great power ? Do you wish to become a part of them ? If yes , then which classes that you admire the most ?"; next; switch(select(( .InfoMenu == 0 )?"":"^4EEE94Classes Information^000000", ( .1stClassMenu == 0 )?"":"^0000FFFirst Job Classes^000000", ( .2ndClassMenu == 0 )?"":"^0000FFSecond Job Classes^000000", ( .High1stClassMenu == 0 )?"":"^0000FFHigh First Job Classes^000000", ( .Trans2ndClassMenu == 0 )?"":"^0000FFTranscendent Job Classes^000000", ( .Trans3rdClassMenu == 0 )?"":"^0000FFThird Job Classes^000000", ( .ExpandedClassMenu == 0 )?"":"^0000FFExpanded Job Classes^000000", ( .BabyClassMenu == 0 )?"":"^0000FFBaby Normal Job Classes^000000", ( .Baby3rdClassMenu == 0 )?"":"^0000FFBaby Third Job Classes^000000", "^FF0000Sorry, i admire nobody....^000000")) { Case 1: goto Classes_info; Case 2: goto FirstJob_Classes; Case 3: goto SecondJob_Classes; Case 4: goto HighFirstJob_Classes; Case 5: goto TransSecondJob_Classes; Case 6: goto TransThirdJob_Classes; Case 7: goto ExpandedJob_Classes; Case 8: goto BabyJob_Classes; Case 9: goto BabyThirdJob_Classes; Case 10: if ( .Based == 0 ){ set #ClassHelper,1; } if ( .Based == 1 ){ set ClassHelper,1; } close; } FirstJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Swordman^000000", "^76EE00Magician^000000", "^76EE00Archer^000000", "^76EE00Acolyte^000000", "^76EE00Merchant^000000", "^76EE00Thief^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,1,255,120,120,"All"; Case 2: callsub Job_Changing,2,255,120,120,"All"; Case 3: callsub Job_Changing,3,255,120,120,"All"; Case 4: callsub Job_Changing,4,255,120,120,"All"; Case 5: callsub Job_Changing,5,255,120,120,"All"; Case 6: callsub Job_Changing,6,255,120,120,"All"; Case 7: goto Main_Menu; }HighFirstJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00High Swordman^000000", "^76EE00High Magician^000000", "^76EE00High Archer^000000", "^76EE00High Acolyte^000000", "^76EE00High Merchant^000000", "^76EE00High Thief^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4002,255,120,120,"All"; Case 2: callsub Job_Changing,4003,255,120,120,"All"; Case 3: callsub Job_Changing,4004,255,120,120,"All"; Case 4: callsub Job_Changing,4005,255,120,120,"All"; Case 5: callsub Job_Changing,4006,255,120,120,"All"; Case 6: callsub Job_Changing,4007,255,120,120,"All"; Case 7: goto Main_Menu; } SecondJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Knight^000000", "^76EE00Priest^000000", "^76EE00Wizard^000000", "^76EE00Blacksmith^000000", "^76EE00Hunter^000000", "^76EE00Assassin^000000", "^76EE00Crusader^000000", "^76EE00Monk^000000", "^76EE00Sage^000000", "^76EE00Rogue^000000", "^76EE00Alchemist^000000", ( Sex == 0 )?"":"^76EE00Dancer^000000", ( Sex == 1 )?"":"^76EE00Bard^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,7,255,120,110,"Self"; Case 2: callsub Job_Changing,8,255,120,110,"Self"; Case 3: callsub Job_Changing,9,255,120,110,"Self"; Case 4: callsub Job_Changing,10,255,120,110,"Self"; Case 5: callsub Job_Changing,11,255,120,110,"Self"; Case 6: callsub Job_Changing,12,255,120,110,"Self"; Case 7: callsub Job_Changing,14,255,120,110,"Self"; Case 8: callsub Job_Changing,15,255,120,110,"Self"; Case 9: callsub Job_Changing,16,255,120,110,"Self"; Case 10: callsub Job_Changing,17,255,120,110,"Self"; Case 11: callsub Job_Changing,18,255,120,110,"Self"; Case 12: callsub Job_Changing,20,255,120,110,"Self"; Case 13: callsub Job_Changing,19,255,120,110,"Self"; Case 14: goto Main_Menu; }TransSecondJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Lord Knight^000000", "^76EE00High Priest^000000", "^76EE00High Wizard^000000", "^76EE00Whitesmith^000000", "^76EE00Sniper^000000", "^76EE00Assassin Cross^000000", "^76EE00Paladin^000000", "^76EE00Champion^000000", "^76EE00Professor^000000", "^76EE00Stalker^000000", "^76EE00Creator^000000", ( Sex == 0 )?"":"^76EE00Gypsy^000000", ( Sex == 1 )?"":"^76EE00Clowm^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4008,255,120,170,"Self"; Case 2: callsub Job_Changing,4009,255,120,170,"Self"; Case 3: callsub Job_Changing,4010,255,120,170,"Self"; Case 4: callsub Job_Changing,4011,255,120,170,"Self"; Case 5: callsub Job_Changing,4012,255,120,170,"Self"; Case 6: callsub Job_Changing,4013,255,120,170,"Self"; Case 7: callsub Job_Changing,4015,255,120,170,"Self"; Case 8: callsub Job_Changing,4016,255,120,170,"Self"; Case 9: callsub Job_Changing,4017,255,120,170,"Self"; Case 10: callsub Job_Changing,4018,255,120,170,"Self"; Case 11: callsub Job_Changing,4019,255,120,170,"Self"; Case 12: callsub Job_Changing,4021,255,120,170,"Self"; Case 13: callsub Job_Changing,4020,255,120,170,"Self"; Case 14: goto Main_Menu; }TransThirdJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Rune Knight^000000", "^76EE00Warlock^000000", "^76EE00Ranger^000000", "^76EE00Arch Bishop^000000", "^76EE00Mechanic^000000", "^76EE00Guillotine Cross^000000", "^76EE00Royal Guard^000000", "^76EE00Sorcerer^000000", ( Sex == 0 )?"":"^76EE00Wanderer^000000", ( Sex == 1 )?"":"^76EE00Minstrel^000000", "^76EE00Shura^000000", "^76EE00Genetic^000000", "^76EE00Shadow Chaser^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4060,99,70,200,"All"; Case 2: callsub Job_Changing,4061,99,70,200,"All"; Case 3: callsub Job_Changing,4062,99,70,200,"All"; Case 4: callsub Job_Changing,4063,99,70,200,"All"; Case 5: callsub Job_Changing,4064,99,70,200,"All"; Case 6: callsub Job_Changing,4065,99,70,200,"All"; Case 7: callsub Job_Changing,4073,99,70,200,"All"; Case 8: callsub Job_Changing,4074,99,70,200,"All"; Case 9: callsub Job_Changing,4076,99,70,200,"All"; Case 10: callsub Job_Changing,4075,70,70,200,"All"; Case 11: callsub Job_Changing,4077,70,70,200,"All"; Case 12: callsub Job_Changing,4078,70,70,200,"All"; Case 13: callsub Job_Changing,4079,70,70,200,"All"; Case 14: goto Main_Menu; } ExpandedJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Super Novice^000000", "^76EE00Gunslinger^000000", "^76EE00Ninja^000000", "^76EE00Star Gladiator^000000", "^76EE00Soul Linker^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,23,255,120,170,"All"; Case 2: callsub Job_Changing,24,255,120,170,"All"; Case 3: callsub Job_Changing,25,255,120,170,"All"; Case 4: callsub Job_Changing,4047,255,120,170,"All"; Case 5: callsub Job_Changing,4049,255,120,170,"All"; Case 6: goto Main_Menu; }BabyJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Baby Swordman^000000", "^76EE00Baby Magician^000000", "^76EE00Baby Archer^000000", "^76EE00Baby Acolyte^000000", "^76EE00Baby Merchant^000000", "^76EE00Baby Thief^000000", "^76EE00Baby Knight^000000", "^76EE00Baby Priest^000000", "^76EE00Baby Wizard^000000", "^76EE00Baby Blacksmith^000000", "^76EE00Baby Hunter^000000", "^76EE00Baby Assassin^000000", "^76EE00Baby Crusader^000000", "^76EE00Baby Monk^000000", "^76EE00Baby Sage^000000", "^76EE00Baby Rogue^000000", "^76EE00Baby Alchemist^000000", ( Sex == 0 )?"":"^76EE00Baby Dancer^000000", ( Sex == 1 )?"":"^76EE00Baby Bard^000000", "^76EE00Baby Baby^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4024,255,50,60,"Self"; Case 2: callsub Job_Changing,4025,255,50,60,"Self"; Case 3: callsub Job_Changing,4026,255,50,60,"Self"; Case 4: callsub Job_Changing,4027,255,50,60,"Self"; Case 5: callsub Job_Changing,4028,255,50,60,"Self"; Case 6: callsub Job_Changing,4029,255,50,60,"Self"; Case 7: callsub Job_Changing,4030,255,50,110,"Self"; Case 8: callsub Job_Changing,4031,255,50,110,"Self"; Case 9: callsub Job_Changing,4032,255,50,110,"Self"; Case 10: callsub Job_Changing,4033,255,50,110,"Self"; Case 11: callsub Job_Changing,4034,255,50,110,"Self"; Case 12: callsub Job_Changing,4035,255,50,110,"Self"; Case 13: callsub Job_Changing,4037,255,50,110,"Self"; Case 14: callsub Job_Changing,4038,255,50,110,"Self"; Case 15: callsub Job_Changing,4039,255,50,110,"Self"; Case 16: callsub Job_Changing,4040,255,50,110,"Self"; Case 17: callsub Job_Changing,4041,255,50,110,"Self"; Case 18: callsub Job_Changing,4043,255,50,110,"Self"; Case 19: callsub Job_Changing,4042,255,50,110,"Self"; Case 20: callsub Job_Changing,4045,255,50,110,"Self"; Case 21: goto Main_Menu; } BabyThirdJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Baby Rune Knight^000000", "^76EE00Baby Warlock^000000", "^76EE00Baby Ranger^000000", "^76EE00Baby Arch Bishop^000000", "^76EE00Baby Mechanic^000000", "^76EE00Baby Guillotine Cross^000000", "^76EE00Baby Royal Guard^000000", "^76EE00Baby Sorcerer^000000", ( Sex == 0 )?"":"^76EE00Baby Wanderer^000000", ( Sex == 1 )?"":"^76EE00Baby Minstrel^000000", "^76EE00Baby Shura^000000", "^76EE00Baby Genetic^000000", "^76EE00Baby Shadow Chaser^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4096,99,70,200,"All"; Case 2: callsub Job_Changing,4097,99,70,200,"All"; Case 3: callsub Job_Changing,4098,99,70,200,"All"; Case 4: callsub Job_Changing,4099,99,70,200,"All"; Case 5: callsub Job_Changing,4100,99,70,200,"All"; Case 6: callsub Job_Changing,4101,99,70,200,"All"; Case 7: callsub Job_Changing,4102,99,70,200,"All"; Case 8: callsub Job_Changing,4103,99,70,200,"All"; Case 9: callsub Job_Changing,4105,99,70,200,"All"; Case 10: callsub Job_Changing,4104,99,70,200,"All"; Case 11: callsub Job_Changing,4106,99,70,200,"All"; Case 12: callsub Job_Changing,4107,99,70,200,"All"; Case 13: callsub Job_Changing,4108,99,70,200,"All"; Case 14: goto Main_Menu; }Job_Changing: mes .npcname$; mes "You are now a part of ^FF0000"+jobname(getarg(0))+"^000000."; if (compare(getarg(4),"All")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_all,0x76EE00; } if (compare(getarg(4),"Map")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_map,0x76EE00; } if (compare(getarg(4),"Area")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_area,0x76EE00; } if (compare(getarg(4),"Self")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_self,0x76EE00; } jobchange getarg(0); set BaseLevel,getarg(1); set JobLevel,getarg(2); ResetSkill; ResetStatus; set SkillPoint,getarg(3); if ( .Allskills == 1 ){ atcommand "@allskills"; set SkillPoint,0; } percentheal 100,100; if ( .Based == 0 ){ set #ClassHelper,1; } if ( .Based == 1 ){ set ClassHelper,1; } //warp "new_1-1",53,106; //save "prontera",156,191; close; Classes_info: mes .npcname$; mes "=====[^76EE00 Swordman Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Enthusiastic skills in sword fighting is a definite attraction to all teenagers. Easy to control and master character enables most players to be a great player."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Archer Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Long ranged attack ability and special techniques of archers in defeating enemy often lure players to try this."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Mage Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Fascinating element techniques involvement of nature in its abilities is truly amazing with their series of undefeatable magics."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Thief Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Poisoning and dodging abilities will defeat most of the enemy. Maximum defensive and offensive ability caused this character to fearsome one."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Acolyte Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A supportive character, most of the skills like helping will benefit to teammates who lead to teammates act like a terminator."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Merchant Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Involving communication with other players that emphasizes on battles, intelligence in business dealing. His versatility made him must not be look down."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Super Novice ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A job who are Advanced after Novice Class. It look alike like a Novice but it is not. Beside that, it can learn most of the skills for all 1st Job Class."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Gunslinger ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "The only Job class in RO who are using Gun as weapon. If are you a Gun Lover , there is no doubt you will choose this Job."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Ninja ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A mysterious Job Class , who alway processing Ancient Spells , look alike with Mage but not mage , good in PK , can evade very well during PK."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Taekwon ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Just like the name has mentioned. The only class in RO who are not using any Weapon. Attack enemy using barehand and foots. "; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Star Gladiator ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A class who can use the power of the Sun / Star / Moon. By processing the power of Universe to gain a stronger Power."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Soul Linker ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Class that work like a Shaman, who able to recalling the soul of the dead from the underworld to Boost other class ability."; mes " ^FF0000________________________________^000000"; next; goto Main_Menu;OnInit:waitingroom "Auto Job Changer",0;end;}
  11. Upvote
    Radian got a reaction from Tio Akima in Hercules Ultimate Localization Design   
    For my own understanding all language will be supported and you don't need to edit the npc information into a different language.
     
    for example English to Chinese. I guess?
  12. Upvote
    Radian got a reaction from Daifuku in Daifuku | Graphics, Sprites, Maps, Wiki, Forum, Advertising, Scripts & more   
    She is awesome and very nice I can assure you that she will do a very good job. 
  13. Upvote
    Radian reacted to Daifuku in Daifuku | Graphics, Sprites, Maps, Wiki, Forum, Advertising, Scripts & more   
    contact me on facebook!           join discord for freebies!


    welcome to my paid services. 
    below you can find a variety of things I can do to make your server stand out!
    if you need anything else, just ask. 
     

    Logo 25$* Patcher 20$* Animated Banner 10$* Advertising Banner 10$* Loading Screen 2$* Login Screen 5$* Facebook Banner + Profile 10$* Forum Skin 30$* Wiki Skin 20$* Interface Skin 20$* Website 30$* Icons 2$* *Please note that prices listed are for re-sellers and come without PSD. 
    *For exclusive graphics with or without PSD please ask for a quote. 

     
     
    Advertising 10$/week*  Wiki Editor 20$/week*   Support GM 20$/week*  Event GM 20$/week*  Fast Refresh Client 50$*  Normal Client 10$*  FluxCP Setup 10$*  Scripts 5$*  Singature 5$*   

    well, that was pretty much all I could think of.
    for a preview of my works please check the second post below!
    if you need anything else, just ask. 
  14. Upvote
    Radian got a reaction from mleo1 in how to make npc dynamic pub? plus questions   
    I'm not sure with this too please correct me if im wrong..
    - script PvP -1,{ end;OnInit: while(1) { sleep2 5000; waitingroom "PvP Area [ " + getmapusers("prontera") + " / 100 ] ",0; end; }}
  15. Upvote
    Radian got a reaction from Happy in Instant Job/255/120 trans only job changer npc   
    //==============================================================================////= Script Release : Job Changer + Max Leveler [ Version 1.6 ]//==================================By==========================================////= ManiacSociety//==============================================================================////= Idea Came From : ManiacSociety//= Helper : Emistry & Kenpachi//==============================================================================////= D E S C R I P T I O N S//==============================================================================//// -- 1. Character can choose a Job which he like to be.// -- 2. This NPC only have 1 Time Usage.// If it is set to Account Based then that account can use 1 times.// If it is set to Character Based then all new character can use 1 times.// -- 3. Complete skills / Skill Points will be given if it is set to be.// -- 4. Base Level and Job Level will be given upon Job Change.// -- 5. Allow players to click an items to call out the NPC.//==============================================================================////= V E R S I O N S//==============================================================================//// -- [ 1.6 ] : Added Item Script which allow the Scripts work as a "Tickets".// -- [ 1.5 ] : Added Configuration for Account Based / Character Based Settings// -- [ 1.4 ] : Added Baby Classes + 3rd Job Classes. // -- [ 1.3 ] : Added Configuration Option , 4 Announce Option , Informations. // -- [ 1.2 ] : Simplified Scripts + Shorten the Scripts. // -- [ 1.1 ] : Added New Job Change Option. // -- [ 1.0 ] : Simple Login Auto Max Level + Job Changer. //==============================================================================////= R U L E S//==============================================================================//// -- 1. Do not use for exchanging purpose. // -- 2. Do not claim it as yours. // -- 3. Do not change or remove the credits.// -- 4. Do not sell the script in order to get paid.// -- 5. Do not re-sharing upon modified without permission.//==============================================================================//// OnPCLoginEvent:// -- Add this at item DB. ( Change it to any items to your like. )// -- 30000,JobClassTicket,JobClassTicket,11,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ doevent "ClassHelper::OnPCLoginEvent"; },{},{}prontera,150,150,4 script Class Helper 779,{// -- Configuration Optionset .npcname$,"[ ^0000FF Class Helper ^000000 ]";set .InfoMenu,0; // Classes Informations Option [ 0 - Disable / 1 - Enable ]set .1stClassMenu,1; // First Job Class Option [ 0 - Disable / 1 - Enable ]set .2ndClassMenu,1; // Second Job Class Option [ 0 - Disable / 1 - Enable ]set .High1stClassMenu,1; // High 1st Class Option [ 0 - Disable / 1 - Enable ]set .Trans2ndClassMenu,1; // Transcendent Class Option [ 0 - Disable / 1 - Enable ]set .Trans3rdClassMenu,0; // Third Job Class Option [ 0 - Disable / 1 - Enable ]set .ExpandedClassMenu,1; // Expanded Class Option [ 0 - Disable / 1 - Enable ]set .BabyClassMenu,1; // Baby Job Class Option [ 0 - Disable / 1 - Enable ]set .Baby3rdClassMenu,0; // Baby Third Job Class Option [ 0 - Disable / 1 - Enable ]set .Allskills,1; // Complete Skills Option [ 0 - Disable / 1 - Enable ]// -- Usable for Only 1 Timeset .Based,1; // [ 0 - Account Based / 1 - Character Based ]if( ClassHelper == 1 || #ClassHelper == 1 ) end;Main_Menu: mes .npcname$; mes "I am the Job Class Helper..."; mes "I am here to help you."; mes " ^FF0000________________________________^000000"; mes "Do you wish to become Stronger ?"; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "Do you admire those who have a great power ? Do you wish to become a part of them ? If yes , then which classes that you admire the most ?"; next; switch(select(( .InfoMenu == 0 )?"":"^4EEE94Classes Information^000000", ( .1stClassMenu == 0 )?"":"^0000FFFirst Job Classes^000000", ( .2ndClassMenu == 0 )?"":"^0000FFSecond Job Classes^000000", ( .High1stClassMenu == 0 )?"":"^0000FFHigh First Job Classes^000000", ( .Trans2ndClassMenu == 0 )?"":"^0000FFTranscendent Job Classes^000000", ( .Trans3rdClassMenu == 0 )?"":"^0000FFThird Job Classes^000000", ( .ExpandedClassMenu == 0 )?"":"^0000FFExpanded Job Classes^000000", ( .BabyClassMenu == 0 )?"":"^0000FFBaby Normal Job Classes^000000", ( .Baby3rdClassMenu == 0 )?"":"^0000FFBaby Third Job Classes^000000", "^FF0000Sorry, i admire nobody....^000000")) { Case 1: goto Classes_info; Case 2: goto FirstJob_Classes; Case 3: goto SecondJob_Classes; Case 4: goto HighFirstJob_Classes; Case 5: goto TransSecondJob_Classes; Case 6: goto TransThirdJob_Classes; Case 7: goto ExpandedJob_Classes; Case 8: goto BabyJob_Classes; Case 9: goto BabyThirdJob_Classes; Case 10: if ( .Based == 0 ){ set #ClassHelper,1; } if ( .Based == 1 ){ set ClassHelper,1; } close; } FirstJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Swordman^000000", "^76EE00Magician^000000", "^76EE00Archer^000000", "^76EE00Acolyte^000000", "^76EE00Merchant^000000", "^76EE00Thief^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,1,255,120,120,"All"; Case 2: callsub Job_Changing,2,255,120,120,"All"; Case 3: callsub Job_Changing,3,255,120,120,"All"; Case 4: callsub Job_Changing,4,255,120,120,"All"; Case 5: callsub Job_Changing,5,255,120,120,"All"; Case 6: callsub Job_Changing,6,255,120,120,"All"; Case 7: goto Main_Menu; }HighFirstJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00High Swordman^000000", "^76EE00High Magician^000000", "^76EE00High Archer^000000", "^76EE00High Acolyte^000000", "^76EE00High Merchant^000000", "^76EE00High Thief^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4002,255,120,120,"All"; Case 2: callsub Job_Changing,4003,255,120,120,"All"; Case 3: callsub Job_Changing,4004,255,120,120,"All"; Case 4: callsub Job_Changing,4005,255,120,120,"All"; Case 5: callsub Job_Changing,4006,255,120,120,"All"; Case 6: callsub Job_Changing,4007,255,120,120,"All"; Case 7: goto Main_Menu; } SecondJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Knight^000000", "^76EE00Priest^000000", "^76EE00Wizard^000000", "^76EE00Blacksmith^000000", "^76EE00Hunter^000000", "^76EE00Assassin^000000", "^76EE00Crusader^000000", "^76EE00Monk^000000", "^76EE00Sage^000000", "^76EE00Rogue^000000", "^76EE00Alchemist^000000", ( Sex == 0 )?"":"^76EE00Dancer^000000", ( Sex == 1 )?"":"^76EE00Bard^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,7,255,120,110,"Self"; Case 2: callsub Job_Changing,8,255,120,110,"Self"; Case 3: callsub Job_Changing,9,255,120,110,"Self"; Case 4: callsub Job_Changing,10,255,120,110,"Self"; Case 5: callsub Job_Changing,11,255,120,110,"Self"; Case 6: callsub Job_Changing,12,255,120,110,"Self"; Case 7: callsub Job_Changing,14,255,120,110,"Self"; Case 8: callsub Job_Changing,15,255,120,110,"Self"; Case 9: callsub Job_Changing,16,255,120,110,"Self"; Case 10: callsub Job_Changing,17,255,120,110,"Self"; Case 11: callsub Job_Changing,18,255,120,110,"Self"; Case 12: callsub Job_Changing,20,255,120,110,"Self"; Case 13: callsub Job_Changing,19,255,120,110,"Self"; Case 14: goto Main_Menu; }TransSecondJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Lord Knight^000000", "^76EE00High Priest^000000", "^76EE00High Wizard^000000", "^76EE00Whitesmith^000000", "^76EE00Sniper^000000", "^76EE00Assassin Cross^000000", "^76EE00Paladin^000000", "^76EE00Champion^000000", "^76EE00Professor^000000", "^76EE00Stalker^000000", "^76EE00Creator^000000", ( Sex == 0 )?"":"^76EE00Gypsy^000000", ( Sex == 1 )?"":"^76EE00Clowm^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4008,255,120,170,"Self"; Case 2: callsub Job_Changing,4009,255,120,170,"Self"; Case 3: callsub Job_Changing,4010,255,120,170,"Self"; Case 4: callsub Job_Changing,4011,255,120,170,"Self"; Case 5: callsub Job_Changing,4012,255,120,170,"Self"; Case 6: callsub Job_Changing,4013,255,120,170,"Self"; Case 7: callsub Job_Changing,4015,255,120,170,"Self"; Case 8: callsub Job_Changing,4016,255,120,170,"Self"; Case 9: callsub Job_Changing,4017,255,120,170,"Self"; Case 10: callsub Job_Changing,4018,255,120,170,"Self"; Case 11: callsub Job_Changing,4019,255,120,170,"Self"; Case 12: callsub Job_Changing,4021,255,120,170,"Self"; Case 13: callsub Job_Changing,4020,255,120,170,"Self"; Case 14: goto Main_Menu; }TransThirdJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Rune Knight^000000", "^76EE00Warlock^000000", "^76EE00Ranger^000000", "^76EE00Arch Bishop^000000", "^76EE00Mechanic^000000", "^76EE00Guillotine Cross^000000", "^76EE00Royal Guard^000000", "^76EE00Sorcerer^000000", ( Sex == 0 )?"":"^76EE00Wanderer^000000", ( Sex == 1 )?"":"^76EE00Minstrel^000000", "^76EE00Shura^000000", "^76EE00Genetic^000000", "^76EE00Shadow Chaser^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4060,99,70,200,"All"; Case 2: callsub Job_Changing,4061,99,70,200,"All"; Case 3: callsub Job_Changing,4062,99,70,200,"All"; Case 4: callsub Job_Changing,4063,99,70,200,"All"; Case 5: callsub Job_Changing,4064,99,70,200,"All"; Case 6: callsub Job_Changing,4065,99,70,200,"All"; Case 7: callsub Job_Changing,4073,99,70,200,"All"; Case 8: callsub Job_Changing,4074,99,70,200,"All"; Case 9: callsub Job_Changing,4076,99,70,200,"All"; Case 10: callsub Job_Changing,4075,70,70,200,"All"; Case 11: callsub Job_Changing,4077,70,70,200,"All"; Case 12: callsub Job_Changing,4078,70,70,200,"All"; Case 13: callsub Job_Changing,4079,70,70,200,"All"; Case 14: goto Main_Menu; } ExpandedJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Super Novice^000000", "^76EE00Gunslinger^000000", "^76EE00Ninja^000000", "^76EE00Star Gladiator^000000", "^76EE00Soul Linker^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,23,255,120,170,"All"; Case 2: callsub Job_Changing,24,255,120,170,"All"; Case 3: callsub Job_Changing,25,255,120,170,"All"; Case 4: callsub Job_Changing,4047,255,120,170,"All"; Case 5: callsub Job_Changing,4049,255,120,170,"All"; Case 6: goto Main_Menu; }BabyJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Baby Swordman^000000", "^76EE00Baby Magician^000000", "^76EE00Baby Archer^000000", "^76EE00Baby Acolyte^000000", "^76EE00Baby Merchant^000000", "^76EE00Baby Thief^000000", "^76EE00Baby Knight^000000", "^76EE00Baby Priest^000000", "^76EE00Baby Wizard^000000", "^76EE00Baby Blacksmith^000000", "^76EE00Baby Hunter^000000", "^76EE00Baby Assassin^000000", "^76EE00Baby Crusader^000000", "^76EE00Baby Monk^000000", "^76EE00Baby Sage^000000", "^76EE00Baby Rogue^000000", "^76EE00Baby Alchemist^000000", ( Sex == 0 )?"":"^76EE00Baby Dancer^000000", ( Sex == 1 )?"":"^76EE00Baby Bard^000000", "^76EE00Baby Baby^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4024,255,50,60,"Self"; Case 2: callsub Job_Changing,4025,255,50,60,"Self"; Case 3: callsub Job_Changing,4026,255,50,60,"Self"; Case 4: callsub Job_Changing,4027,255,50,60,"Self"; Case 5: callsub Job_Changing,4028,255,50,60,"Self"; Case 6: callsub Job_Changing,4029,255,50,60,"Self"; Case 7: callsub Job_Changing,4030,255,50,110,"Self"; Case 8: callsub Job_Changing,4031,255,50,110,"Self"; Case 9: callsub Job_Changing,4032,255,50,110,"Self"; Case 10: callsub Job_Changing,4033,255,50,110,"Self"; Case 11: callsub Job_Changing,4034,255,50,110,"Self"; Case 12: callsub Job_Changing,4035,255,50,110,"Self"; Case 13: callsub Job_Changing,4037,255,50,110,"Self"; Case 14: callsub Job_Changing,4038,255,50,110,"Self"; Case 15: callsub Job_Changing,4039,255,50,110,"Self"; Case 16: callsub Job_Changing,4040,255,50,110,"Self"; Case 17: callsub Job_Changing,4041,255,50,110,"Self"; Case 18: callsub Job_Changing,4043,255,50,110,"Self"; Case 19: callsub Job_Changing,4042,255,50,110,"Self"; Case 20: callsub Job_Changing,4045,255,50,110,"Self"; Case 21: goto Main_Menu; } BabyThirdJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Baby Rune Knight^000000", "^76EE00Baby Warlock^000000", "^76EE00Baby Ranger^000000", "^76EE00Baby Arch Bishop^000000", "^76EE00Baby Mechanic^000000", "^76EE00Baby Guillotine Cross^000000", "^76EE00Baby Royal Guard^000000", "^76EE00Baby Sorcerer^000000", ( Sex == 0 )?"":"^76EE00Baby Wanderer^000000", ( Sex == 1 )?"":"^76EE00Baby Minstrel^000000", "^76EE00Baby Shura^000000", "^76EE00Baby Genetic^000000", "^76EE00Baby Shadow Chaser^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4096,99,70,200,"All"; Case 2: callsub Job_Changing,4097,99,70,200,"All"; Case 3: callsub Job_Changing,4098,99,70,200,"All"; Case 4: callsub Job_Changing,4099,99,70,200,"All"; Case 5: callsub Job_Changing,4100,99,70,200,"All"; Case 6: callsub Job_Changing,4101,99,70,200,"All"; Case 7: callsub Job_Changing,4102,99,70,200,"All"; Case 8: callsub Job_Changing,4103,99,70,200,"All"; Case 9: callsub Job_Changing,4105,99,70,200,"All"; Case 10: callsub Job_Changing,4104,99,70,200,"All"; Case 11: callsub Job_Changing,4106,99,70,200,"All"; Case 12: callsub Job_Changing,4107,99,70,200,"All"; Case 13: callsub Job_Changing,4108,99,70,200,"All"; Case 14: goto Main_Menu; }Job_Changing: mes .npcname$; mes "You are now a part of ^FF0000"+jobname(getarg(0))+"^000000."; if (compare(getarg(4),"All")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_all,0x76EE00; } if (compare(getarg(4),"Map")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_map,0x76EE00; } if (compare(getarg(4),"Area")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_area,0x76EE00; } if (compare(getarg(4),"Self")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_self,0x76EE00; } jobchange getarg(0); set BaseLevel,getarg(1); set JobLevel,getarg(2); ResetSkill; ResetStatus; set SkillPoint,getarg(3); if ( .Allskills == 1 ){ atcommand "@allskills"; set SkillPoint,0; } percentheal 100,100; if ( .Based == 0 ){ set #ClassHelper,1; } if ( .Based == 1 ){ set ClassHelper,1; } //warp "new_1-1",53,106; //save "prontera",156,191; close; Classes_info: mes .npcname$; mes "=====[^76EE00 Swordman Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Enthusiastic skills in sword fighting is a definite attraction to all teenagers. Easy to control and master character enables most players to be a great player."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Archer Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Long ranged attack ability and special techniques of archers in defeating enemy often lure players to try this."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Mage Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Fascinating element techniques involvement of nature in its abilities is truly amazing with their series of undefeatable magics."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Thief Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Poisoning and dodging abilities will defeat most of the enemy. Maximum defensive and offensive ability caused this character to fearsome one."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Acolyte Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A supportive character, most of the skills like helping will benefit to teammates who lead to teammates act like a terminator."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Merchant Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Involving communication with other players that emphasizes on battles, intelligence in business dealing. His versatility made him must not be look down."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Super Novice ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A job who are Advanced after Novice Class. It look alike like a Novice but it is not. Beside that, it can learn most of the skills for all 1st Job Class."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Gunslinger ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "The only Job class in RO who are using Gun as weapon. If are you a Gun Lover , there is no doubt you will choose this Job."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Ninja ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A mysterious Job Class , who alway processing Ancient Spells , look alike with Mage but not mage , good in PK , can evade very well during PK."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Taekwon ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Just like the name has mentioned. The only class in RO who are not using any Weapon. Attack enemy using barehand and foots. "; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Star Gladiator ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A class who can use the power of the Sun / Star / Moon. By processing the power of Universe to gain a stronger Power."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Soul Linker ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Class that work like a Shaman, who able to recalling the soul of the dead from the underworld to Boost other class ability."; mes " ^FF0000________________________________^000000"; next; goto Main_Menu;OnInit:waitingroom "Auto Job Changer",0;end;}
  16. Upvote
    Radian got a reaction from JulioCF in Instant Job/255/120 trans only job changer npc   
    //==============================================================================////= Script Release : Job Changer + Max Leveler [ Version 1.6 ]//==================================By==========================================////= ManiacSociety//==============================================================================////= Idea Came From : ManiacSociety//= Helper : Emistry & Kenpachi//==============================================================================////= D E S C R I P T I O N S//==============================================================================//// -- 1. Character can choose a Job which he like to be.// -- 2. This NPC only have 1 Time Usage.// If it is set to Account Based then that account can use 1 times.// If it is set to Character Based then all new character can use 1 times.// -- 3. Complete skills / Skill Points will be given if it is set to be.// -- 4. Base Level and Job Level will be given upon Job Change.// -- 5. Allow players to click an items to call out the NPC.//==============================================================================////= V E R S I O N S//==============================================================================//// -- [ 1.6 ] : Added Item Script which allow the Scripts work as a "Tickets".// -- [ 1.5 ] : Added Configuration for Account Based / Character Based Settings// -- [ 1.4 ] : Added Baby Classes + 3rd Job Classes. // -- [ 1.3 ] : Added Configuration Option , 4 Announce Option , Informations. // -- [ 1.2 ] : Simplified Scripts + Shorten the Scripts. // -- [ 1.1 ] : Added New Job Change Option. // -- [ 1.0 ] : Simple Login Auto Max Level + Job Changer. //==============================================================================////= R U L E S//==============================================================================//// -- 1. Do not use for exchanging purpose. // -- 2. Do not claim it as yours. // -- 3. Do not change or remove the credits.// -- 4. Do not sell the script in order to get paid.// -- 5. Do not re-sharing upon modified without permission.//==============================================================================//// OnPCLoginEvent:// -- Add this at item DB. ( Change it to any items to your like. )// -- 30000,JobClassTicket,JobClassTicket,11,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ doevent "ClassHelper::OnPCLoginEvent"; },{},{}prontera,150,150,4 script Class Helper 779,{// -- Configuration Optionset .npcname$,"[ ^0000FF Class Helper ^000000 ]";set .InfoMenu,0; // Classes Informations Option [ 0 - Disable / 1 - Enable ]set .1stClassMenu,1; // First Job Class Option [ 0 - Disable / 1 - Enable ]set .2ndClassMenu,1; // Second Job Class Option [ 0 - Disable / 1 - Enable ]set .High1stClassMenu,1; // High 1st Class Option [ 0 - Disable / 1 - Enable ]set .Trans2ndClassMenu,1; // Transcendent Class Option [ 0 - Disable / 1 - Enable ]set .Trans3rdClassMenu,0; // Third Job Class Option [ 0 - Disable / 1 - Enable ]set .ExpandedClassMenu,1; // Expanded Class Option [ 0 - Disable / 1 - Enable ]set .BabyClassMenu,1; // Baby Job Class Option [ 0 - Disable / 1 - Enable ]set .Baby3rdClassMenu,0; // Baby Third Job Class Option [ 0 - Disable / 1 - Enable ]set .Allskills,1; // Complete Skills Option [ 0 - Disable / 1 - Enable ]// -- Usable for Only 1 Timeset .Based,1; // [ 0 - Account Based / 1 - Character Based ]if( ClassHelper == 1 || #ClassHelper == 1 ) end;Main_Menu: mes .npcname$; mes "I am the Job Class Helper..."; mes "I am here to help you."; mes " ^FF0000________________________________^000000"; mes "Do you wish to become Stronger ?"; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "Do you admire those who have a great power ? Do you wish to become a part of them ? If yes , then which classes that you admire the most ?"; next; switch(select(( .InfoMenu == 0 )?"":"^4EEE94Classes Information^000000", ( .1stClassMenu == 0 )?"":"^0000FFFirst Job Classes^000000", ( .2ndClassMenu == 0 )?"":"^0000FFSecond Job Classes^000000", ( .High1stClassMenu == 0 )?"":"^0000FFHigh First Job Classes^000000", ( .Trans2ndClassMenu == 0 )?"":"^0000FFTranscendent Job Classes^000000", ( .Trans3rdClassMenu == 0 )?"":"^0000FFThird Job Classes^000000", ( .ExpandedClassMenu == 0 )?"":"^0000FFExpanded Job Classes^000000", ( .BabyClassMenu == 0 )?"":"^0000FFBaby Normal Job Classes^000000", ( .Baby3rdClassMenu == 0 )?"":"^0000FFBaby Third Job Classes^000000", "^FF0000Sorry, i admire nobody....^000000")) { Case 1: goto Classes_info; Case 2: goto FirstJob_Classes; Case 3: goto SecondJob_Classes; Case 4: goto HighFirstJob_Classes; Case 5: goto TransSecondJob_Classes; Case 6: goto TransThirdJob_Classes; Case 7: goto ExpandedJob_Classes; Case 8: goto BabyJob_Classes; Case 9: goto BabyThirdJob_Classes; Case 10: if ( .Based == 0 ){ set #ClassHelper,1; } if ( .Based == 1 ){ set ClassHelper,1; } close; } FirstJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Swordman^000000", "^76EE00Magician^000000", "^76EE00Archer^000000", "^76EE00Acolyte^000000", "^76EE00Merchant^000000", "^76EE00Thief^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,1,255,120,120,"All"; Case 2: callsub Job_Changing,2,255,120,120,"All"; Case 3: callsub Job_Changing,3,255,120,120,"All"; Case 4: callsub Job_Changing,4,255,120,120,"All"; Case 5: callsub Job_Changing,5,255,120,120,"All"; Case 6: callsub Job_Changing,6,255,120,120,"All"; Case 7: goto Main_Menu; }HighFirstJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00High Swordman^000000", "^76EE00High Magician^000000", "^76EE00High Archer^000000", "^76EE00High Acolyte^000000", "^76EE00High Merchant^000000", "^76EE00High Thief^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4002,255,120,120,"All"; Case 2: callsub Job_Changing,4003,255,120,120,"All"; Case 3: callsub Job_Changing,4004,255,120,120,"All"; Case 4: callsub Job_Changing,4005,255,120,120,"All"; Case 5: callsub Job_Changing,4006,255,120,120,"All"; Case 6: callsub Job_Changing,4007,255,120,120,"All"; Case 7: goto Main_Menu; } SecondJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Knight^000000", "^76EE00Priest^000000", "^76EE00Wizard^000000", "^76EE00Blacksmith^000000", "^76EE00Hunter^000000", "^76EE00Assassin^000000", "^76EE00Crusader^000000", "^76EE00Monk^000000", "^76EE00Sage^000000", "^76EE00Rogue^000000", "^76EE00Alchemist^000000", ( Sex == 0 )?"":"^76EE00Dancer^000000", ( Sex == 1 )?"":"^76EE00Bard^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,7,255,120,110,"Self"; Case 2: callsub Job_Changing,8,255,120,110,"Self"; Case 3: callsub Job_Changing,9,255,120,110,"Self"; Case 4: callsub Job_Changing,10,255,120,110,"Self"; Case 5: callsub Job_Changing,11,255,120,110,"Self"; Case 6: callsub Job_Changing,12,255,120,110,"Self"; Case 7: callsub Job_Changing,14,255,120,110,"Self"; Case 8: callsub Job_Changing,15,255,120,110,"Self"; Case 9: callsub Job_Changing,16,255,120,110,"Self"; Case 10: callsub Job_Changing,17,255,120,110,"Self"; Case 11: callsub Job_Changing,18,255,120,110,"Self"; Case 12: callsub Job_Changing,20,255,120,110,"Self"; Case 13: callsub Job_Changing,19,255,120,110,"Self"; Case 14: goto Main_Menu; }TransSecondJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Lord Knight^000000", "^76EE00High Priest^000000", "^76EE00High Wizard^000000", "^76EE00Whitesmith^000000", "^76EE00Sniper^000000", "^76EE00Assassin Cross^000000", "^76EE00Paladin^000000", "^76EE00Champion^000000", "^76EE00Professor^000000", "^76EE00Stalker^000000", "^76EE00Creator^000000", ( Sex == 0 )?"":"^76EE00Gypsy^000000", ( Sex == 1 )?"":"^76EE00Clowm^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4008,255,120,170,"Self"; Case 2: callsub Job_Changing,4009,255,120,170,"Self"; Case 3: callsub Job_Changing,4010,255,120,170,"Self"; Case 4: callsub Job_Changing,4011,255,120,170,"Self"; Case 5: callsub Job_Changing,4012,255,120,170,"Self"; Case 6: callsub Job_Changing,4013,255,120,170,"Self"; Case 7: callsub Job_Changing,4015,255,120,170,"Self"; Case 8: callsub Job_Changing,4016,255,120,170,"Self"; Case 9: callsub Job_Changing,4017,255,120,170,"Self"; Case 10: callsub Job_Changing,4018,255,120,170,"Self"; Case 11: callsub Job_Changing,4019,255,120,170,"Self"; Case 12: callsub Job_Changing,4021,255,120,170,"Self"; Case 13: callsub Job_Changing,4020,255,120,170,"Self"; Case 14: goto Main_Menu; }TransThirdJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Rune Knight^000000", "^76EE00Warlock^000000", "^76EE00Ranger^000000", "^76EE00Arch Bishop^000000", "^76EE00Mechanic^000000", "^76EE00Guillotine Cross^000000", "^76EE00Royal Guard^000000", "^76EE00Sorcerer^000000", ( Sex == 0 )?"":"^76EE00Wanderer^000000", ( Sex == 1 )?"":"^76EE00Minstrel^000000", "^76EE00Shura^000000", "^76EE00Genetic^000000", "^76EE00Shadow Chaser^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4060,99,70,200,"All"; Case 2: callsub Job_Changing,4061,99,70,200,"All"; Case 3: callsub Job_Changing,4062,99,70,200,"All"; Case 4: callsub Job_Changing,4063,99,70,200,"All"; Case 5: callsub Job_Changing,4064,99,70,200,"All"; Case 6: callsub Job_Changing,4065,99,70,200,"All"; Case 7: callsub Job_Changing,4073,99,70,200,"All"; Case 8: callsub Job_Changing,4074,99,70,200,"All"; Case 9: callsub Job_Changing,4076,99,70,200,"All"; Case 10: callsub Job_Changing,4075,70,70,200,"All"; Case 11: callsub Job_Changing,4077,70,70,200,"All"; Case 12: callsub Job_Changing,4078,70,70,200,"All"; Case 13: callsub Job_Changing,4079,70,70,200,"All"; Case 14: goto Main_Menu; } ExpandedJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Super Novice^000000", "^76EE00Gunslinger^000000", "^76EE00Ninja^000000", "^76EE00Star Gladiator^000000", "^76EE00Soul Linker^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,23,255,120,170,"All"; Case 2: callsub Job_Changing,24,255,120,170,"All"; Case 3: callsub Job_Changing,25,255,120,170,"All"; Case 4: callsub Job_Changing,4047,255,120,170,"All"; Case 5: callsub Job_Changing,4049,255,120,170,"All"; Case 6: goto Main_Menu; }BabyJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Baby Swordman^000000", "^76EE00Baby Magician^000000", "^76EE00Baby Archer^000000", "^76EE00Baby Acolyte^000000", "^76EE00Baby Merchant^000000", "^76EE00Baby Thief^000000", "^76EE00Baby Knight^000000", "^76EE00Baby Priest^000000", "^76EE00Baby Wizard^000000", "^76EE00Baby Blacksmith^000000", "^76EE00Baby Hunter^000000", "^76EE00Baby Assassin^000000", "^76EE00Baby Crusader^000000", "^76EE00Baby Monk^000000", "^76EE00Baby Sage^000000", "^76EE00Baby Rogue^000000", "^76EE00Baby Alchemist^000000", ( Sex == 0 )?"":"^76EE00Baby Dancer^000000", ( Sex == 1 )?"":"^76EE00Baby Bard^000000", "^76EE00Baby Baby^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4024,255,50,60,"Self"; Case 2: callsub Job_Changing,4025,255,50,60,"Self"; Case 3: callsub Job_Changing,4026,255,50,60,"Self"; Case 4: callsub Job_Changing,4027,255,50,60,"Self"; Case 5: callsub Job_Changing,4028,255,50,60,"Self"; Case 6: callsub Job_Changing,4029,255,50,60,"Self"; Case 7: callsub Job_Changing,4030,255,50,110,"Self"; Case 8: callsub Job_Changing,4031,255,50,110,"Self"; Case 9: callsub Job_Changing,4032,255,50,110,"Self"; Case 10: callsub Job_Changing,4033,255,50,110,"Self"; Case 11: callsub Job_Changing,4034,255,50,110,"Self"; Case 12: callsub Job_Changing,4035,255,50,110,"Self"; Case 13: callsub Job_Changing,4037,255,50,110,"Self"; Case 14: callsub Job_Changing,4038,255,50,110,"Self"; Case 15: callsub Job_Changing,4039,255,50,110,"Self"; Case 16: callsub Job_Changing,4040,255,50,110,"Self"; Case 17: callsub Job_Changing,4041,255,50,110,"Self"; Case 18: callsub Job_Changing,4043,255,50,110,"Self"; Case 19: callsub Job_Changing,4042,255,50,110,"Self"; Case 20: callsub Job_Changing,4045,255,50,110,"Self"; Case 21: goto Main_Menu; } BabyThirdJob_Classes: mes .npcname$; mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes."; next; switch(select("^76EE00Baby Rune Knight^000000", "^76EE00Baby Warlock^000000", "^76EE00Baby Ranger^000000", "^76EE00Baby Arch Bishop^000000", "^76EE00Baby Mechanic^000000", "^76EE00Baby Guillotine Cross^000000", "^76EE00Baby Royal Guard^000000", "^76EE00Baby Sorcerer^000000", ( Sex == 0 )?"":"^76EE00Baby Wanderer^000000", ( Sex == 1 )?"":"^76EE00Baby Minstrel^000000", "^76EE00Baby Shura^000000", "^76EE00Baby Genetic^000000", "^76EE00Baby Shadow Chaser^000000", "^FF0000Back^000000")) {// --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>; Case 1: callsub Job_Changing,4096,99,70,200,"All"; Case 2: callsub Job_Changing,4097,99,70,200,"All"; Case 3: callsub Job_Changing,4098,99,70,200,"All"; Case 4: callsub Job_Changing,4099,99,70,200,"All"; Case 5: callsub Job_Changing,4100,99,70,200,"All"; Case 6: callsub Job_Changing,4101,99,70,200,"All"; Case 7: callsub Job_Changing,4102,99,70,200,"All"; Case 8: callsub Job_Changing,4103,99,70,200,"All"; Case 9: callsub Job_Changing,4105,99,70,200,"All"; Case 10: callsub Job_Changing,4104,99,70,200,"All"; Case 11: callsub Job_Changing,4106,99,70,200,"All"; Case 12: callsub Job_Changing,4107,99,70,200,"All"; Case 13: callsub Job_Changing,4108,99,70,200,"All"; Case 14: goto Main_Menu; }Job_Changing: mes .npcname$; mes "You are now a part of ^FF0000"+jobname(getarg(0))+"^000000."; if (compare(getarg(4),"All")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_all,0x76EE00; } if (compare(getarg(4),"Map")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_map,0x76EE00; } if (compare(getarg(4),"Area")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_area,0x76EE00; } if (compare(getarg(4),"Self")){ announce "[ "+strcharinfo(0)+" ] has changed to [ "+jobname(getarg(0))+" ].",bc_self,0x76EE00; } jobchange getarg(0); set BaseLevel,getarg(1); set JobLevel,getarg(2); ResetSkill; ResetStatus; set SkillPoint,getarg(3); if ( .Allskills == 1 ){ atcommand "@allskills"; set SkillPoint,0; } percentheal 100,100; if ( .Based == 0 ){ set #ClassHelper,1; } if ( .Based == 1 ){ set ClassHelper,1; } //warp "new_1-1",53,106; //save "prontera",156,191; close; Classes_info: mes .npcname$; mes "=====[^76EE00 Swordman Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Enthusiastic skills in sword fighting is a definite attraction to all teenagers. Easy to control and master character enables most players to be a great player."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Archer Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Long ranged attack ability and special techniques of archers in defeating enemy often lure players to try this."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Mage Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Fascinating element techniques involvement of nature in its abilities is truly amazing with their series of undefeatable magics."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Thief Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Poisoning and dodging abilities will defeat most of the enemy. Maximum defensive and offensive ability caused this character to fearsome one."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Acolyte Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A supportive character, most of the skills like helping will benefit to teammates who lead to teammates act like a terminator."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Merchant Classes ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Involving communication with other players that emphasizes on battles, intelligence in business dealing. His versatility made him must not be look down."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Super Novice ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A job who are Advanced after Novice Class. It look alike like a Novice but it is not. Beside that, it can learn most of the skills for all 1st Job Class."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Gunslinger ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "The only Job class in RO who are using Gun as weapon. If are you a Gun Lover , there is no doubt you will choose this Job."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Ninja ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A mysterious Job Class , who alway processing Ancient Spells , look alike with Mage but not mage , good in PK , can evade very well during PK."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Taekwon ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Just like the name has mentioned. The only class in RO who are not using any Weapon. Attack enemy using barehand and foots. "; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Star Gladiator ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "A class who can use the power of the Sun / Star / Moon. By processing the power of Universe to gain a stronger Power."; mes " ^FF0000________________________________^000000"; next; mes .npcname$; mes "=====[^76EE00 Soul Linker ^000000]====="; mes " ^FF0000________________________________^000000"; mes "^4EEE94Description :^000000"; mes "Class that work like a Shaman, who able to recalling the soul of the dead from the underworld to Boost other class ability."; mes " ^FF0000________________________________^000000"; next; goto Main_Menu;OnInit:waitingroom "Auto Job Changer",0;end;}
  17. Upvote
    Radian got a reaction from Muyo in Luk and freezing   
    case SC_FREEZE: sc_def = st->mdef*100; sc_def2 = st->luk*10 + SCDEF_LVL_DIFF(bl, src, 99, 10); tick_def = 0; //No duration reduction tick_def = st->luk>249?0:tick_def; to this.
    case SC_FREEZE: sc_def = status->mdef*100; sc_def2 = status->luk*100/35 + status_get_lv(bl)*10 - status_get_lv(src)*10; tick_def2 = status->luk*10 + status_src->luk*-10; // Caster can increase final duration with luk  
    or refer to this http://rathena.org/board/topic/99448-about-frozen-and-luk-resistane/
  18. Upvote
    Radian got a reaction from Lilystar in Failed to Connect to Server   
    I think your wrong. it was stated in the warning that it was running on root privileges. its not " you are not running on root privileges ".
×
×
  • Create New...

Important Information

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