Jump to content

jaBote

Community Contributors
  • Content Count

    2037
  • Joined

  • Last visited

  • Days Won

    43

Everything posted by jaBote

  1. It needs to get saved on the DB so that the changes take effect.
  2. There's no current script command to retrieve the item list from a character's cart (or storage, or gstorage if ever needed), so you'd have to rethink and hope the player's cart has been saved previously to entering the WoE map and do a SQL query like this: query_sql("SELECT `nameid` FROM `cart_inventory` WHERE `char_id` = " + getcharid(0), .@itemids); You'll get all Item IDs the player has on this cart on the array .@itemids, so you have now to loop through it and check for every blacklisted item on each entry.
  3. No es posible hacerlo que yo sepa. Aunque según tengo conocimiento, combinando mensajes a través de scripting es posible llegar a un texto de 255 o 512 caracteres de largo, que va muy bien para la gran mayoría de necesidades que tienes en el juego.
  4. If you want to do the delivery on another script yes or yes, then set a value on your job changer and make the item redeemer NPC delete that var, or something like that.
  5. You should do the modifications inside your job changer script or the official job changers if you aren't using a custom job changer, since there's no way of detecting a job change script side with current scripting engine
  6. Version 0.9.1

    78 downloads

    (as originally requested in this topic) What is it? As the download name says, it's an automatic event that will change the drop rate on a set of mobs. Each roll is made every Monday at 00:00 (also at server startup or using reloadscript). It also has custom announces on each roll and a nifty @command that informs the users of the current active set. You can fully customize its behavior easily on the configurations, starting from the amount of sets (which have to follow a pattern on the variable that carries them) and the name to assign to them, the amount of mobs the sets have (you may have sets of different amount of members), the drop rate multiplicator and so on. Have a peek on the configurations as of v 0.9.1. As you can see, it's fully customizable! // Add in mob IDs (or SpriteNames if you want) where the numbers are. // You can virtually have an unlimited sets, and an unlimited amount of // members for each set. Just remember that you each array member has to // follow this pattern: member1, member2, (...), memberN; setarray .set_0[0], 1001, 1002, 1004, 1005, 1007; // Neutral setarray .set_1[0], 1001, 1002, 1004, 1005, 1007; // Water setarray .set_2[0], 1001, 1002, 1004, 1005, 1007; // Earth setarray .set_3[0], 1001, 1002, 1004, 1005, 1007; // Fire setarray .set_4[0], 1001, 1002, 1004, 1005, 1007; // Wind setarray .set_5[0], 1001, 1002, 1004, 1005, 1007; // Poison setarray .set_6[0], 1001, 1002, 1004, 1005, 1007; // Holy setarray .set_7[0], 1001, 1002, 1004, 1005, 1007; // Shadow setarray .set_8[0], 1001, 1002, 1004, 1005, 1007; // Ghost setarray .set_9[0], 1001, 1002, 1004, 1005, 1007; // Undead //setarray .set_10[0], 1001, 1002, 1004, 1005, 1007; // You may add more sets here in this fashion. // Set to the name of the type of each set of $@set_X // BEWARE! Number of members on this array MUST be the same as the total // amount of sets (which is quite obvious). This is VERY IMPORTANT. // Remember that strings should be enclosed in double quotes: "" setarray .names$[0], "Neutral", "Water", "Earth", "Fire", "Wind", "Poison", "Holy", "Shadow", "Ghost", "Undead"; // Set to the multiplication rate of drops (should be >= 1) // Examples: 100 = x1 (useless); 200 = x2; 50 = x0.5 // Based on final drop rates after battle conf calculations. .multiplicator = 200; // Force change of element each week? (1 = Yes; 0 = No) .force_change = 1; // Text message. You can change or translate it if you want, but be careful // not to touch the %s since you'll screw the dynamic formatting. .announce_format$ = "The element %s has been doubled for this week!"; // Atcommand name you want to use for keeping your users informed. .atcommand$ = "ddw"; That's not all it has to offer. This script is also extensively commented and well formatted as an effort of mine to encouraging their users to try reading it, editing it and adding features to it or integrating with other scripts. It's not optimized to work fastest on execution (if it was I'd have to remove most of the configurations and all of the middle steps I've took to make it more readable for newbies). It's designed so that most people could easily extract the maximum knowledge of it as if it was an example from a manual while causing the minimum harm to its run speed. What does it come with, by default? It comes with an event that doubles the mob drop rate on sets based on he element of the mobs. Sadly the sets are filled with placeholders because original requester didn't specify its contents but it'd be nice if somebody else came with suitable mobs for it since I'm not good at events. Any reasonable proposal to show up the script will be welcome and help for releasing a fully functional script out of the box for next users. Warnings! While I would like this script to be perfect, there are a some issues it has you should take into account: addmonsterdrop/delmonsterdrop script commands don't work well with mobs that drop the same item more than once. It means that if a monster has 2 drop slots occupied by a same item ID, the design flaw these script commands have is that they'll attempt to modify the first item whose ID matches, leaving the second and later drop slot which has that item intact (and having the first one be modified to the rate of the last drop slot found with that item ID). Reloadscript or server restart will make the script choose another set. If the multiplied rate of a drop is more than the equivalent to 100%, you'll get a warning on the server console. While you can avoid this by capping the value script side, you can safely ignore it since the script comand caps it for you. Works fine with more than a single set. I don't know if you're doing good if you specify only one, but in that case keep at least the .force_change parameter set to 0 to avoid infinity loops and warnings on the map server console you should totally not ignore. While last 2nd, 3rd and 4th ones can be fixed script side (be wary 2nd one is a mess to fix I preferred not to do myself), you're welcome to try fixing 3rd and 4th yourself to help your scripting since they are very easy to fix. Finally! I hope you all enjoy the script! P.S.: Reminder, I'd really appreciate if someone lent me out any help to fill out the dummy spaces to provide version 1.0.0. Thanks on advance!
  7. File Name: multiple drops on user-defined sets File Submitter: jaBote File Submitted: 15 Jun 2014 File Category: Events & Games (as originally requested in this topic) What is it? As the download name says, it's an automatic event that will change the drop rate on a set of mobs. Each roll is made every Monday at 00:00 (also at server startup or using reloadscript). It also has custom announces on each roll and a nifty @command that informs the users of the current active set. You can fully customize its behavior easily on the configurations, starting from the amount of sets (which have to follow a pattern on the variable that carries them) and the name to assign to them, the amount of mobs the sets have (you may have sets of different amount of members), the drop rate multiplicator and so on. Have a peek on the configurations as of v 0.9.1. As you can see, it's fully customizable! // Add in mob IDs (or SpriteNames if you want) where the numbers are. // You can virtually have an unlimited sets, and an unlimited amount of // members for each set. Just remember that you each array member has to // follow this pattern: member1, member2, (...), memberN; setarray .set_0[0], 1001, 1002, 1004, 1005, 1007; // Neutral setarray .set_1[0], 1001, 1002, 1004, 1005, 1007; // Water setarray .set_2[0], 1001, 1002, 1004, 1005, 1007; // Earth setarray .set_3[0], 1001, 1002, 1004, 1005, 1007; // Fire setarray .set_4[0], 1001, 1002, 1004, 1005, 1007; // Wind setarray .set_5[0], 1001, 1002, 1004, 1005, 1007; // Poison setarray .set_6[0], 1001, 1002, 1004, 1005, 1007; // Holy setarray .set_7[0], 1001, 1002, 1004, 1005, 1007; // Shadow setarray .set_8[0], 1001, 1002, 1004, 1005, 1007; // Ghost setarray .set_9[0], 1001, 1002, 1004, 1005, 1007; // Undead //setarray .set_10[0], 1001, 1002, 1004, 1005, 1007; // You may add more sets here in this fashion. // Set to the name of the type of each set of $@set_X // BEWARE! Number of members on this array MUST be the same as the total // amount of sets (which is quite obvious). This is VERY IMPORTANT. // Remember that strings should be enclosed in double quotes: "" setarray .names$[0], "Neutral", "Water", "Earth", "Fire", "Wind", "Poison", "Holy", "Shadow", "Ghost", "Undead"; // Set to the multiplication rate of drops (should be >= 1) // Examples: 100 = x1 (useless); 200 = x2; 50 = x0.5 // Based on final drop rates after battle conf calculations. .multiplicator = 200; // Force change of element each week? (1 = Yes; 0 = No) .force_change = 1; // Text message. You can change or translate it if you want, but be careful // not to touch the %s since you'll screw the dynamic formatting. .announce_format$ = "The element %s has been doubled for this week!"; // Atcommand name you want to use for keeping your users informed. .atcommand$ = "ddw"; That's not all it has to offer. This script is also extensively commented and well formatted as an effort of mine to encouraging their users to try reading it, editing it and adding features to it or integrating with other scripts. It's not optimized to work fastest on execution (if it was I'd have to remove most of the configurations and all of the middle steps I've took to make it more readable for newbies). It's designed so that most people could easily extract the maximum knowledge of it as if it was an example from a manual while causing the minimum harm to its run speed. What does it come with, by default? It comes with an event that doubles the mob drop rate on sets based on he element of the mobs. Sadly the sets are filled with placeholders because original requester didn't specify its contents but it'd be nice if somebody else came with suitable mobs for it since I'm not good at events. Any reasonable proposal to show up the script will be welcome and help for releasing a fully functional script out of the box for next users. Warnings! While I would like this script to be perfect, there are a some issues it has you should take into account: addmonsterdrop/delmonsterdrop script commands don't work well with mobs that drop the same item more than once. It means that if a monster has 2 drop slots occupied by a same item ID, the design flaw these script commands have is that they'll attempt to modify the first item whose ID matches, leaving the second and later drop slot which has that item intact (and having the first one be modified to the rate of the last drop slot found with that item ID). Reloadscript or server restart will make the script choose another set. If the multiplied rate of a drop is more than the equivalent to 100%, you'll get a warning on the server console. While you can avoid this by capping the value script side, you can safely ignore it since the script comand caps it for you. Works fine with more than a single set. I don't know if you're doing good if you specify only one, but in that case keep at least the .force_change parameter set to 0 to avoid infinity loops and warnings on the map server console you should totally not ignore. While last 2nd, 3rd and 4th ones can be fixed script side (be wary 2nd one is a mess to fix I preferred not to do myself), you're welcome to try fixing 3rd and 4th yourself to help your scripting since they are very easy to fix. Finally! I hope you all enjoy the script! P.S.: Reminder, I'd really appreciate if someone lent me out any help to fill out the dummy spaces to provide version 1.0.0. Thanks on advance! Click here to download this file
  8. A nice suggestion for both plugin and script version is to make it either debuff on your map, or another map whose name you specify as a parameter to the command (this way you could also use a parameter in case of debuffing self map to decide whether to debuff oneself )
  9. Yes, you can be creative ending it. According to source: /*========================================== * @unmute [Valaris] *------------------------------------------*/ACMD(unmute) { struct map_session_data *pl_sd = NULL; if (!message || !*message) { clif->message(fd, msg_txt(1234)); // Please enter a player name (usage: @unmute <char name>). return false; } if ( (pl_sd = map->nick2sd((char *)message)) == NULL ) { clif->message(fd, msg_txt(3)); // Character not found. return false; } if(!pl_sd->sc.data[SC_NOCHAT]) { clif->message(sd->fd,msg_txt(1235)); // Player is not muted. return false; } pl_sd->status.manner = 0; status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER); clif->message(sd->fd,msg_txt(1236)); // Player unmuted. return true;} Since I suppose you already know your character is logged in and muted you can skip all the checks and go directly to what you want. Try this instead? OnPCLogoutEvent: if (strcharinfo(3) == "guild_vs1" ) { Manner = 0; // sc_end SC_NOCHAT; // Edit, not needed as of the documentation says? } end; EDIT: You've also got some nice advice on the scripting documentation regarding that on our scripting documentation : I've just commented out the SC_NOCHAT line. If that doesn't work just edit the script and try with that uncommented again P.S.: You sure you didn't get any warning or so from the console when trying to atcommand? O.o
  10. Well, the goal is going towards the most neutral Spanish I could achieve as you can read on the header of the file but it needed an ISO language code. I can't use only the es code for uniformization issues so I went to es-ES in case of doubt since I can't make it comply with all Spanish varieties. I'll welcome any proofread and comments and criticism from all Spanish-speaking people.
  11. Well, the translation was complete since August 16th, I think it's time to release it on its unrevised state so I did add the new strings and voilà. A late gift for everybody: https://github.com/HerculesWS/FluxCP/commit/6c063e57f70ecf2c4cefc4ffa674010a3797b9f0
  12. Desculpe, eu não sou Português mas eu tento de aprender. Somente compare a primerira metade do script (indentada, case 1 do primeiro switch) com a segunda (o resto) //Script Desenvolvivo por Filipesaj Favor não retirar os Créditosprontera,148,166,3 script Refine Especial 726,{ set @posi,0; Set @Npcn$,"^FF0000[Refinador]^000000"; Mes @Npcn$; mes "• Refinar é uma habilidade usada para tornar um equipamento mais poderoso."; mes "• Um mesmo equipamento pode atingir até o grau +10 de refinamento."; next; switch(select("Refinar Equipamentos:Refinar Armas:Trocar Restos por Poeiras")) { case 1: switch(select("Topo da cabeça:Centro da Cabeça:Baixo da Cabeça:Armadura:Capa:Calçado:Escudo:Sair")) { case 1: set @posi,EQI_HEAD_TOP; Mes @Npcn$; if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhum equipamento no topo da cabeça."; close; } if(getequipisenableref(@posi) == 0) { mes "Esse equipamento não pode ser refinado."; close; } if( getequiprefinerycnt(@posi) == 10 ) { mes "Esse equipamento já atingiu o nível máximo"; close; } if(countitem(985) == 0) { mes "Você não tem o item necessário (Elunium) para refinar esse equipamento."; close; } if( getequiprefinerycnt(@posi) <= 3 ) { mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } if( getequiprefinerycnt(@posi) == 4) { function Refine4; Refine4(); } if( getequiprefinerycnt(@posi) == 5) { function Refine5; Refine5(); } if( getequiprefinerycnt(@posi) == 6) { function Refine6; Refine6(); } if( getequiprefinerycnt(@posi) == 7) { function Refine7; Refine7(); } if( getequiprefinerycnt(@posi) == 8) { function Refine8; Refine8(); } if( getequiprefinerycnt(@posi) == 9) { function Refine9; Refine9(); } close; case 2: set @posi,EQI_HEAD_MID; Mes @Npcn$; if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhum equipamento no centro da cabeça."; close; } if(getequipisenableref(@posi) == 0) { mes "Esse equipamento não pode ser refinado."; close; } if( getequiprefinerycnt(@posi) == 10 ) { mes "Esse equipamento já atingiu o nível máximo"; close; } if(countitem(985) == 0) { mes "Você não tem o item necessário (Elunium) para refinar esse equipamento."; close; } if( getequiprefinerycnt(@posi) <= 3 ) { mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } if( getequiprefinerycnt(@posi) == 4) { function Refine4; Refine4(); } if( getequiprefinerycnt(@posi) == 5) { function Refine5; Refine5(); } if( getequiprefinerycnt(@posi) == 6) { function Refine6; Refine6(); } if( getequiprefinerycnt(@posi) == 7) { function Refine7; Refine7(); } if( getequiprefinerycnt(@posi) == 8) { function Refine8; Refine8(); } if( getequiprefinerycnt(@posi) == 9) { function Refine9; Refine9(); } close; case 3: set @posi,EQI_HEAD_LOW; Mes @Npcn$; if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhum equipamento abaixo da cabeça."; close; } if(getequipisenableref(@posi) == 0) { mes "Esse equipamento não pode ser refinado."; close; } if( getequiprefinerycnt(@posi) == 10 ) { mes "Esse equipamento já atingiu o nível máximo"; close; } if(countitem(985) == 0) { mes "Você não tem o item necessário (Elunium) para refinar esse equipamento."; close; } if( getequiprefinerycnt(@posi) <= 3 ) { mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } if( getequiprefinerycnt(@posi) == 4) { function Refine4; Refine4(); } if( getequiprefinerycnt(@posi) == 5) { function Refine5; Refine5(); } if( getequiprefinerycnt(@posi) == 6) { function Refine6; Refine6(); } if( getequiprefinerycnt(@posi) == 7) { function Refine7; Refine7(); } if( getequiprefinerycnt(@posi) == 8) { function Refine8; Refine8(); } if( getequiprefinerycnt(@posi) == 9) { function Refine9; Refine9(); } close; case 4: set @posi,EQI_ARMOR; Mes @Npcn$; if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhuma armadura."; close; } if(getequipisenableref(@posi) == 0) { mes "Esse equipamento não pode ser refinado."; close; } if( getequiprefinerycnt(@posi) == 10 ) { mes "Esse equipamento já atingiu o nível máximo"; close; } if(countitem(985) == 0) { mes "Você não tem o item necessário (Elunium) para refinar esse equipamento."; close; } if( getequiprefinerycnt(@posi) <= 3 ) { mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } if( getequiprefinerycnt(@posi) == 4) { function Refine4; Refine4(); } if( getequiprefinerycnt(@posi) == 5) { function Refine5; Refine5(); } if( getequiprefinerycnt(@posi) == 6) { function Refine6; Refine6(); } if( getequiprefinerycnt(@posi) == 7) { function Refine7; Refine7(); } if( getequiprefinerycnt(@posi) == 8) { function Refine8; Refine8(); } if( getequiprefinerycnt(@posi) == 9) { function Refine9; Refine9(); } close; case 5: set @posi,EQI_GARMENT; Mes @Npcn$; if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhuma capa."; close; } if(getequipisenableref(@posi) == 0) { mes "Esse equipamento não pode ser refinado."; close; } if( getequiprefinerycnt(@posi) == 10 ) { mes "Esse equipamento já atingiu o nível máximo"; close; } if(countitem(985) == 0) { mes "Você não tem o item necessário (Elunium) para refinar esse equipamento."; close; } if( getequiprefinerycnt(@posi) <= 3 ) { mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } if( getequiprefinerycnt(@posi) == 4) { function Refine4; Refine4(); } if( getequiprefinerycnt(@posi) == 5) { function Refine5; Refine5(); } if( getequiprefinerycnt(@posi) == 6) { function Refine6; Refine6(); } if( getequiprefinerycnt(@posi) == 7) { function Refine7; Refine7(); } if( getequiprefinerycnt(@posi) == 8) { function Refine8; Refine8(); } if( getequiprefinerycnt(@posi) == 9) { function Refine9; Refine9(); } close; case 6: set @posi,EQI_SHOES; Mes @Npcn$; if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhum calçado."; close; } if(getequipisenableref(@posi) == 0) { mes "Esse equipamento não pode ser refinado."; close; } if( getequiprefinerycnt(@posi) == 10 ) { mes "Esse equipamento já atingiu o nível máximo"; close; } if(countitem(985) == 0) { mes "Você não tem o item necessário (Elunium) para refinar esse equipamento."; close; } if( getequiprefinerycnt(@posi) <= 3 ) { mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } if( getequiprefinerycnt(@posi) == 4) { function Refine4; Refine4(); } if( getequiprefinerycnt(@posi) == 5) { function Refine5; Refine5(); } if( getequiprefinerycnt(@posi) == 6) { function Refine6; Refine6(); } if( getequiprefinerycnt(@posi) == 7) { function Refine7; Refine7(); } if( getequiprefinerycnt(@posi) == 8) { function Refine8; Refine8(); } if( getequiprefinerycnt(@posi) == 9) { function Refine9; Refine9(); } close; case 7: set @posi,EQI_HAND_L; Mes @Npcn$; if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhum escudo."; close; } if(getequipisenableref(@posi) == 0) { mes "Esse equipamento não pode ser refinado."; close; } if( getequiprefinerycnt(@posi) == 10 ) { mes "Esse equipamento já atingiu o nível máximo"; close; } if(countitem(985) == 0) { mes "Você não tem o item necessário (Elunium) para refinar esse equipamento."; close; } if( getequiprefinerycnt(@posi) <= 3 ) { mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } if( getequiprefinerycnt(@posi) == 4) { function Refine4; Refine4(); } if( getequiprefinerycnt(@posi) == 5) { function Refine5; Refine5(); } if( getequiprefinerycnt(@posi) == 6) { function Refine6; Refine6(); } if( getequiprefinerycnt(@posi) == 7) { function Refine7; Refine7(); } if( getequiprefinerycnt(@posi) == 8) { function Refine8; Refine8(); } if( getequiprefinerycnt(@posi) == 9) { function Refine9; Refine9(); } close; case 8: close; } function Refine4 { mes "^228B22Chance de sucesso =^000000 60%"; switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){ case 1: close; case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=60){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes "Quantas Poeiras de Oriharucon deseja usar? (Máximo 10)"; input .@pdo; next; Mes @Npcn$; if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close; } if(countitem(24001) <.@pdo ) { mes "Você não tem Poeiras de Oriharucon suficientes."; close; } mes "^228B22Chance de sucesso =^000000"; set .@result,60+.@pdo; mes "60+"+.@pdo+" = "+.@result+"%"; set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; delitem 24001,.@pdo; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; delitem 24001,.@pdo; failedrefitem @posi; close; } } function Refine5 { mes "^228B22Chance de sucesso =^000000 40%"; switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){ case 1: close; case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=40){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes "Quantas Poeiras de Oriharucon deseja usar? (Máximo 10)"; input .@pdo; next; Mes @Npcn$; if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close; } if(countitem(24001) <.@pdo ) { mes "Você não tem Poeiras de Oriharucon suficientes."; close; } mes "^228B22Chance de sucesso =^000000"; set .@result,40+.@pdo; mes "40+"+.@pdo+" = "+.@result+"%"; set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; delitem 24001,.@pdo; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; delitem 24001,.@pdo; failedrefitem @posi; close; } } function Refine6 { mes "^228B22Chance de sucesso =^000000 40%"; switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){ case 1: close; case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=40){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes "Quantas Poeiras de Oriharucon deseja usar? (Máximo 10)"; input .@pdo; next; Mes @Npcn$; if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close; } if(countitem(24001) <.@pdo ) { mes "Você não tem Poeiras de Oriharucon suficientes."; close; } mes "^228B22Chance de sucesso =^000000"; set .@result,40+.@pdo; mes "40+"+.@pdo+" = "+.@result+"%"; set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; delitem 24001,.@pdo; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; delitem 24001,.@pdo; failedrefitem @posi; close; } } function Refine7 { mes "^228B22Chance de sucesso =^000000 20%"; switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){ case 1: close; case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=20){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes "Quantas Poeiras de Oriharucon deseja usar? (Máximo 10)"; input .@pdo; next; Mes @Npcn$; if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close; } if(countitem(24001) <.@pdo ) { mes "Você não tem Poeiras de Oriharucon suficientes."; close; } mes "^228B22Chance de sucesso =^000000"; set .@result,20+.@pdo; mes "20+"+.@pdo+" = "+.@result+"%"; set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; delitem 24001,.@pdo; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; delitem 24001,.@pdo; failedrefitem @posi; close; } } function Refine8 { mes "^228B22Chance de sucesso =^000000 20%"; switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){ case 1: close; case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=20){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes "Quantas Poeiras de Oriharucon deseja usar? (Máximo 10)"; input .@pdo; next; Mes @Npcn$; if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close; } if(countitem(24001) <.@pdo ) { mes "Você não tem Poeiras de Oriharucon suficientes."; close; } mes "^228B22Chance de sucesso =^000000"; set .@result,20+.@pdo; mes "20+"+.@pdo+" = "+.@result+"%"; set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; delitem 24001,.@pdo; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; delitem 24001,.@pdo; failedrefitem @posi; close; } } function Refine9 { mes "^228B22Chance de sucesso =^000000 10%"; switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){ case 1: close; case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=10){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes "Quantas Poeiras de Oriharucon deseja usar? (Máximo 10)"; input .@pdo; next; Mes @Npcn$; if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close; } if(countitem(24001) <.@pdo ) { mes "Você não tem Poeiras de Oriharucon suficientes."; close; } mes "^228B22Chance de sucesso =^000000"; set .@result,10+.@pdo; mes "10+"+.@pdo+" = "+.@result+"%"; set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){ next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 985,1; delitem 24001,.@pdo; successrefitem @posi; close; } next; Mes @Npcn$; mes "Refinamento falhou."; delitem 985,1; delitem 24001,.@pdo; failedrefitem @posi; close; } }case 2:next; Mes @Npcn$;mes "Refino apenas arma da mão direita.";switch(select("Refinar Arma:Sair")){case 1:set @posi,EQI_HAND_R;set @nvarm,getequipweaponlv(EQI_HAND_R);if(getequipisequiped(@posi) == 0) { mes "Você não tem nenhuma arma."; close;}if(getequipisenableref(@posi) == 0) { mes "Essa arma não pode ser refinada."; close; }if( getequiprefinerycnt(@posi) == 10 ) {mes "Essa arma já atingiu o refine máximo"; close;}if(@nvarm == 1){ if(countitem(1010) == 0) { mes "Você não tem o item necessário (Fracon) para refinar essa arma (Arma Nv1)."; close;} }if(@nvarm == 2){ if(countitem(1011) == 0) { mes "Você não tem o item necessário (Emveretarcon) para refinar essa arma (Arma Nv2)."; close;} }if(@nvarm == 3){ if(countitem(984) == 0) { mes "Você não tem o item necessário (Oridecon) para refinar essa arma (Arma Nv3)."; close;} }if(@nvarm == 4){ if(countitem(984) == 0) { mes "Você não tem o item necessário (Oridecon) para refinar essa arma (Arma Nv4)."; close;} }if(@nvarm == 1){if( getequiprefinerycnt(@posi) <= 6 ) {mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1010,1; successrefitem @posi; close;}}if(@nvarm == 1){if( getequiprefinerycnt(@posi) == 7 ){function armnv1ren7;armnv1ren7();}}if(@nvarm == 1){if( getequiprefinerycnt(@posi) == 8 ){function armnv1ren8;armnv1ren8();}}if(@nvarm == 1){if( getequiprefinerycnt(@posi) == 9 ){function armnv1ren9;armnv1ren9();}}if(@nvarm == 2){if( getequiprefinerycnt(@posi) <= 5 ) {mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1; successrefitem @posi; close;}}if(@nvarm == 2){if( getequiprefinerycnt(@posi) == 6 ){function armnv2ren6;armnv2ren6();}}if(@nvarm == 2){if( getequiprefinerycnt(@posi) == 7 ){function armnv2ren7;armnv2ren7();}}if(@nvarm == 2){if( getequiprefinerycnt(@posi) == 8 ){function armnv2ren8;armnv2ren8();}}if(@nvarm == 2){if( getequiprefinerycnt(@posi) == 9 ){function armnv2ren9;armnv2ren9();}}if(@nvarm == 3){if( getequiprefinerycnt(@posi) <= 4 ) {mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; successrefitem @posi; close;}}if(@nvarm == 3){if( getequiprefinerycnt(@posi) == 5 ){function armnv3ren5;armnv3ren5();}}if(@nvarm == 3){if( getequiprefinerycnt(@posi) == 6 ){function armnv3ren6;armnv3ren6();}}if(@nvarm == 3){if( getequiprefinerycnt(@posi) == 7 ){function armnv3ren7;armnv3ren7();}}if(@nvarm == 3){if( getequiprefinerycnt(@posi) == 8 ){function armnv3ren7;armnv3ren7();}}if(@nvarm == 3){if( getequiprefinerycnt(@posi) == 9 ){function armnv3ren7;armnv3ren7();}}if(@nvarm == 4){if( getequiprefinerycnt(@posi) <= 3 ) {mes"^228B22Chance de sucesso =^000000 100%"; next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; successrefitem @posi; close;}}if(@nvarm == 4){if( getequiprefinerycnt(@posi) == 4 ){function armnv4ren4;armnv4ren4();}}if(@nvarm == 4){if( getequiprefinerycnt(@posi) == 5 ){function armnv4ren5;armnv4ren5();}}if(@nvarm == 4){if( getequiprefinerycnt(@posi) == 6 ){function armnv4ren5;armnv4ren5();}}if(@nvarm == 4){if( getequiprefinerycnt(@posi) == 7 ){function armnv4ren7;armnv4ren7();}}if(@nvarm == 4){if( getequiprefinerycnt(@posi) == 8 ){function armnv4ren7;armnv4ren7();}}if(@nvarm == 4){if( getequiprefinerycnt(@posi) == 9 ){function armnv4ren9;armnv4ren9();}}close;case 2:close;}case 3:next; Mes @Npcn$;mes "• Pelo preço de 1.000.000 zenys eu posso transformar 10 Restos por 1 Poeira";mes "• Deseja qual poeira?";switch(select("Lactolerium:Poeira de Oriharucon")){case 1:if(countitem(24002) < 10) { next; Mes @Npcn$; mes "Você não tem Restos de Lactolerium suficientes."; close;}if(zeny< 1000000) { next; Mes @Npcn$; mes "Você não tem Zenys suficientes."; close;}next;Mes @Npcn$;Mes "Negociação concluida com sucesso";delitem 24002,10;set zeny,zeny-1000000;getitem 24000,1;close;case 2:if(countitem(24003) < 10) { next; Mes @Npcn$; mes "Você não tem Restos de Oriharucon suficientes."; close;}if(zeny< 1000000) { next; Mes @Npcn$; mes "Você não tem Zenys suficientes."; close;}next;Mes @Npcn$;Mes "Negociação concluida com sucesso";delitem 24003,10;set zeny,zeny-1000000;getitem 24001,1;close;}close;}function armnv1ren7 {mes "^228B22Chance de sucesso =^000000 60%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=60){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1010,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 1010,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,60+.@mult;mes "60+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1010,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 1010,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv1ren8 {mes "^228B22Chance de sucesso =^000000 40%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=40){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1010,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 1010,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,40+.@mult;mes "40+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1010,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 1010,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv1ren9 {mes "^228B22Chance de sucesso =^000000 20%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=20){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1010,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 1010,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,20+.@mult;mes "20+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1010,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 1010,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv2ren6 {mes "^228B22Chance de sucesso =^000000 60%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=60){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 1011,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Oriharucon deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24001) <.@pdo ) { mes "Você não tem Poeira de Oriharucon suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,60+.@mult;mes "60+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1; delitem 24001,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 1011,1; delitem 24001,.@pdo; failedrefitem @posi; close;}}function armnv2ren7 {mes "^228B22Chance de sucesso =^000000 40%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=40){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 1011,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,40+.@mult;mes "40+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 1011,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv2ren8 {mes "^228B22Chance de sucesso =^000000 20%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=20){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 1011,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,20+.@mult;mes "20+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 1011,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv2ren9 {mes "^228B22Chance de sucesso =^000000 20%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=20){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 1011,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,20+.@mult;mes "20+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 1011,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 1011,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv3ren5 {mes "^228B22Chance de sucesso =^000000 60%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=60){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 984,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Oriharucon deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24001) <.@pdo ) { mes "Você não tem Poeira de Oriharucon suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,60+.@mult;mes "60+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; delitem 24001,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 984,1; delitem 24001,.@pdo; failedrefitem @posi; close;}}function armnv3ren6 {mes "^228B22Chance de sucesso =^000000 50%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=50){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 984,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Oriharucon deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24001) <.@pdo ) { mes "Você não tem Poeira de Oriharucon suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,50+.@mult;mes "50+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; delitem 24001,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 984,1; delitem 24001,.@pdo; failedrefitem @posi; close;}}function armnv3ren7 {mes "^228B22Chance de sucesso =^000000 20%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=20){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 984,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,20+.@mult;mes "20+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 984,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv4ren4 {mes "^228B22Chance de sucesso =^000000 60%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=60){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 984,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Oriharucon deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24001) <.@pdo ) { mes "Você não tem Poeira de Oriharucon suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,60+.@mult;mes "60+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; delitem 24001,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 984,1; delitem 24001,.@pdo; failedrefitem @posi; close;}}function armnv4ren5 {mes "^228B22Chance de sucesso =^000000 40%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=40){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 984,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Oriharucon deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24001) <.@pdo ) { mes "Você não tem Poeira de Oriharucon suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,40+.@mult;mes "40+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; delitem 24001,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 984,1; delitem 24001,.@pdo; failedrefitem @posi; close;}}function armnv4ren7 {mes "^228B22Chance de sucesso =^000000 20%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=20){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 984,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,20+.@mult;mes "20+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 984,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}function armnv4ren9 {mes "^228B22Chance de sucesso =^000000 10%";switch(select("Cancelar:Refinar:Usar Poeiras de Refine")){case 1: close;case 2: set .@chancerefine,rand(.@1,100); if(.@chancerefine <=10){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1;successrefitem @posi; close;} next; Mes @Npcn$; mes "Refinamento falhou."; delitem 984,1;failedrefitem @posi; close; case 3: next; Mes @Npcn$; mes"Quantas Poeira de Lactolerium deseja usar? (Máximo 10)";input .@pdo;next; Mes @Npcn$;if(.@pdo > 10) { mes "Eu disse que o máximo de Poeiras que poderiam ser usadas eram 10"; close;}if(countitem(24000) <.@pdo ) { mes "Você não tem Poeira de Lactolerium suficientes."; close;}mes "^228B22Chance de sucesso =^000000";set .@mult,.@pdo*3;set .@result,10+.@mult;mes "10+"+.@mult+"="+.@result+"%";set .@chancerefine,rand(.@1,100); if(.@chancerefine <=.@result){next; Mes @Npcn$; mes "Equipamento refinado com sucesso"; delitem 984,1; delitem 24000,.@pdo; successrefitem @posi; close;}next; Mes @Npcn$;mes "Refinamento falhou."; delitem 984,1; delitem 24000,.@pdo; failedrefitem @posi; close;}}}//Script Desenvolvivo por Filipesaj Favor não retirar os Créditos P.E.: Eu vi que o seu script não serai bem parsado par o scripting engine: http://haru.ws/scriptchecker/ Tudos os comandos de scripting devem estar em letra minúscula.
  13. Eu vejo boas idéias nessos scripts (não testei), mas o sua indentaçao é claramente melhorable e faz a leitura muito mais complicada.
  14. Hello again (sorry for the double post, will merge when I make sure Fluffle Puff has read it). It would be nice if someone suggested an amount of mobs to have a fully functional event out of the box. I'm very bad coming up with suitable mobs for this kind of events and end up screwing badly because the quality of my choices are more than questionable. Thanks!
  15. Well, the purpose of the script binding is making @join #channel behave like @main and circumvent the reimplementation of it. I don't know how it did work, but I'm 90% sure a script could do the job instead of that, given a thorough description of what it does (maybe except that it'd be necessary to whisp to a npc:main instead to Main).
  16. Have you thought about binding the @main atcommand via scripting and having it call @join main?
  17. Haven't forgotten about this. Will make it a release later today after I shake off some other duties, and will cheekily change its version to 1.0.0 as said.
  18. Por mi parte, estoy dispuesto a hacer una crítica constructiva a tu script en cuanto lo termines y tenga constancia de ello Por cierto, puedes comprobar si tu script llega o no a cargar bien en el motor de scripting con el comprobador automático de Haruna en http://haru.es/scriptchecker Enviado desde el móvil en un momento de distracción de mi estudio
  19. Either change warps to scripts that check if the player is on a guild or place OnPCLoadMapEvent checks.
  20. Por supuesto que es posible Hacerlo, a través de prácticamente el mismo script que te da un objeto una vez por personaje, simplemente las variables de personaje (sin prefijo, por ejemplo: mivariable) por variables de cuenta (con # como prefijo, por ejemplo: #mivariable). Se trata de un script muy básico que te animo a que tú mismo realices o modifiques si ya tienes un script que hace eso mismo para cada personaje. P.D.: Ahora mismo no dispongo de mi ordenador así que puede que mis respuestas se demoren un poco. No obstante te recomiendo que realmente intentes hacerlo tú porque exige conocimientos de scripting de principiantes. Te tomará su tiempo al ser tu primer script pero te aseguro es mejor que aprendas a hacer este tipo de cosas por tu cuenta. Yo tardé casi un día en hacer mi primer NPC de unas 20 líneas para algo que ahora mismo me tomaría solo 5 minutos. Tu NPC no necesitaría mucho más de 10 líneas si le quitas todos los diálogos y le haces ir al grano
  21. So? Is it working as intended so that I can fully release it?
  22. You've got a clear example at mob.c for example, on this chunk of code (sorry for no tabs at all, it screws up): if( md->npc_event[0] && !md->state.npc_killmonster ) { if( sd && battle_config.mob_npc_event_type ) { pc->setparam(sd, SP_KILLERRID, sd->bl.id); npc->event(sd,md->npc_event,0); } else if( mvp_sd ) { pc->setparam(mvp_sd, SP_KILLERRID, sd?sd->bl.id:0); npc->event(mvp_sd,md->npc_event,0); } else npc->event_do(md->npc_event); } else if( mvp_sd && !md->state.npc_killmonster ) { pc->setparam(mvp_sd, SP_KILLEDRID, md->class_); npc->script_event(mvp_sd, NPCE_KILLNPC); // PCKillNPC [Lance] } Just use npc->script_event(sd, npc_event) for when you want to attach a player or npc->event_do(npc_event) for an event without any attached player. The NPC event can be hardcoded if you want ("NPCNAME::OnMyEventName") if you find it simpler.
  23. The bug has been fixed by myself. I've also made a blog entry to give a shoutout to people since it's been there for more than 9 years and none of the staff has notice because of the precise lack of bugreports till I stumbled upon it. I apologize for that problem I couldn't expect. Another fix for this mistake-filled script, try check if it has issues now : prontera,155,204,0 script killable -1,5,5,{OnTouch: if (!@killable) { @killable = 1; // Variable for keeping track of the status atcommand "@killable"; // Don't remember if it needed a parameter, I think it doesn't addtimer 1000, strnpcinfo(3)+"::OnKillable"; // Will check after a second } end;OnKillable: getmapxy(.@map$, .@x, .@y, 0); if ( (.@map$ != "prontera" || // Outside of the map .@x < (155 - 5) || .@x > (155 + 5) || // Out of the area of effect in X side .@y < (204 - 5) || .@y > (204 + 5) ) && // Out of the area of effect in Y side @killable) { @killable = 0; atcommand "@killable"; // Don't remember if it needed a parameter, I think it doesn't } else addtimercount strnpcinfo(3)+"::OnKillable",1000; // Will check again after a second until player goes out of the square end;}
  24. I'm on mobile phone currently, but I think you'll get it better in you go read addmonsterdrop and delmonsterdrop docs. In case of addmonsterdrop it just modifies an existing mob drop if found a drop with the same name/ID or adds a new drop if there's space available and the item name/ID isn't on the list of mob drops. That first coincidence behaviour makes that, if two "drop item slots" are occupied by the same kind of item (e.g. poring has two jellopies to drop, doesn't matter if they don't have the same rate), then addmonsterdrop trying to modify jellopy drop rate will be called twice and only access first jellopy drop slot both times. That's what I was trying to tell, and same applies to delmonsterdrop.
  25. Whops! Sorry for not seeing the bug report, but the bug tracker interface doesn't get along well with mobile UI. You would get surprised on what "minor tweaks" some official servers perform, that make them differ from original kRO. Just tell me when you're able to try it out and if that doesn't work hope someone else can devise a solution for you!
×
×
  • Create New...

Important Information

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