-
Posts
98 -
Joined
-
Last visited
-
Days Won
4
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by EIysium
-
Los comandos los editas directamente desde conf/groups.conf Los grupos se dividen por ID, por ejemplo el de Admin debe ser Id: 99 y el de un usuario normal es 0. Por lo que de un GM debería ser el ID: 10. Ahí tu colocas los comandos que desees colocarles, puedes echarle un vistazo a los comandos en doc/atcommands.txt Y por último, para agregar un comando tienes que agregarlos en commands: { por lo que lo verías así: { id: 10 name: "Law Enforcement" inherit: ( "Support" ) level: 2 commands: { hide: true follow: true kick: true disguise: true fakename: true option: true speed: true warp: true kill: true recall: true ban: true block: true jail: true jailfor: true mute: true storagelist: true cartlist: true itemlist: true stats: true } log_commands: true permissions: { join_chat: true kick_chat: true hide_session: true who_display_aid: true hack_info: true any_warp: true view_hpmeter: true } },
-
Quests, Games: Instance - Astral Temple
EIysium replied to Alayne's topic in Game, Event, Quest Script Releases
I tried fix 'unknown instance astral temple creation was attempted' but i dunno what is the problem no errors when i load the script. The only error occurs is when i try to create a instance :x -
You can clone mob from the KRO files by removing the sound with Act Editor Search mob with GRF Editor (data/sprite/npc): then extract it from GRF Editor and open Act Editor: You need search 'Frame Sound' frame per frame and edit to None so you will able to put that mob as npc witout sound. remember change the NPC name and implement as new npc on your server.
- 1 reply
-
- 1
-
-
pre-renewal mechanics and renewal content problem
EIysium replied to ZodiacoHCK's question in General Support
You need edit file per file if you want all renewal items on your pre-renewal server. For NPC it is easier , all you have to do is: Q: i need activate Charleston Crisis but how? A: Search in your npc folder and go to scripts_athena.conf and add on the line // ------------------------ Instances --------------------------- npc: npc/instances/SealedShrine.txt npc: npc/instances/EndlessTower.txt npc: npc/instances/OrcsMemory.txt npc: npc/instances/NydhoggsNest.txt you need to paste the exact route that you have Charlestone crisis wich should be: npc: npc/re/instances/CharlestonCrisis.txt Don't forget that you have to do same for all content. -
Search original sprites from your data.grf with GRF Editor and extract them. rename all alternative sprite name to original sprite name.
-
maybe you didn't put your item custom in system/iteminfo.lua
-
Es mejor que lo traduzcas por ti mismo para evitar bugs a futuro... Para que te tome los acentos, símbolos y Ñ. Tienes que convertir la codificación a ANSI con Notepad++ (debes cliquear en Codificación/ Codificar en ANSI). Sobre colocar algún premio al cambiar de clase sólo colócalo antes del callfunc "Job_Change",Job_CLASE; Coloqué un Dead Branch como ejemplo en el siguiente script (Puedes buscarlo por 604). //===== rAthena Script ======================================= //= Acolyte Job Quest //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= [Official Conversion] //= Job quest for Acolyte classes //===== Additional Comments: ================================= //= 1.0 Fully working. //= 1.1 Added function calls for Priest Quest. //= 1.2 Fixed Marthilda, Yosuke bugs. [Lupus] //= 1.2a Added instant job change for High Novice [Lupus] //= 1.3 Added Baby Class support [Lupus] //= 1.4 Optimised and moved first checker to Jfunc1-1 [massdriller] //= 1.5 Now saves/restores all quest skills [Lupus] //= 1.6 Merged back JFunc [Lupus] //= 1.7 Rescripted to Aegis 10.3 stadards. [L0ne_W0lf] //= No longer uses function "F_ToHigh" //= Proper dialog for Priest job quest is unused (for now.) //= 1.7a Functions now make use of proper priest quest dialog [L0ne_W0lf] //= 1.8 Removed an Unnecessary "set job_acolyte_q,0;" [Samuray22] //= 1.8a More bug fixes care of Crashy. [L0ne_W0lf] //= 1.9 Changed Marthilda to Mathilda. [L0ne_W0llf] //= 2.0 Fixed High Acolytesnot being given holy light. [L0ne_W0lf] //= 2.1 Added Quest Log commands. [L0ne_W0lf] //= 2.2 Fixed an issue with completequest by adding checkquest. [Kisuka] //============================================================ prt_church,184,41,4 script Cleric#aco 60,{ if (Upper == 1) { if (ADVJOB == Job_High_Priest || ADVJOB == Job_Champion) { if (Class == Job_Novice_High) { mes "[Father Mareusis]"; mes "Ah, I sense you have endured"; mes "a past life experience. You must have learned many things before entering Valhalla."; next; if (!callfunc("F_CanChangeJob")) { mes "[Father Mareusis]"; mes "Desafortunadamente, no creo que estés listo para convertirte en Acólito todavía. Primero, termine de aprender todas las habilidades básicas."; next; mes "[Father Mareusis]"; mes "In the meantime,"; mes "I will wait until"; mes "you are ready."; mes "May God be"; mes "with you."; close; } mes "[Father Mareusis]"; mes "Well, I welcome you"; mes "back from Valhalla and"; mes "wish you luck on your"; mes "new life's journey."; next; skill "NV_TRICKDEAD",0,SKILL_PERM; jobchange Job_Acolyte_High; skill "AL_HOLYLIGHT",1,SKILL_PERM; mes "[Father Mareusis]"; mes "Now, venture forth and seek those who need your help. May God light your path."; close; } else { mes "[Father Mareusis]"; mes "Now, venture forth to seek people who need your help. May God enlighten your way."; close; } } else { mes "[Father Mareusis]"; mes "I sense that you have endured a past life experience. You must have learned many things before entering Valhalla."; next; mes "[Father Mareusis]"; mes "However, I can tell that you are not suited to be an Acolyte. Please remember who you were in your past life and find your path."; close; } } mes "[Father Mareusis]"; mes "What is it that you seek?"; next; switch(select("Father, I want to be a Acolyte.:Acolyte Requirements.:Just looking around.")) { case 1: mes "[Father Mareusis]"; if (BaseJob == Job_Acolyte) { mes "Are you feeling okay today? I can tell by your attire that you are already an Acolyte. You're not joking around, are you?"; close; } else if (BaseJob != Job_Novice) { mes "I'm sorry, but we can only accept Novices as applicants for the job change to Acolyte."; close; } if (job_acolyte_q == 0) { mes "Do you truly"; mes "wish to become"; mes "a servant of God?"; next; if (select("Yes Father, I do.:Nope, I lied.") == 1) { mes "[Father Mareusis]"; mes "Good. I accept " + strcharinfo(0) + "'s will to become an Acolyte. You understand that you must do penance before you can become a servant of God, right?"; next; mes "[Father Mareusis]"; mes "Well, I will"; mes "give you a mission..."; switch(rand(3)) { default: set job_acolyte_q,2; mes "Please visit ^000077Father Rubalkabara^000000, a member of the Prontera Parish, and return here. He has been practicing asceticism in the ^000077Relics NorthEast of Prontera City^000000."; setquest 1001; break; case 1: set job_acolyte_q,3; mes "Please visit ^000077Mother Mathilda^000000 and then return to me. She has been practicing asceticism near ^000077Morocc Town, SouthWest of Prontera City^000000."; setquest 1002; break; case 2: set job_acolyte_q,4; mes "Please visit ^000077Father Yosuke^000000 and return here. He has been practicing asceticism around ^000077a bridge somewhere NorthWest of Prontera^000000."; setquest 1003; break; } next; mes "[Father Mareusis]"; mes "May the grace of God light your path and guide you during your journey of penance."; close; } mes "[Father Mareusis]"; mes "You lied?"; mes "It is good that you"; mes "have confessed your"; mes "wrongdoing. Go in"; mes "peace, my son."; close; } mes "Oh, you've come back. Let me check and see if you are ready to serve God. Let's see..."; next; mes "[Father Mareusis]"; if (!callfunc("F_CanChangeJob")) { mes "Good Lord! Haven't you accomplished the Basic Training yet?! It's important that you finish that!"; next; mes "[Father Mareusis]"; mes "You should have trained more! Go back and make sure you reach Novice Job Level 9 and learn all of the Basic Skills!"; close; } if (job_acolyte_q < 5) { mes "Oh? I can't find your name on the Registration List."; next; switch(job_acolyte_q) { case 2: mes "[Father Mareusis]"; mes "Please visit ^000077Father Rubalkabara^000000, a member of the Prontera Parish, and return here."; next; mes "[Father Mareusis]"; mes "He has been practicing asceticism in the ^000077Relics at the NorthEast of Prontera City^000000."; break; case 3: mes "[Father Mareusis]"; mes "Please Visit ^000077Mother Mathilda^000000 and return here to me."; next; mes "[Father Mareusis]"; mes "She has been practicing asceticism near ^000077Morocc Town, located SouthWest of Prontera City^000000."; break; case 4: mes "[Father Mareusis]"; mes "Please visit ^000077 Father Yosuke ^000000 and return here to me."; next; mes "[Father Mareusis]"; mes "He has been practicing asceticism near a ^000077bridge somewhere to the NorthWest of Prontera^000000."; break; } next; mes "[Father Mareusis]"; mes "May the grace of God brighten your path and guide you on your journey of penance."; close; } mes "Hmm..."; mes "Your name is on the list and you've proven your qualification."; next; mes "[Father Mareusis]"; mes "I am proud to say that you are now ready to become an Acolyte!"; next; getitem 604,1; skill "NV_TRICKDEAD",0,SKILL_PERM; callfunc "Job_Change",Job_Acolyte; callfunc "F_ClearJobVar"; if(checkquest(1001) != -1) { completequest 1001; } else if(checkquest(1002) != -1) { completequest 1002; } else { completequest 1003; } mes "[Father Mareusis]"; mes "Always remember to be thankful to God, who is taking care of us all the time."; next; mes "[Father Mareusis]"; mes "Always use your gifts to serve Him by helping others. In chaos and times of difficulty, face your hardships with unwavering faith."; next; mes "[Father Mareusis]"; mes "Lastly, I want to sincerely congratulate you on persevering through your trial of penance."; close; case 2: mes "[Father Mareusis]"; mes "Do you wish to become an Acolyte? You must fulfill two requirements."; next; mes "[Father Mareusis]"; mes "First, you have to reach at least Novice Job Level 9 and learn all of the Basic Skills. Second, you will be given a trial of penance to overcome."; next; mes "[Father Mareusis]"; if (job_acolyte_q != 0) { switch(job_acolyte_q) { case 2: mes "For your trial, please visit ^000077Father Rubalkabara ^000000 and then return here to me."; next; mes "[Father Mareusis]"; mes "He is practicing asceticism in the ^000077Relics at the NorthEast of Prontera City^000000."; break; case 3: mes "For your trial, please visit ^000077Mother Mathilda^000000 and return here to me."; next; mes "[Father Mareusis]"; mes "She has been practicing asceticism near ^000077Morocc, located to the SouthWest of Prontera City^000000."; break; default: mes "For your trial, please visit ^000077Father Yosuke^000000 and return here to me."; next; mes "[Father Mareusis]"; mes "He has been practicing asceticism around a bridge somewhere ^000077NorthWest of Prontera^000000."; break; } next; mes "[Father Mareusis]"; mes "May the grace of God light your path and guide you on your journey of penance."; } else { mes "The destination for this trial will be decided once you fill the application form."; } next; mes "[Father Mareusis]"; mes "Please come back after fulfilling the two requirements I've asked of you. As long as your desire to serve God and others is sincere, you will be able to make it."; close; case 3: close; } } prt_fild03,365,255,2 script Ascetic#aco 89,{ mes "[Father Rubalkabara]"; if (BaseJob == Job_Novice) { if (job_acolyte_q == 6) { mes "Please take care. They should know that you've met me by the time you arrive at the Prontera Sanctuary."; next; mes "[Father Rubalkabara]"; mes "I've sent a carrier pigeon with a message. I hope it will arrive there safely..."; close; } if (job_acolyte_q != 0) { if (job_acolyte_q == 2) { mes "Oh...? You must be the one who aspires to become an Acolyte. I've already received news from the Sanctuary that you might be coming."; next; mes "[Father Rubalkabara]"; mes "Now, your name was " + strcharinfo(0) + ", right? Excellent, thank you for visiting me."; next; mes "[Father Rubalkabara]"; mes "I believe you've been told much about Acolytes from Friar Mareusis. Plus, there's plenty of helpful people in the Prontera Sanctuary."; next; mes "[Father Rubalkabara]"; mes "I guess there's really no need for me to teach you much. Besides, I'm sure your someone from your generation may have trouble listening to an old man like me. Hahaha~"; next; mes "[Father Rubalkabara]"; mes "Still, lessons may come from the places you'd least expect. God loves to teach his children in strange ways. You'll see."; next; mes "[Father Rubalkabara]"; mes "Well, I'll send the message telling them that you've come to visit me. So, you may now return to the Prontera Sanctuary."; next; mes "[Father Rubalkabara]"; mes "Farewell."; close2; savepoint "prt_fild03",361,255,1,1; set job_acolyte_q,6; end; } else { mes "Oh..."; mes "Are you one of the"; mes "Acolyte applicants...?"; mes "Let's see..."; next; mes "[Father Rubalkabara]"; mes "Your name is " + strcharinfo(0) + "?"; mes "I don't think your name"; mes "is on my list. Hmmm..."; next; mes "[Father Rubalkabara]"; mes "Why don't you go back to the Prontera Sanctuary and check again?"; close; } } else { mes "Huh? What brings you here? This is a very dangerous place for a Novice like yourself!"; close; } } else if (BaseJob == Job_Acolyte) callfunc "F_FatherRub"; else { if (BaseJob == Job_Priest) { mes "Greetings."; next; mes "[Father Rubalkabara]"; mes "Welcome to the Deep. Feel free to sit and contemplate God's message with me. This place is beautiful, even if danger accompanies its sense of serenity..."; close; } else { mes "Oh ho..."; mes "Have you come into the Deep here for training? Or are you just a Wanderer?"; next; mes "[Father Rubalkabara]"; mes "Whoever you are, please take care of yourself. The monsters in here are shockingly strong, contrary to their cute appearance."; close; } } } moc_fild07,41,355,4 script Ascetic#2aco 95,{ mes "[Mother Mathilda]"; if (BaseJob == Job_Novice) { if (job_acolyte_q == 7) { mes "I will send a carrier pigeon to the Prontera Sanctuary. When you return, the Priest there should already have received my message."; next; mes "[Mother Mathilda]"; mes "I will pray to God, and hope that you become an Acolyte soon."; close; } if (job_acolyte_q != 0) { if (job_acolyte_q == 3) { mes "Ah, you must be one of the Acolyte applicants. I sincerely welcome you."; next; mes "[Mother Mathilda]"; mes "What is your name? " + strcharinfo(0) + "? Let's see... Ah, you're on my list."; next; mes "[Mother Mathilda]"; mes "I will send a message to the Sanctuary confirming that you, " + strcharinfo(0) + " visited me and completed your penance."; next; mes "[Mother Mathilda]"; mes "Please return to the Prontera Sanctuary and speak to the Priest in charge."; close2; savepoint "moc_fild07",35,355,1,1; set job_acolyte_q,7; end; } else { mes "Ah...!"; mes "You must be one"; mes "of the Acolyte applicants."; mes "I sincerely welcome you."; next; mes "[Mother Mathilda]"; mes "Now, what is your name?"; mes "" + strcharinfo(0) + "? Let's see..."; next; mes "[Mother Mathilda]"; mes "Hmm..."; mes "It seems your name"; mes "is not on my list..."; next; mes "[Mother Mathilda]"; mes "Perhaps you should return to the Prontera Sanctuary and check the destination for your penance trial once again."; close; } } else { mes "..."; close; } } else if (BaseJob == Job_Acolyte) callfunc "F_MotherMart"; else { if (BaseJob == Job_Priest) { mes "Hello there~"; next; mes "[Mother Mathilda]"; mes "How is your practice coming along? I certainly hope you're enjoying living in the grace of God."; close; } else { mes "May God"; mes "be with you..."; close; } } } prt_fild00,208,218,6 script Ascetic#3aco 98,{ mes "[Father Yosuke]"; if (BaseJob == Job_Novice) { if (job_acolyte_q == 8) { mes "What?"; next; mes "[Father Yosuke]"; mes "Have you any more business with me?! You don't! Go back to the Sanctuary now!"; close; } if (job_acolyte_q != 0) { if (job_acolyte_q == 4) { mes "Hey."; mes "Whatever you are,"; mes "you look like an"; mes "Acolyte applicant."; mes "Right?"; next; mes "[Father Yosuke]"; mes "Not bad, not bad. You withstood the penance trial pretty well."; mes "So what's your name?"; next; mes "[Father Yosuke]"; mes "" + strcharinfo(0) + ", huh?"; next; mes "[Father Yosuke]"; mes "Okay. I'll send a message to the Sanctuary that you, " + strcharinfo(0) + ", came to visit me."; next; mes "[Father Yosuke]"; mes "Now go back to the Santuary and finish becoming an Acolyte, kid."; close2; savepoint "prt_fild00",206,230,1,1; set job_acolyte_q,8; end; } else { mes "Hey."; mes "You look like an Acolyte Applicant. Am I right?"; next; mes "[Father Yosuke]"; mes "Not bad at all, you've made it all the way here from Prontera. So what's your name, kid?"; next; mes "[Father Yosuke]"; mes "" + strcharinfo(0) + ", huh? Why isn't your name on my list?"; next; mes "[Father Yosuke]"; mes "You probably made a mistake. Go back to the Santuary, and check with the Bishop."; close; } } else { mes "You..."; mes "Novice."; mes "There something"; mes "you wanna tell me?"; close; } } else if (BaseJob == Job_Acolyte) callfunc "F_FatherYos"; else { if (BaseJob == Job_Priest) { mes "Hey..."; next; mes "[Father Yosuke]"; mes "If you like, come sit here with me and meditate the great truths. God's majesty is truly inspiring..."; close; } else { mes "Do you have anything to say? Because unfortunately for you,"; mes "I don't any replies."; close; } } }
-
Dices que cure más o que cure más rápido? Si es para que cure más, solo basta con el script que pusiste. Yo le coloqué el ID de la skill por lo que sería: bonus2 bSkillHeal,322,3000; Lo probé en un instrumento y funcionó bien.
-
Can you show me the katar code on item_db? The code by default is 0x00001000 or if you are using new db should be: - Id: 1250 AegisName: Jur Name: Jur Type: Weapon SubType: Katar Buy: 19500 Weight: 800 Attack: 125 Range: 1 Slots: 2 Jobs: Assassin: true Locations: Both_Hand: true WeaponLevel: 2 EquipLevelMin: 18 Refineable: true
-
? I use sql if you want, or rename to conserve the old log just sader said.
-
Limiting a (Shadow) Refiner to refine only 1-2 items
EIysium replied to Reinheit's question in Script Requests
Find: for( set [email protected],1; [email protected] <= 15; set [email protected],[email protected]+1 ){ Edit: for( set [email protected],1; [email protected] <= 2; set [email protected],[email protected]+1 ){ -
Picklog burns your cpu usage, because record everything. mine was 99% because the size of picklog was 5gb lol. i recommend clean picklog file every 15 days or configure log_athena.conf to usefull logs like trades only.
-
Because you're trying put Third Class in classes who doesn't have Third Class (Novice, and First Classes). you need put a condition when classes like Swordman doesn't affect when equips. There you go: 2301,Cotton_Shirt,Cotton Shirt,4,10,,100,,1,,4,0xFFFFFFFF,63,2,16,,0,1,0,{ if(Class == 4008){ skill "RK_DRAGONTRAINING",5; } else if (Class == 10 || Class == 4011 || Class == 4033 ){ skill "NC_MADOLICENCE",5; }else if(Class == 4012){ skill "RA_WUGMASTERY",1; skill "RA_WUGRIDER",3; } },{ if ( BaseClass==Job_Novice || BaseClass==Job_Summoner || BaseClass==Job_Taekwon || BaseClass==Job_Gunslinger || BaseClass==Job_Ninja || BaseJob==Job_Swordman || BaseJob==Job_Mage || BaseJob==Job_Archer || BaseJob==Job_Merchant || BaseJob==Job_Thief || BaseJob==Job_Acolyte ) end; changebase roclass(eaclass()|EAJL_THIRD); },{ changebase Class; }
-
Hello, good evening! I'm trying to make different item effects but is doesn't update until i change my equipment or update my stats... is this normal? Tried to make for example every 100 weight = 50 STR (The effect is on my headgear) bonus bStr,50*readparam(Weight)/1000; Hope someone can clarify this, thank you!
-
Search: - Id: 434 Name: SG_HATE Description: Hatred of the Sun Moon and Stars MaxLevel: 3 Type: Magic TargetType: Attack DamageFlags: NoDamage: true Range: 9 Hit: Single HitCount: 1 CastCancel: true CastTime: 1000 Requires: SpCost: 100 Replace: - Id: 434 Name: SG_HATE Description: Hatred of the Sun Moon and Stars MaxLevel: 3 Type: Magic TargetType: Attack DamageFlags: NoDamage: true Flags: TargetEmperium: true Range: 9 Hit: Single HitCount: 1 CastCancel: true CastTime: 1000 Requires: SpCost: 100
-
Can sniper skill "True Sight" trigger 1second infravision?
EIysium replied to iraciz's question in Source Requests
Good that it worked for you. Regards! -
Can sniper skill "True Sight" trigger 1second infravision?
EIysium replied to iraciz's question in Source Requests
You comented or erased SN_SIGHT: from line 6904? then copy paste the code above like this: case SN_SIGHT: clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); status_change_start(src,bl,SC_INTRAVISION,10000,skill_lv,0,0,0,skill_get_time2(skill_id,skill_lv),SCSTART_NORATEDEF); break; case SM_ENDURE: clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); break; -
Can sniper skill "True Sight" trigger 1second infravision?
EIysium replied to iraciz's question in Source Requests
Try compile in Release mode i tested in a clean rAthena and works fine too... You comented SN_SIGHT: in skill.cpp before you put the code? try putting the code below: case SM_ENDURE: clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); break; -
Can sniper skill "True Sight" trigger 1second infravision?
EIysium replied to iraciz's question in Source Requests
I've tested and works fine :)! skill_cast_db.txt Search: //-- SN_SIGHT 380,0,0,0,30000,0,0 Change to: //-- SN_SIGHT 380,0,0,0,30000,1000,0 skill.cpp case SN_SIGHT: clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); status_change_start(src,bl,SC_INTRAVISION,10000,skill_lv,0,0,0,skill_get_time2(skill_id,skill_lv),SCSTART_NORATEDEF); break; -
Removal of damage display limit (previously 999,999)
EIysium replied to Haku's question in Client-side Support
When you create your client (.exe), there is an option you can increase attack display. -
How to turn no/off money reward from monster?
EIysium replied to Barterwood's question in Database Support
You mean zeny from mobs? conf/battle/monster.conf zeny_from_mobs: yes > zeny_from_mobs: no -
Greetings, I need help with linear jobs for example: Novice -> Swordman -> Knight -> Rebirth -> High Swordman -> Lord Knight -> Rune Knight (Regular, not Trans). Here's script //===== rAthena Script ======================================= //= Job Master //===== Description: ========================================= //= A fully functional job changer. //===== Additional Comments: ================================= //= 1.0 Initial script. [Euphy] //= 1.1 Fixed reset on Baby job change. //= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. //= 1.3 Kagerou/Oboro added. //= 1.4 Rebellion added. //= 1.5 Added option to disable RebirthClass. [mazvi] //= 1.6 Added option to get job related equipment on change. [Braniff] //= 1.7 Readability changes. Also added BabyExpanded and BabySummoner classes. [Jey] //= 1.8 Added option to disable Baby Novice Only but Baby Class can be Enabled [mazvi] //= 1.9 Migrate/Integrate to Global Functions Platinum Skills. [mazvi] //============================================================ prontera,152,193,4 script Job Master 679,{ function Get_Job_Equip; // Checks if the Player has the required level. // closes if not, returns if yes function Require_Level { if (BaseLevel < getarg(0) || JobLevel < getarg(1)) { [email protected] = getarg(0) - BaseLevel; [email protected] = getarg(1) - JobLevel; mes "Nivel Requerido:"; mes ((getarg(0)>1)? "^bb0000"+getarg(0)+"^000000 (^bb0000Base^000000) / ":"")+"^00bb00"+ getarg(1)+"^000000 (^00bb00Job^000000)"; mes "Necesitas " + (([email protected] > 0) ? "^bb0000"[email protected]+"^000000 niveles base " + (([email protected] > 0) ? "y " : "") : "") + (([email protected] > 0) ? "^00bb00"[email protected]+"^000000 niveles job " : "") + "para continuar."; close; } return; } // Checks if the given eac is a baby class function Is_Baby { return ((getarg(0, eaclass())&EAJL_BABY)>0); } // Checks if the player can change to third class. // Note: This does not include the level checks. function Can_Change_Third { // To change to third class you either need to be: // * Second Class // * Transcendent Second Class // * Baby Second Class if( !.ThirdClass ) return false; // Third job change disabled if( !(eaclass()&EAJL_2) ) return false; // Not second Class if( eaclass()&EAJL_THIRD ) return false; // Already Third Class if( roclass(eaclass()|EAJL_THIRD) < 0 ) return false; // Job has no third Class if( (eaclass()&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE ) return false; // Exp. Super Novice equals 3rd Cls, but has it's own case if( Is_Baby() && (!.BabyClass || !.BabyThird) ) return false; // No Baby (Third) change allowed return true; } function Can_Rebirth { // To rebirth, you need to be: // * Second Class if( !.RebirthClass ) return false; // Rebirth disabled if( !(eaclass()&EAJL_2) ) return false; // Not second Class if( eaclass()&EAJL_UPPER ) return false; // Already Rebirthed if( roclass(eaclass()|EAJL_UPPER) < 0 ) return false; // Job has no transcended class if( Is_Baby() && !.BabyClass ) return false; // No Baby changes allowed return true; } // Checks if the given eac is a first class function Is_First_Cls { return (getarg(0) <= EAJ_TAEKWON); } function Check_Riding { // Note: Why we should always check for Riding: // Mounts are considered as another class, which // would make this NPC bigger just to handle with // those special cases. if (checkfalcon() || checkcart() || checkriding() || ismounting()) { mes "Por favor, retire su " + ((checkfalcon()) ? "Halcon" : "") + ((checkcart()) ? "Carro" : "") + ((checkriding()) ? "Peco" : "") + ((ismounting()) ? "Montura" : "") + " antes de continuar."; close; } return; } function Check_SkillPoints { if (.SkillPointCheck && SkillPoint) { mes "Por favor, use todos sus puntos de habilidad antes de continuar."; close; } return; } // addJobOptions is essentially the same like // setarray [email protected][getarraysize([email protected])],opt1,opt2,...; // It's just easier to read, since we're using it very often function Job_Options { [email protected] = getargcount(); [email protected]_size = getarraysize(getarg(0)); for( [email protected] = 1; [email protected] < [email protected]; [email protected]++) { setarray getelementofarray(getarg(0), [email protected]_size++),getarg([email protected]); } } // Begin of the NPC mes .NPCName$; Check_Riding(); Check_SkillPoints(); // initialisation deletearray [email protected]_opt[0],getarraysize([email protected]_opt); [email protected] = eaclass(); [email protected]_possible = Can_Change_Third(); [email protected]_possible = Can_Rebirth(); [email protected]_eac = [email protected]&EAJ_BASEMASK; [email protected]_eac = [email protected]&EAJ_UPPERMASK; // Note: These are already set in pc.c // BaseClass = roclass([email protected]&EAJ_BASEMASK) which is the players First Class // BaseJob = roclass([email protected]&EAJ_UPPERMASK) which is the players Second Class //dispbottom "Debug: eac ("[email protected]+"), third ("[email protected]_possible+"), rebirth("[email protected]_possible+"), BaseClass ("+BaseClass+"), BaseJob ("+BaseJob+")"; // From here on the jobmaster checks the current class // and fills the the array `[email protected]_opt` with possible // job options for the player. if( [email protected]_possible ) { // Rebirth option (displayed on the top of the menu) Require_Level(.Req_Rebirth[0], .Req_Rebirth[1]); Job_Options([email protected]_opt, Job_Novice_High); } if( [email protected]_possible ) { // Third Job change (displayed below rebirth) Require_Level(.Req_Third[0], .Req_Third[1]); Job_Options([email protected]_opt, roclass([email protected]|EAJL_THIRD)); } if (.SecondExpanded && ([email protected]&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE && // is Super Novice !(eaclass()&EAJL_THIRD) ) { // not already Expanded SN // (Baby) Super Novice to Expanded (Baby) Super Novice if( !Is_Baby([email protected]) || (.BabyClass && .BabyExpanded) ) { // .BabyClass & .BabyExpanded must be enabled if the is a baby Require_Level(.Req_Exp_SNOVI[0], .Req_Exp_SNOVI[1]); Job_Options([email protected]_opt,roclass([email protected]|EAJL_THIRD)); // Expanded SN is "third" cls } } if (.SecondExpanded && (([email protected]&(~EAJL_BABY)) == EAJ_NINJA || // is (Baby) Ninja ([email protected]&(~EAJL_BABY)) == EAJ_GUNSLINGER)) { // is (Baby) Gunslinger // (Baby) Ninja to (Baby) Kagerou / Oboro // (Baby) Gunslinger to (Baby) Rebellion if( !Is_Baby([email protected]) || (.BabyClass && .BabyExpanded) ) { // .BabyClass & .BabyExpanded must be enabled if the is a baby Require_Level(.Req_Exp_NJ_GS[0], .Req_Exp_NJ_GS[1]); // Kagerou, Oboro, Rebellion are considered as a 2-1 class Job_Options([email protected]_opt, roclass([email protected]|EAJL_2_1)); } } // Player is Job_Novice, Job_Novice_High or Job_Baby if ([email protected]_eac == EAJ_NOVICE && [email protected]_eac != EAJ_SUPER_NOVICE) { // MAPID_NOVICE, MAPID_SUPER_NOVICE, MAPID_NOVICE_HIGH, MAPID_BABY Require_Level(.Req_First[0], .Req_First[1]); switch(Class) { case Job_Novice: // First job change Job_Options([email protected]_opt,Job_Swordman, Job_Mage, Job_Archer, Job_Acolyte, Job_Merchant, Job_Thief, Job_Super_Novice, Job_Taekwon, Job_Gunslinger, Job_Ninja); if( .BabyNovice ) Job_Options([email protected]_opt, Job_Baby); break; case Job_Novice_High: // Job change after rebirth if( .LastJob && lastJob ) Job_Options([email protected]_opt, roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); else Job_Options([email protected]_opt, Job_Swordman_High, Job_Mage_High, Job_Archer_High, Job_Acolyte_High, Job_Merchant_High, Job_Thief_High); break; case Job_Baby: if( !.BabyClass ) break; // First job change as a baby Job_Options([email protected]_opt, Job_Baby_Swordman, Job_Baby_Mage, Job_Baby_Archer,Job_Baby_Acolyte, Job_Baby_Merchant, Job_Baby_Thief); if( .BabyExpanded ) Job_Options([email protected]_opt, Job_Super_Baby, Job_Baby_Taekwon, Job_Baby_Gunslinger, Job_Baby_Ninja); if( .BabySummoner ) Job_Options([email protected]_opt, Job_Baby_Summoner); break; default: mes "Se ha producido un error."; close; } } else if( Is_First_Cls([email protected]) || // First Class Is_First_Cls([email protected]&(~EAJL_UPPER)) || // Trans. First Cls (.BabyClass && Is_First_Cls([email protected]&(~EAJL_BABY))) ) { // Baby First Cls // Player is First Class (not Novice) // most jobs should have two options here (2-1 and 2-2) [email protected] = roclass([email protected]|EAJL_2_1); // 2-1 [email protected] = roclass([email protected]|EAJL_2_2); // 2-2 // dispbottom "Debug: Classes: class1 ("[email protected]+"), class2 ("[email protected]+")"; if(.LastJob && lastJob && ([email protected]&EAJL_UPPER)) { // Player is rebirth Cls and linear class changes are enforced Require_Level(.Req_Second[0], .Req_Second[1]); Job_Options([email protected]_opt, lastJob + Job_Novice_High); } else { // Class is not enforced, player can decide. if( [email protected] > 0 ) { // 2-1 Require_Level(.Req_Second[0], .Req_Second[1]); Job_Options([email protected]_opt, [email protected]); } if( [email protected] > 0 ) { // 2-2 Require_Level(.Req_Second[0], .Req_Second[1]); Job_Options([email protected]_opt, [email protected]); } } } // Displaying the Job Menu defined by [email protected]_opt. // [email protected]_opt should not be changed below this line. function Job_Menu; Job_Menu([email protected]_opt); close; // Displays the job menu function Job_Menu { // getarg(0) is the [email protected]_opt array holding all available job changes. function Confirm_Change; while(true) { [email protected]_cnt = getarraysize(getarg(0)); if( [email protected]_cnt <= 0 ) { mes "No hay mas clases disponibles."; close; } [email protected] = 0; // Just a single job class given, no select needed if ([email protected]_cnt > 1) { // Multiple job classes given. Select one and save it to [email protected] // After that confirm [email protected] mes "Selecciona una Clase."; [email protected]$ = ""; for ([email protected] = 0; [email protected] < [email protected]_cnt; [email protected]++) { if( getelementofarray(getarg(0), [email protected]) == Job_Novice_High) [email protected]$ = "^0055FFRenacer^000000"; else [email protected]$ = jobname(getelementofarray(getarg(0), [email protected])); [email protected]$ = [email protected]$ + " ~ " + [email protected]$ + ":"; } [email protected]$ = [email protected]$+" ~ ^777777Cancelar^000000"; [email protected] = select([email protected]$) - 1; if( [email protected] < 0 || [email protected] >= [email protected]_cnt ) close; next; mes .NPCName$; } [email protected] = getelementofarray(getarg(0), [email protected]); if (([email protected] == Job_Super_Novice || [email protected] == Job_Super_Baby) && BaseLevel < .SNovice) { // Special Level Requirement because Super Novice and // Super Baby can both be selected in one of the first class // changes. That's why the Level Requirement is after and not before // the selection. mes "Nivel Base de " + .SNovice + " es necesario para poder convertirse en " + jobname([email protected]) + "."; return; } // Confirm the Class Confirm_Change([email protected], [email protected]_cnt > 1); next; mes .NPCName$; } return; } // Executes the actual jobchange and closes. function Job_Change { [email protected]_cls = getarg(0); next; mes .NPCName$; mes "Has cambiado " + callfunc("F_InsertArticle", jobname([email protected]_cls)) + "!"; if ([email protected]_cls == Job_Novice_High && .LastJob) lastJob = Class; // Saves the lastJob for rebirth jobchange [email protected]_cls; if ([email protected]_cls == Job_Novice_High) resetlvl(1); else if ([email protected]_cls == Job_Baby) { resetstatus; resetskill; set SkillPoint,0; } specialeffect2 EF_ANGEL2; specialeffect2 EF_ELECTRIC; if (.Platinum) callfunc "F_GetPlatinumSkills"; if (.GetJobEquip) Get_Job_Equip(); close; // Always closes after the change } function Confirm_Change { // Player confirms he want to change into [email protected] [email protected] = getarg(0, -1); [email protected] = getarg(1, false); if( [email protected] < 0 ) { mes "Unknown Class Error."; close; } mes "Estas seguro de querer cambiar a la clase ^0055FF"+jobname([email protected])+"^000000?"; [email protected]_option$ = " ~ Cambiar a la clase ^0055FF"+jobname([email protected])+"^000000"; if( [email protected] == Job_Novice_High) [email protected]_option$ = " ~ ^0055FFRenacer^000000"; if (select([email protected]_option$+": ~ ^777777" + (([email protected]) ?"Atras" : "Cancelar") + "^000000") == 1) { Job_Change([email protected]); } if ([email protected]) close; // "Cancel" pressed return; } // Function which gives a job related item to the player // the items are the rewards from the original job change quests function Get_Job_Equip { // Note: The item is dropping, when the player can't hold it. // But that's better than not giving the item at all. [email protected] = eaclass(); if( [email protected]&EAJL_THIRD ) { // Third Class Items getitem 2795,1; // Green Apple Ring for every 3rd Class switch(BaseJob) { // BaseJob of Third Cls // For Normal Third, Baby Third and Transcended Third Cls case Job_Knight: getitem 5746,1; break; // Rune Circlet [1] case Job_Wizard: getitem 5753,1; break; // Magic Stone Hat [1] case Job_Hunter: getitem 5748,1; break; // Sniper Goggle [1] case Job_Priest: getitem 5747,1; break; // Mitra [1] case Job_Blacksmith: getitem 5749,1; break; // Driver Band [1] case Job_Assassin: getitem 5755,1; break; // Silent Executor [1] case Job_Crusader: getitem 5757,1; break; // Dip Schmidt Helm [1] case Job_Sage: getitem 5756,1; break; // Wind Whisper [1] case Job_Bard: getitem 5751,1; break; // Maestro Song's Hat [1] case Job_Dancer: getitem 5758,1; break; // Dying Swan [1] case Job_Monk: getitem 5754,1; break; // Blazing Soul [1] case Job_Alchemist: getitem 5752,1; break; // Midas Whisper[1] case Job_Rogue: getitem 5750,1; // Shadow Handicraft [1] getitem 6121,1; // Makeover Brush getitem 6122,1; break; // Paint Brush } } else if ([email protected]&EAJL_2) { // Second Class (And not Third Class) switch(BaseJob) { // Second Class case Job_Knight: getitem 1163,1; break; // Claymore [0] case Job_Priest: getitem 1522,1; break; // Stunner [0] case Job_Wizard: getitem 1617,1; break; // Survivor's Rod [0] case Job_Blacksmith: getitem 1360,1; break; // Two-Handed-Axe [1] case Job_Hunter: getitem 1718,1; break; // Hunter Bow [0] case Job_Assassin: getitem 1254,1; break; // Jamadhar [0] case Job_Crusader: getitem 1410,1; break; // Lance [0] case Job_Monk: getitem 1807,1; break; // Fist [0] case Job_Sage: getitem 1550,1; break; // Book [3] case Job_Rogue: getitem 1222,1; break; // Damascus [1] case Job_Alchemist: getitem 1126,1; break; // Saber [2] case Job_Bard: getitem 1907,1; break; // Guitar [0] case Job_Dancer: getitem 1960,1; break; // Whip [1] case Job_Super_Novice: getitem 1208,1; break; // Main Gauche [4] case Job_Gunslinger: getitem 13101,1; break; // Six Shooter [2] case Job_Ninja: getitem 13010,1; break; // Asura [2] case Job_Star_Gladiator: getitem 1550,1; break; // Book [3] case Job_Soul_Linker: getitem 1617,1; break; // Survivor's Rod [0] } } else { // Neither Second or Third Cls // => First Cls or not covered by the switch switch(BaseClass) { // First Class case Job_Swordman: getitem 1108,1; break; // Blade [4] case Job_Mage: getitem 1602,1; break; // Rod [4] case Job_Archer: getitem 1705,1; break; // Composite Bow [4] case Job_Acolyte: getitem 1505,1; break; // Mace [4] case Job_Merchant: getitem 1302,1; break; // Axe [4] case Job_Thief: getitem 1208,1; break; // Main Gauche [4] } } return; } OnInit: // Initialisation, do not edit these .NPCName$ = "[^6F09B3Job Master^000000]"; // Settings .ThirdClass = true; // Enable third classes? .RebirthClass = true; // Enable rebirth classes? .SecondExpanded = true; // Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion? .BabyNovice = false; // Enable Baby novice classes? Disable it if you like player must have parent to get job baby. .BabyClass = false; // Enable Baby classes? .BabyThird = false; // Enable Baby third classes? .BabyExpanded = false; // Enable Baby Expanded classes: Ex. Baby Ninja, Baby Taekwon, etc. .BabySummoner = false; // Enable Baby Summoner? .LastJob = true; // Enforce linear class changes? .SkillPointCheck = false; // Force player to use up all skill points? .Platinum = true; // Get platinum skills automatically? .GetJobEquip = false; // Get job equipment (mostly weapons) on job change? // Level Requirements setarray .Req_First[0],1,10; // Minimum base level, job level to turn into 1st class setarray .Req_Second[0],1,40; // Minimum base level, job level to turn into 2nd class setarray .Req_Rebirth[0],99,50; // Minimum base level, job level to rebirth setarray .Req_Third[0],99,50; // Minimum base level, job level to change to third class setarray .Req_Exp_NJ_GS[0],99,70; // Minimum base level, job level to turn into Expanded Ninja and Gunslinger setarray .Req_Exp_SNOVI[0],99,99; // Minimum base level, job level to turn into Expanded Super Novice .SNovice = 45; // Minimum base level to turn into Super Novice // Setting adjustments by PACKETVER if( PACKETVER < 20161207 ) { if( .BabyExpanded ) debugmes "jobmaster: BabyExpanded is disabled due to outdated PACKETVER."; if( .BabySummoner ) debugmes "jobmaster: BabySummoner is disabled due to outdated PACKETVER."; .BabyExpanded = false; .BabySummoner = false; } end; }
-
You can enable in db/pre-re or re/skill_db.txt 16 inf3 (skill information 3): 0x000010 - skill that could hit emperium Search 434,9,6,1,0,0x1,0,3,1,yes,0,0,0,magic,0,0x0, SG_HATE,Hatred of the Sun Moon and Stars replace: 434,9,6,1,0,0x1,0,3,1,yes,0,0,0,magic,0,0x10, SG_HATE,Hatred of the Sun Moon and Stars
-
You searched by skill, not for SC_SKE. Search in src/map/status.ccp: if(sc->data[SC_SKE]) batk += batk * 3; if(sc->data[SC_SKE]) watk += watk * 3; and change *3 value for *2 or *1 whatever you want to do. Don't forget recompile.