Jump to content

Sindit

Members
  • Posts

    22
  • Joined

  • Last visited

Everything posted by Sindit

  1. If possible, create a new translation on Translate Client patch to translate that to english (2018-01-24bRagexeRE): 25 64 20 BD C3 B0 A3 C0 CC 20 B0 E6 B0 FA C7 DF BD C0 B4 CF B4 D9 2E 00 B0 FA B5 B5 C7 D1 20 B0 D4 C0 D3 C0 CC BF EB C0 BA 20 C1 A4 BB F3 C0 FB C0 CE 20 C0 CF BB F3 BB FD C8 B0 BF A1 20 C1 F6 C0 E5 C0 BB 20 C1 D9 20 BC F6 20 C0 D6 BD C0 B4 CF B4 D9 ANSI: %d ½Ã°£ÀÌ °æ°úÇß½À´Ï´Ù..°úµµÇÑ °ÔÀÓÀÌ¿ëÀº Á¤»óÀûÀÎ ÀÏ»ó»ýÈ°¿¡ ÁöÀåÀ» ÁÙ ¼ö ÀÖ½À´Ï´Ù. UTF-8: %d 시간이 경과했습니다..과도한 게임이용은 정상적인 일상생활에 지장을 줄 수 있습니다. Offsets: 008FD990 - 008FD9E0 Another suggestion: If possible, create a new patch to use "/AI/" folder instead of "/AI_sakray/". Thanks for the NEMO update. I appreciated. <3
  2. I didn't understand you very well... Do you want to use that script to change the job anytime? If yes, try this: prontera,150,150,4 script Starter NPC 501,{ /* if (#server_start) { mes "[Starter NPC]"; mes "You can only use my services"; mes "once per account, sorry."; close; } */ setarray .@jobs, Job_Rune_Knight_T,Job_Warlock_T,Job_Ranger_T,Job_Arch_Bishop_T,Job_Mechanic_T,Job_Guillotine_Cross_T, Job_Royal_Guard_T,Job_Sorcerer_T,((Sex)?Job_Minstrel_T:Job_Wanderer_T),Job_Sura_T,Job_Genetic_T,Job_Shadow_Chaser_T, Job_Gunslinger,Job_Taekwon,Job_Star_Gladiator,Job_Soul_Linker,Job_Super_Novice_E,((Sex)?Job_Kagerou:Job_Oboro); set .@size, getarraysize(.@jobs); for(set .@i,0; .@i<.@size; set .@i,.@i+1) set .@menu$,.@menu$+jobname(.@jobs[.@i])+":"; mes "[Starter NPC]"; mes "Welcome to Ragnarok!"; mes "Please select a job."; next; set .@i, select(.@menu$)-1; mes "[Starter NPC]"; mes "Are you sure you want to switch to the "+jobname(.@jobs[.@i])+" class?"; next; if(select("Yes, I'm sure.:No, let me pick again.") == 2) { mes "[Starter NPC]"; mes "Okay, take your time."; close; } mes "[Starter NPC]"; mes "Job changed!"; mes "Please take some apples, too."; mes "They'll come in handy."; emotion e_lv2; //set #server_start,1; jobchange .@jobs[.@i]; getitem 512,100; close; }
  3. The actual percentage of refinement is on refine_db.yml right inside your database folder (.../db/re/refine_db.yml for example). To do this (in database) without excluding other materials or replace it by another, you'll have to create a new "Type" of refinement (I did this to add this materials to my Refine UI without excluing anothers). Try this code made by me: function script omnirefine { .@name$ = getarg(0); /// Custom chances 1 to 20. setarray .@refine_chances[1], 100, 100, 100, 100, 95, 80, 80, 50, 50, 35, 20, 20, 16, 16, 15, 15, 14, 14, 10, 10; /// Equipment position names (Don't edit that order). setarray .@equip_name$[1],"Head","Middle","Lower","Armor","Weapon","Shield","Garment","Shoes","Accessory 1","Accessory 2"; /// Weapon material .@weapon_material = 6438; // Omni-Oridecon /// Armor material .@armor_material = 6439; // Mega-Elunium disable_items; mes "["+ .@name$ +"]"; mes "I am the best Armsmith ever!"; mes "I don't refine with normal, boring materials."; mes "I only refine items using ^003366" + getitemname(.@weapon_material) + "^000000 and ^003366" + getitemname(.@armor_material) + "^000000."; next; mes "["+ .@name$ +"]"; mes "Anyway, you may use my services if you have any of that materials."; mes "What do you want me to refine?"; next; setarray .@equip_pos[1],EQI_HEAD_TOP,EQI_HEAD_MID,EQI_HEAD_LOW,EQI_ARMOR,EQI_HAND_R,EQI_HAND_L,EQI_GARMENT,EQI_SHOES,EQI_ACC_R,EQI_ACC_L; for (.@i = 1; .@i <= getarraysize(.@equip_pos); ++.@i) { if (getequipisequiped(.@equip_pos[.@i])) .@menu$ += getequipname(.@equip_pos[.@i]); else .@menu$ += "^777777" + .@equip_name$[.@i] + " - " + "[Unavailable]" + "^000000"; .@menu$ += ":"; } .@part = .@equip_pos[select(.@menu$)]; .@equip_id = getequipid(.@part); .@refinerycnt = getequiprefinerycnt(.@part); if (!getequipisequiped(.@part)) { //custom check mes "["+ .@name$ +"]"; mes "You're not wearing"; mes "anything there that"; mes "I can refine."; emotion ET_FRET; close; } if (!getequipisenableref(.@part)) { mes "["+ .@name$ +"]"; mes "I don't think I can"; mes "refine this item at all..."; close; } if (.@refinerycnt >= 20) { //custom check mes "["+ .@name$ +"]"; mes "I can't refine this"; mes "any more. This is as"; mes "refined as it gets!"; close; } if (getiteminfo(.@equip_id,2) == 5) .@material = .@weapon_material; else if (getiteminfo(.@equip_id,2) == 4) .@material = .@armor_material; if ((getequipweaponlv(.@part) >= 1) && (getequipweaponlv(.@part) <= 4)) { .@article$ = "a"; .@type$ = "weapon"; } else { .@article$ = "an"; .@type$ = "armor"; } mes "["+ .@name$ +"]"; mes "Hmm " + .@article$ + " " + .@type$ + ", is that ok?"; mes "If you want to refine this " + .@type$ + ","; mes "I will need 1 ^003366" + getitemname(.@material) + "^000000."; mes "Are you sure you want to continue?"; next; if(select("Yes:No") == 2){ mes "["+ .@npc_name$ +"]"; mes "Hm... if you mind... never mind..."; close; } while (1) { .@refinerycnt = getequiprefinerycnt(.@part); if (countitem(.@material) < 1) { mes "["+ .@name$ +"]"; mes "Hm. You don't seem to have enough "+getitemname(.@material)+"."; mes "Please come back when you have them."; close; } delitem .@material,1; // anti-hack if (callfunc("F_IsEquipIDHack", .@part, .@equip_id) || callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) { mes "["+ .@name$ +"]"; emotion ET_FRET; mes "Wait a second..."; mes "Do you think I'm stupid?!"; mes "You switched the item while I wasn't looking! Get out of here!"; close; } if (.@refine_chances[.@refinerycnt+1] > rand(100)) { mes "["+ .@name$ +"]"; mes "Clang! Clang! Clang! Clang!"; successrefitem .@part; next; emotion ET_BEST; mes "["+ .@name$ +"]"; mes "Good! Succes!!!"; mes "I am the best Armsmith."; next; } else { if (rand(100) < 80) { mes "["+ .@name$ +"]"; mes "Clang! Clang! Clang! Clang!"; downrefitem .@part,0; // Only for the fail refinement animation next; emotion (!rand(5))?ET_MONEY:ET_HUK; mes "["+ .@name$ +"]"; mes "Ahhh!!!"; next; mes "["+ .@name$ +"]"; mes "Oh my god!"; mes "The upgrade level has dropped..."; } else { mes "["+ .@name$ +"]"; mes "Clang! Clang! Clang!"; downrefitem .@part,0; // Only for the fail refinement animation next; emotion (!rand(5))?ET_MONEY:ET_HUK; mes "["+ .@name$ +"]"; mes "Hmmm!"; next; mes "["+ .@name$ +"]"; mes "Oh my! I've failed to refine stuff..."; mes "I didn't mean it!"; } mes "I could have made a mistake even though I am the best Armsmith ever."; mes "It just wasn't meant to be."; next; mes "["+ .@name$ +"]"; mes "I will do a better job next time! Don't worry!"; next; } mes "["+ .@name$ +"]"; mes "Do you want to refine again?"; next; if(select("Yes:No") == 2){ mes "["+ .@npc_name$ +"]"; mes "Hm... if you mind... never mind..."; close; } } return; } prt_in,56,54,3 script Refiner#1 826,{ callfunc "omnirefine","^0000FFBlessed Refiner^000000"; end; }
  4. No, it's nothing wrong with your src. Btw, here's your code fixed and tested: // Weapon/Armor Refiners //============================================================ prt_in,63,60,0 script Hollgrehenn 85,{ callfunc "refinemain","Hollgrehenn",0; end; } morocc_in,73,38,6 script Aragham 99,{ callfunc "refinemain","Aragham",0; end; } payon,144,173,5 script Antonio 88,{ callfunc "refinemain","Antonio",0; end; } alberta_in,28,58,0 script Fredrik 85,{ callfunc "refinemain","Fredrik",0; end; } yuno_in01,171,21,4 script Lambert 88,{ callfunc "refinemain","Lambert",0; end; } ein_in01,24,87,5 script Manthasman 826,{ callfunc "refinemain","Manthasman Pruhag",0; end; } lhz_in02,282,20,7 script Fulerr 869,{ callfunc "refinemain","Fulerr",0; end; } //============================================================ //= Main Refiner Function //============================================================ //= To allow auto safe refining/multiple refining set the //= second argument to '1' in the function call. //= If you enable this function, be sure to edit the value of //= .@safe to the max safe refine in refine_db.txt as well. //============================================================ function script refinemain { disable_items; .@npc_name$ = getarg(0); set .@features,getarg(1); mes "["+ .@npc_name$ +"]"; mes "I'm the Armsmith."; mes "I can refine all kinds of weapons, armor and equipment, so let me"; mes "know what you want me to refine."; next; setarray .@equip_pos[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_R, EQI_ACC_L, EQI_HEAD_MID, EQI_HEAD_LOW; setarray .@position$[1], "Head", "Body", "Left hand", "Right hand", "Robe", "Shoes", "Accessory 1", "Accessory 2", "Head 2", "Head 3"; for(.@i = 1; .@i <= getarraysize(.@position$); .@i++) { if(getequipisequiped(.@equip_pos[.@i])) { .@menu$ += .@position$[.@i] + "-" + "[" + getequipname(.@equip_pos[.@i]) + "]"; .@equipped = 1; } set .@menu$, .@menu$ + ":"; } .@select = select(.@menu$); .@part = .@equip_pos[.@select]; if (.@equipped == 0) { mes "["+ .@npc_name$ +"]"; mes "I don't think I can refine any items you have..."; close; } if(!getequipisequiped(.@part)) { //custom check mes "["+ .@npc_name$ +"]"; mes "You're not wearing"; mes "anything there that"; mes "I can refine."; emotion e_an; close; } //Check if the item is refinable... if(!getequipisenableref(.@part)) { mes "["+ .@npc_name$ +"]"; mes "I don't think I can"; mes "refine this item at all..."; close; } //Check to see if the items is already +10 if(getequiprefinerycnt(.@part) >= 10) { mes "["+ .@npc_name$ +"]"; mes "I can't refine this"; mes "any more. This is as"; mes "refined as it gets!"; close; } set .@refineitemid, getequipid(.@part); // save id of the item set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count switch(getequipweaponlv(.@part)){ case 0: //Refine Armor set .@price,2000; set .@material,985; //Elunium set .@safe,4; break; case 1: //Refine Level 1 Weapon set .@price,50; set .@material,1010; //Phracon set .@safe,7; break; case 2: //Refine Level 2 Weapon set .@price,200; set .@material,1011; //Emveretarcon set .@safe,6; break; case 3: //Refine Level 3 Weapon set .@price,5000; set .@material,984; //Oridecon set .@safe,5; break; case 4: //Refine Level 4 Weapon set .@price,20000; set .@material,984; //Oridecon set .@safe,4; break; case 5: //Refine other stuff? set .@price,2000; set .@material,985; //Elunium set .@safe,4; break; } // If the VIP system is enabled, the prices for non-VIP players are considerably higher. if (VIP_SCRIPT && !vip_status(1)) { switch(getequipweaponlv(.@part)) { case 0: set .@price, .@price * 10; break; case 1: set .@price, .@price * 40; break; case 2: set .@price, .@price * 50; break; case 3: set .@price, .@price * 2; break; case 4: set .@price, .@price * 2; break; case 5: set .@price, .@price * 10; break; } } if(.@features != 1) { mes "["+ .@npc_name$ +"]"; mes "To refine this I need"; mes "one ^003366"+getitemname(.@material)+"^000000 and"; mes "a service fee of " + .@price + " Zeny."; mes "Do you really wish to continue?"; next; if(select("Yes:No") == 2){ mes "["+ .@npc_name$ +"]"; mes "Yeah..."; mes "There's no need to"; mes "rush. Take your time."; close; } if(getequippercentrefinery(.@part) < 100) { mes "["+ .@npc_name$ +"]"; mes "Oh no! If I continue to"; mes "refine this, there's a risk it could"; switch(.@material) { case 985: mes "be destroyed! That means that ^FF0000this equipment^000000, and ^FF0000any cards^000000 or special properties added to this armor, ^FF0000will be gone^000000."; break; default: mes "be destroyed, and you'd ^FF0000lose the weapon^000000, any ^FF0000cards in the weapon^000000,"; mes "or any added special properties."; break; } next; mes "["+getarg(0)+"]"; mes "I can't make it any clearer."; mes "Once a weapon is destroyed,"; mes "there's no getting it back."; mes "You really have a chance to"; mes "^FF0000lose this weapon^000000 forever."; mes "Do you still want to refine?"; next; if(select("Yes:No") == 2){ mes "["+ .@npc_name$ +"]"; mes "I completely agree..."; mes "I might be a great refiner, but sometimes even I make mistakes."; close; } } if((countitem(.@material) < 1) || (Zeny < .@price)) { mes "["+ .@npc_name$ +"]"; mes "You don't seem to have"; mes "enough Zeny or "+getitemname(.@material)+"..."; mes "Go get some more. I'll be"; mes "here all day if you need me."; close; } set Zeny, Zeny-.@price; delitem .@material,1; // anti-hack if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) || callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) { mes "["+ .@npc_name$ +"]"; emotion e_an; mes "Wait a second..."; mes "Do you think I'm stupid?!"; mes "You switched the item while I wasn't looking! Get out of here!"; close; } if(getequippercentrefinery(.@part) <= rand(100)) { failedrefitem .@part; mes "["+ .@npc_name$ +"]"; emotion (!rand(5))?e_cash:e_omg; set .@lose,rand(1,3); if (.@lose == 1) { mes "OH! MY GOD!"; mes "Damn it! Not again!"; mes "I'm terribly sorry, but you know practice does make perfect."; mes "Um, right? Heh heh..."; } else if(.@lose == 2) { mes "Nooooooo!"; mes "It broke!"; mes "I-I'm sorry!"; } else { mes "Crap!"; mes "It couldn't take"; mes "much more tempering!"; mes "Sorry about this..."; } close; } mes "["+getarg(0)+"]"; successrefitem .@part; emotion e_heh; set .@win,rand(1,3); if (.@win == 1) { mes "Perfect!"; mes "Heh heh!"; mes "Once again,"; mes "flawless work"; mes "from the master~"; } else if(.@win == 2) { mes "Success...!"; mes "Yet again, my amazing"; mes "talent truly dazzles"; mes "and shines today."; } else { mes "Heh heh!"; mes "I'm all done."; mes "No doubt, my work is"; mes "to your satisfaction."; mes "Sheer, utter perfection~"; } close; } // New Refining Functions ======================== if(getequiprefinerycnt(.@part) < .@safe) { mes "["+ .@npc_name$ +"]"; mes "I can refine this to the safe limit or a desired number of times. It's your choice."; next; set .@menu2,select("To the safe limit, please.","I'll decide how many times.","I've changed my mind..."); } else set .@menu2,2; switch(.@menu2){ case 1: set .@refinecnt,.@safe - getequiprefinerycnt(.@part); break; case 2: next; mes "["+ .@npc_name$ +"]"; mes "How many times would you like me to refine your item?"; next; input .@refinecnt; set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part); if (.@refinecnt < 1 || .@refinecheck > 10) { mes "["+ .@npc_name$ +"]"; mes "I can't refine this item that many times."; close; } if(.@refinecheck > .@safe) { set .@refinecheck,.@refinecheck - .@safe; mes "["+ .@npc_name$ +"]"; mes "This will try to refine the equipment " + .@refinecheck + " times past the safe limit. Your equipment may be destroyed... is that ok?"; next; if(select("Yes...","No...") == 2){ mes "["+ .@npc_name$ +"]"; mes "You said so... So be it."; close; } } break; case 3: next; mes "["+ .@npc_name$ +"]"; mes "You said so... So be it."; close; } set .@fullprice,.@price * .@refinecnt; mes "["+ .@npc_name$ +"]"; mes "That will cost you " + .@refinecnt + " " + getitemname(.@material) + " and " + .@fullprice + " Zeny. Is that ok?"; next; if(select("Yes","No...") == 2){ mes "["+ .@npc_name$ +"]"; mes "You said so... So be it."; close; } if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) { mes "["+ .@npc_name$ +"]"; mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes."; close; } set Zeny, Zeny - .@fullprice; delitem .@material,.@refinecnt; while(.@refinecnt){ if (getequipisequiped(.@part) == 0) { mes "["+ .@npc_name$ +"]"; mes "Look here... you don't have any items on..."; close; } if (getequipid(.@part) != .@refineitemid || (.@menu2 == 1 && getequippercentrefinery(.@part) < 100)) { mes "["+ .@npc_name$ +"]"; mes "Clang... No, but did you imagine I could be so stupid?!"; mes "You changed it..."; mes "Get out before I stun you with my Hammer!!"; close; } mes "Clang, clang!!!"; if(.@menu2 == 2 && getequippercentrefinery(.@part) <= rand(100)) { failedrefitem .@part; emotion e_omg; mes "["+ .@npc_name$ +"]"; mes "WAHHHH!!! I'm so sorry... I warned you this could happen..."; set .@refinecnt,.@refinecnt - 1; if(.@refinecnt == 0) close; mes "Here's the unused Zeny and materials back..."; getitem .@material,.@refinecnt; set .@fullprice,.@refinecnt * .@price; set Zeny, Zeny + .@fullprice; close; } successrefitem .@part; emotion e_no1; set .@refinecnt,.@refinecnt - 1; next; } mes "["+ .@npc_name$ +"]"; mes "All finished... Come again soon."; close; } Remember: This code is testing if the equipment already has an equal or higher refine than 10. And if that condition are true, the refiner will stop dialog (lines 81-87).
  5. You are having troubles because the order of how the for loop checks the equipments isn't equal to your personal order. Try this: // Weapon/Armor Refiners //============================================================ prt_in,63,60,0 script Hollgrehenn 85,{ callfunc "refinemain","Hollgrehenn",0; end; } morocc_in,73,38,6 script Aragham 99,{ callfunc "refinemain","Aragham",0; end; } payon,144,173,5 script Antonio 88,{ callfunc "refinemain","Antonio",0; end; } alberta_in,28,58,0 script Fredrik 85,{ callfunc "refinemain","Fredrik",0; end; } yuno_in01,171,21,4 script Lambert 88,{ callfunc "refinemain","Lambert",0; end; } ein_in01,24,87,5 script Manthasman 826,{ callfunc "refinemain","Manthasman Pruhag",0; end; } lhz_in02,282,20,7 script Fulerr 869,{ callfunc "refinemain","Fulerr",0; end; } //============================================================ //= Main Refiner Function //============================================================ //= To allow auto safe refining/multiple refining set the //= second argument to '1' in the function call. //= If you enable this function, be sure to edit the value of //= .@safe to the max safe refine in refine_db.txt as well. //============================================================ function script refinemain { disable_items; .@npc_name$ = getarg(0); set .@features,getarg(1); mes "["+ .@npc_name$ +"]"; mes "I'm the Armsmith."; mes "I can refine all kinds of weapons, armor and equipment, so let me"; mes "know what you want me to refine."; next; setarray .@equip_pos[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, ,EQI_GARMENT, EQI_SHOES, EQI_ACC_R, EQI_ACC_L, EQI_HEAD_MID, EQI_HEAD_LOW; setarray .@position$[1], "Head", "Body", "Left hand", "Right hand", "Robe", "Shoes", "Accessory 1", "Accessory 2", "Head 2", "Head 3"; for(.@i = 1; .@i <= getarraysize(.@position$); .@i++) { if(getequipisequiped(.@equip_pos[.@i])) { .@menu$ += .@position$[.@i] + "-" + "[" + getequipname(.@i) + "]"; .@equipped = 1; } set .@menu$, .@menu$ + ":"; } if (.@equipped == 0) { mes "["+ .@npc_name$ +"]"; mes "I don't think I can refine any items you have..."; close; } .@select = select(.@menu$); .@part = .@equip_pos[.@select]; if(!getequipisequiped(.@part)) { //custom check mes "["+ .@npc_name$ +"]"; mes "You're not wearing"; mes "anything there that"; mes "I can refine."; emotion e_an; close; } //Check if the item is refinable... if(!getequipisenableref(.@part)) { mes "["+ .@npc_name$ +"]"; mes "I don't think I can"; mes "refine this item at all..."; close; } //Check to see if the items is already +10 if(getequiprefinerycnt(.@part) >= 10) { mes "["+ .@npc_name$ +"]"; mes "I can't refine this"; mes "any more. This is as"; mes "refined as it gets!"; close; } set .@refineitemid, getequipid(.@part); // save id of the item set .@refinerycnt, getequiprefinerycnt(.@part); //save refinery count switch(getequipweaponlv(.@part)){ case 0: //Refine Armor set .@price,2000; set .@material,985; //Elunium set .@safe,4; break; case 1: //Refine Level 1 Weapon set .@price,50; set .@material,1010; //Phracon set .@safe,7; break; case 2: //Refine Level 2 Weapon set .@price,200; set .@material,1011; //Emveretarcon set .@safe,6; break; case 3: //Refine Level 3 Weapon set .@price,5000; set .@material,984; //Oridecon set .@safe,5; break; case 4: //Refine Level 4 Weapon set .@price,20000; set .@material,984; //Oridecon set .@safe,4; break; case 5: //Refine other stuff? set .@price,2000; set .@material,985; //Elunium set .@safe,4; break; } // If the VIP system is enabled, the prices for non-VIP players are considerably higher. if (VIP_SCRIPT && !vip_status(1)) { switch(getequipweaponlv(.@part)) { case 0: set .@price, .@price * 10; break; case 1: set .@price, .@price * 40; break; case 2: set .@price, .@price * 50; break; case 3: set .@price, .@price * 2; break; case 4: set .@price, .@price * 2; break; case 5: set .@price, .@price * 10; break; } } if(.@features != 1) { mes "["+ .@npc_name$ +"]"; mes "To refine this I need"; mes "one ^003366"+getitemname(.@material)+"^000000 and"; mes "a service fee of " + .@price + " Zeny."; mes "Do you really wish to continue?"; next; if(select("Yes:No") == 2){ mes "["+ .@npc_name$ +"]"; mes "Yeah..."; mes "There's no need to"; mes "rush. Take your time."; close; } if(getequippercentrefinery(.@part) < 100) { mes "["+ .@npc_name$ +"]"; mes "Oh no! If I continue to"; mes "refine this, there's a risk it could"; switch(.@material) { case 985: mes "be destroyed! That means that ^FF0000this equipment^000000, and ^FF0000any cards^000000 or special properties added to this armor, ^FF0000will be gone^000000."; break; default: mes "be destroyed, and you'd ^FF0000lose the weapon^000000, any ^FF0000cards in the weapon^000000,"; mes "or any added special properties."; break; } next; mes "["+getarg(0)+"]"; mes "I can't make it any clearer."; mes "Once a weapon is destroyed,"; mes "there's no getting it back."; mes "You really have a chance to"; mes "^FF0000lose this weapon^000000 forever."; mes "Do you still want to refine?"; next; if(select("Yes:No") == 2){ mes "["+ .@npc_name$ +"]"; mes "I completely agree..."; mes "I might be a great refiner, but sometimes even I make mistakes."; close; } } if((countitem(.@material) < 1) || (Zeny < .@price)) { mes "["+ .@npc_name$ +"]"; mes "You don't seem to have"; mes "enough Zeny or "+getitemname(.@material)+"..."; mes "Go get some more. I'll be"; mes "here all day if you need me."; close; } set Zeny, Zeny-.@price; delitem .@material,1; // anti-hack if (callfunc("F_IsEquipIDHack", .@part, .@refineitemid) || callfunc("F_IsEquipRefineHack", .@part, .@refinerycnt)) { mes "["+ .@npc_name$ +"]"; emotion e_an; mes "Wait a second..."; mes "Do you think I'm stupid?!"; mes "You switched the item while I wasn't looking! Get out of here!"; close; } if(getequippercentrefinery(.@part) <= rand(100)) { failedrefitem .@part; mes "["+ .@npc_name$ +"]"; emotion (!rand(5))?e_cash:e_omg; set .@lose,rand(1,3); if (.@lose == 1) { mes "OH! MY GOD!"; mes "Damn it! Not again!"; mes "I'm terribly sorry, but you know practice does make perfect."; mes "Um, right? Heh heh..."; } else if(.@lose == 2) { mes "Nooooooo!"; mes "It broke!"; mes "I-I'm sorry!"; } else { mes "Crap!"; mes "It couldn't take"; mes "much more tempering!"; mes "Sorry about this..."; } close; } mes "["+getarg(0)+"]"; successrefitem .@part; emotion e_heh; set .@win,rand(1,3); if (.@win == 1) { mes "Perfect!"; mes "Heh heh!"; mes "Once again,"; mes "flawless work"; mes "from the master~"; } else if(.@win == 2) { mes "Success...!"; mes "Yet again, my amazing"; mes "talent truly dazzles"; mes "and shines today."; } else { mes "Heh heh!"; mes "I'm all done."; mes "No doubt, my work is"; mes "to your satisfaction."; mes "Sheer, utter perfection~"; } close; } // New Refining Functions ======================== if(getequiprefinerycnt(.@part) < .@safe) { mes "["+ .@npc_name$ +"]"; mes "I can refine this to the safe limit or a desired number of times. It's your choice."; next; set .@menu2,select("To the safe limit, please.","I'll decide how many times.","I've changed my mind..."); } else set .@menu2,2; switch(.@menu2){ case 1: set .@refinecnt,.@safe - getequiprefinerycnt(.@part); break; case 2: next; mes "["+ .@npc_name$ +"]"; mes "How many times would you like me to refine your item?"; next; input .@refinecnt; set .@refinecheck,.@refinecnt + getequiprefinerycnt(.@part); if (.@refinecnt < 1 || .@refinecheck > 10) { mes "["+ .@npc_name$ +"]"; mes "I can't refine this item that many times."; close; } if(.@refinecheck > .@safe) { set .@refinecheck,.@refinecheck - .@safe; mes "["+ .@npc_name$ +"]"; mes "This will try to refine the equipment " + .@refinecheck + " times past the safe limit. Your equipment may be destroyed... is that ok?"; next; if(select("Yes...","No...") == 2){ mes "["+ .@npc_name$ +"]"; mes "You said so... So be it."; close; } } break; case 3: next; mes "["+ .@npc_name$ +"]"; mes "You said so... So be it."; close; } set .@fullprice,.@price * .@refinecnt; mes "["+ .@npc_name$ +"]"; mes "That will cost you " + .@refinecnt + " " + getitemname(.@material) + " and " + .@fullprice + " Zeny. Is that ok?"; next; if(select("Yes","No...") == 2){ mes "["+ .@npc_name$ +"]"; mes "You said so... So be it."; close; } if(countitem(.@material) < .@refinecnt || Zeny < .@fullprice) { mes "["+ .@npc_name$ +"]"; mes "Is that all you got? Unfortunately I can't work for you at a lower price. Try putting yourself in my shoes."; close; } set Zeny, Zeny - .@fullprice; delitem .@material,.@refinecnt; while(.@refinecnt){ if (getequipisequiped(.@part) == 0) { mes "["+ .@npc_name$ +"]"; mes "Look here... you don't have any items on..."; close; } if (getequipid(.@part) != .@refineitemid || (.@menu2 == 1 && getequippercentrefinery(.@part) < 100)) { mes "["+ .@npc_name$ +"]"; mes "Clang... No, but did you imagine I could be so stupid?!"; mes "You changed it..."; mes "Get out before I stun you with my Hammer!!"; close; } mes "Clang, clang!!!"; if(.@menu2 == 2 && getequippercentrefinery(.@part) <= rand(100)) { failedrefitem .@part; emotion e_omg; mes "["+ .@npc_name$ +"]"; mes "WAHHHH!!! I'm so sorry... I warned you this could happen..."; set .@refinecnt,.@refinecnt - 1; if(.@refinecnt == 0) close; mes "Here's the unused Zeny and materials back..."; getitem .@material,.@refinecnt; set .@fullprice,.@refinecnt * .@price; set Zeny, Zeny + .@fullprice; close; } successrefitem .@part; emotion e_no1; set .@refinecnt,.@refinecnt - 1; next; } mes "["+ .@npc_name$ +"]"; mes "All finished... Come again soon."; close;
  6. Instead of use getcharid(0, $kill$), you just need to use $kill$ ($kill$ is actually saving the character id (char_id) and not the character name (name), so you don't need to use getcharid). Try this: OnClock0000: set .prize, 7227; set .amount, 5; query_sql "SELECT `char_id` FROM `char_reg_num` ORDER BY `key` = 'kills' DESC LIMIT 1", $kill$; query_sql "SELECT `name` FROM `char` WHERE `char_id`="+$kill$+"", .@name$; if (!isloggedin(getcharid(3, .@name$)) query_sql "INSERT INTO `inventory` (`char_id`, `nameid`, `amount`, `equip`, `identify` ) VALUES ('"+$kill$+"', '"+.prize+"', '" +.amount+ "', 0, 1)"; else getitem .prize, .amount, getcharid(3, .@name$); end;
  7. Então, cara, o erro está aqui: "+.@qpname$[.@i]+" Quando você seleciona das tabelas dando apenas um argumento, ele não cria uma array. Tenta assim: query_sql "SELECT `account_id`,`MaxQPoints` FROM `login` WHERE `MaxQPoints` > '0' ORDER BY `MaxQPoints` DESC LIMIT 10",.@acid,.@maxqp; for(set .@i,0; .@i<getarraysize(.@acid); set .@i,.@i+1) { query_sql "SELECT `name` FROM `char` WHERE `account_id`='"+.@acid[.@i]+"' AND `QP_CharPref`='1'",.@qpname$; mes " [ "+(.@i+1)+"º ] "+.@qpname$+" ~ "+.@maxqp[.@i]+""; } close;
  8. Solved! I solved this by diffing my client in a VM using W7 x86 as a OS. Probably the NEMO don't work well in W10 x64.
  9. 2017-05-17aRagexeRE and 2017-06-14aRagexeRE are brokens for me, I can't use any of them. 2016-02-03aRagexeRE is the current client that I'm using. 2017-01-25aRagexeRE.rar
  10. Nope, same here. I unpacked the 2017-01-25aRagexeRE for me (because the one in rA have only 13mb and this is quite strange) and I'm having the same problem when I diff using the latest version of NEMO. Probably 2017-01-25 uses an old UI for rodex. My texture folders:
  11. Anyway, I don't have enabled IncreaseAtkDisplay. This is my diffs that I have enabled: 3 Chat Flood Remove Limit 6 Force Send Client Hash Packet 8 Custom Window Title 9 Disable 1rag1 type parameters (Recommended) 13 Disable Ragexe Filename Check (Recommended) 16 Disable Swear Filter 23 Enable /who command (Recommended) 24 Fix Camera Angles (Recommended) 32 Increase Zoom Out Max 33 Always Call SelectKoreaClientInfo() (Recommended) 34 Enable /showname (Recommended) 36 Read msgstringtable.txt (Recommended) 37 Read questid2display.txt (Recommended) 38 Remove Gravity Ads (Recommended) 39 Remove Gravity Logo (Recommended) 40 Restore Login Window (Recommended) 41 Disable Nagle Algorithm (Recommended) 44 Translate Client (Recommended) 46 Use Normal Guild Brackets (Recommended) 48 Use Plain Text Descriptions (Recommended) 49 Enable Multiple GRFs (Recommended) 50 Skip License Screen 53 Use Ascii on All LangTypes (Recommended) 61 Disable Packet Encryption 64 @ Bug Fix (Recommended) 65 Load Custom lua file instead of iteminfo*.lub (Recommended) 71 Ignore Resource Errors 73 Remove Hourly Announce (Recommended) 74 Increase Screenshot Quality 84 Remove Serial Display (Recommended) 88 Allow space in guild name 90 Enable DNS Support (Recommended) 91 Disconnect to Login Window 97 Cancel to Login Window (Recommended) 208 Restore Cash Shop Icon 213 Disable Help Message on Login (Recommended) @edit: I don't know why I am having this error... I'm 80% sure that I'm the only one with this error. Can you check this in your PC, if you have free time please? Thanks in advance. :v
  12. Maybe be my OS? Win 10 x64? I'll test in a VM with Windows 7 32 bits. Thanks for the answer
  13. I'm having an error with damage output when I diff my client using secretdataz NEMO fork (the actually best differ for hexeds 2017+). Anyone having this problem too? Know the way of how to fix this? @edit: The client diffed in the secretdataz NEMO is alread pre-diffed with the NEO NEMO. But if I diff only with the secretdataz, the error will be the same (with any diff).
  14. How this client unpacked is soo small? My client has 18mb unpacked. o_O
  15. Sindit

    Help

    Yes you can custom it. But I don't know if you can modify your size. My login box is in portuguese (Client 2015):
  16. Try using root user. If you cannot login using root user, try to open your SSH port in your modem or you just need to enable connection between the machines by enabling it on your firewall (Host and Guest).
  17. You just need to create a new MySQL connection and fill in the data according to your VPS. In Connection Method you change from Standard (TCP/IP) to Standard TCP/IP over SSH. SSH Hostname you put your VPS IP. SSH Username and SSH Password you put your VPS User (I used root) and the password (Just click in Store in Vault ... to edit). The rest is the same as the Windows connection.
  18. No, rAthena follow the kRO (Korean Ragnarok Online) and because of this you need to use GRF of kRO.
  19. Some peoples had asked me for this guide, so I thought it was a good idea to post here. I'm not a pro on things like this so maybe I'll not can help you, btw you can suggest to this guide very helpful informations, I'll be grateful for you. Introduction I'll teach you guys how to setup a rAthena Server in a Virtual Machine (VM) for training VPS before buying one and enable connection to another peoples for co-working or something using VirtualBox and CentOS 7 as Operating System (OS) for it. VirtualBox is widely used to perform this tasks because is secured, UI-friendly and very easy to configure. Prerequisites Windows XP SP3 or later VirtualBox Latest Version (or VMware) CentOS 7 minimal ISO PuTTY (or any similar software) FileZilla (or any similar software) (Optionals) No-IP DDNS and DUC Notepad++ Requirements Static IP (Host and Guest) Port Forwarding (22 for SSH, 80 for HTTP, FluxCP, phpMyAdmin and 6900, 6121, 5121 for the server) If you want, you can use another port different than 80 for HTTP for security reasons, but I'll not teach you how to do that. Warnings If you don't have any knowledgement in port forwarding or how port forwarding can be very risky, I really don't recommend this guide for you. I'm not liable for any damages in your PC or Network, make this by your own risk. If you want to not port forwarding and use this guide only for use the server in a VM only for you, it's okay, you just need to open ports on your Host-machine Firewall instead port forwarding, but you'll not able to open the server for another peoples. Creating the VM and Installing the CentOS 7 1. Open the VirtualBox and click in New or use Ctrl + N. 2. Enter the name and switch Type to Linux and Version to Red Hat (64-bit) and click in Next. 3. Set 1024 for the amount of memory (RAM) in megabytes to be allocted to the virtual machine and click next. 4. Select Create a virtual hard disk now and click in create and next. 5. Select Fixed size and click in next. 6. Set the size for the virtual hard disk in gigabytes. I'll set 20,00GB but you can put a different valor (minimum 5,00GB) and click in Create. 7. Click in Settings and go to Storage, click on the Empty below Controller: IDE and click on the small CD icon and click in Choose Virtual Optical Disk File... and select the CentOS 7 ISO file. 8. Go to Network and change NAT to Bridged Adapter and press the OK button. 9. Start your VM by pressing the Start button. 10. In the VM, choose Install CentOS Linux 7 option and press enter. 11. Choose your language and click and next. 12. On Localization configure your date and time by clicking in the Date & Time button and next you configure your keyboard by clicking in the Keyboard button. 13. Go to System and click in Installation Destination and just click in Done. 14. Click on Network & Host Name and click in the Off button to turn On. Now click in the Configure... button and go to IPv4 Settings, switch Automatic (DHCP) to Manual and click in Add. In Address you put the LAN IP that you want (normally is something like that: 192.168.xx.xx), in Netmask put 255.255.255.0 and in Gateway you put your Router Gateway (192.168.xx.xx) and click in Save. In Host name you can change to whatever you want, but add ".localhost" in the end like 'server.localhost' and click in Apply and next in Done. 15. Click on Begin Installation and next you set the root password by clicking on the button Root Password(don't forget that password, its very important) and wait the installation be done. After that just click in Reboot. 16. After the reboot you'll see anything like that: Just type root for Login and root password for Password. 17. After that type yum -y update and press Enter and wait the update finish. 18. Now create a new user non-root: Pick a different number from 4444. # useradd --create-home --shell /bin/bash rathena4444 # passwd rathena4444 Configuring the VM via Terminal using PuTTY. I recommend to use PuTTY because you can scroll up and down the terminal without having to install Gnome GUI on the VM and it's a good training before buying a VPS. 1. Connect to your VM on the PuTTY by typing the Guest Machine IP and the port that you have forwarded, then type root and root password. 2. Now type the following commands: # yum -y install centos-release-scl # yum -y install devtoolset-4-gcc-c++ # yum -y install make mysql mysql-devel mariadb-server pcre-devel zlib-devel git # systemctl start mariadb.service Optional, it will make this start for every system boot. # systemctl enable mariadb.service Run this command and follow the prompts: # mysql_secure_installation Login to your MariaDB Server as root: When prompted, enter your root MySQL password. # mysql -u root -p Now your prompt should look like this (the MariaDB command prompt): MariaDB [(none)]> 3. At the MySQL prompt, type this to create a database (replace rathena4444 with the Linux username you created earlier): MariaDB [(none)]> CREATE DATABASE rathena4444_rag; Create a separate database for logs: MariaDB [(none)]> CREATE DATABASE rathena4444_log; 4. Create a MySQL user for rAthena and grant privileges. MariaDB [(none)]> CREATE USER 'rathena4444'@'localhost' IDENTIFIED BY 'secretpassword'; MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE ON rathena4444_rag.* TO 'rathena4444'@'localhost'; MariaDB [(none)]> GRANT SELECT,INSERT ON rathena4444_log.* TO 'rathena4444'@'localhost'; Type 'exit' to close the MariaDB prompt. 5. Now we will open ports on the VM Firewall for accept the clients. Type the following commands: # firewall-cmd --zone=public --add-port=6900/tcp # firewall-cmd --zone=public --add-port=6121/tcp # firewall-cmd --zone=public --add-port=5121/tcp # firewall-cmd --reload If you want to enable this on all system boot startup just add --permanent on the final like that: # firewall-cmd --zone=public --add-port=6900/tcp --permanent 6. Installing and configuring phpMyAdmin for FluxCP and MySQL tables (you can skip that if you will use only MySQL Workbench) Remembering: I REALLY DON'T RECOMMEND YOU TO OPEN PORT 80 IF YOU DON'T HAVE ANY KNOWLEDGEMENT IN PORT FORWARDING. # firewall-cmd --zone=public --add-port=80/tcp # firewall-cmd --reload Step 1: # rpm -iUvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm Step 2: # yum -y update # yum -y install httpd php phpmyadmin Step 3: Open the FileZilla and login on your VM. Now go to /etc/httpd/conf.d/ and open the phpMyAdmin.conf using Notepad++ and modify this: Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin <Directory /usr/share/phpMyAdmin/> AddDefaultCharset UTF-8 <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 Require ip ::1 </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> To this: Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin #<Directory /usr/share/phpMyAdmin/> # <IfModule mod_authz_core.c> # # Apache 2.4 # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> # </IfModule> # <IfModule !mod_authz_core.c> # # Apache 2.2 # Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # </IfModule> #</Directory> <Directory /usr/share/phpMyAdmin/> Options none AllowOverride Limit Require all granted </Directory> Save and return to FileZilla, a little popup will be show, just click Yes. Back to PuTTY terminal and type the following commands: # systemctl start httpd Optional, it will make this start for every system boot. # systemctl enable httpd Now open your browser and put your IP or your No-IP DDNS with /phpmyadmin like that: "250.251.252.253/phpmyadmin" or "myragnaroknoip.ddns.net/phpmyadmin" to have access to it. 7. Logout from root SSH (or minimize the window) and login as your non-root Linux user that you created earlier. 8. Clone the rAthena repository: # git clone https://github.com/rathena/rathena.git ~/rAthena 9. Import MySQL tables Step 1: Change directory to the "sql-files" folder. # cd rAthena/sql-files/ Step 2: # mysql -u root -p rathena4444_rag < main.sql # mysql -u root -p rathena4444_rag < item_db.sql # mysql -u root -p rathena4444_rag < item_db2.sql # mysql -u root -p rathena4444_rag < mob_db.sql # mysql -u root -p rathena4444_rag < mob_db2.sql # mysql -u root -p rathena4444_log < logs.sql 10. Configure the server by editting the files using FileZilla + Notepad++ (Normally the rAthena server folder is inside the non-root user folder (/home/rathena4444).) 11. Compile the source code Step 1: # cd .. # scl enable devtoolset-4 bash # ./configure Step 2: # make server How to Recompile: # ./configure # make clean # make server 12. Start your rAthena server. This will start the rAthena Server: # ./athena-start start To stop the server just use: # ./athena-start stop You can restart your server if is already running # ./athena-start restart Links that I have used for make this guide (Special Credits): https://github.com/rathena/rathena/wiki/Install-on-Centos https://www.liquidweb.com/kb/how-to-install-and-configure-phpmyadmin-on-centos-7/
  20. The same here, apparently this error occurs on Windows 10. When I already migrated to W10 has started this error, and even fixing the error by installing the DLL doesn't fixed yet. I "fixed" this by running the emulator on CentOS in a Virtual Machine. Btw, the error that occurs now:
×
×
  • Create New...