Jump to content
  • 0

NPC que aumenta % refino por QT de item dado


Question

Posted

Boa noite, Estou quebrando a cabeça tentando descobrir como posso selecionar a % de chances do equipamento refinar, estou fazendo um npc que por exemplo se eu der dois itens a ele, vai ficar 100 % de chance de refinar, se eu der apenas 1 fica com 50%, consigo apenas usar a % das próprias regras estabelecidas pelo jogo mas dessa forma não consigo estabelecer um bônus de % por item, se alguém puder me dar uma luz, não quero script pronto, só quero ter um norte pra saber oque precisa ser feito, deis de já obrigado.

 

4 answers to this question

Recommended Posts

  • 0
Posted

Algo do tipo:
 

MAP,X,Y,POS	scrip	Custom_refine::CustomRefine	SPRITE_ID,{
	.@item,1201; 			// Faca[3] para exemplo
	.@chance,50;
	if (countitem(.@item) >1)
		.@chance += 50;
	if (rnd(1,100) <= .@chance){
		// Refine script aqui
	}
}

 

  • 0
Posted (edited)

Gostei da ideia e fiz um npc, se quiseres usar, meu teclado nao eh portugues entao esta faltando acentos!
Nao esqueca de trocar "MAPA,X,Y" pelas posicoes do NPC!

 

//==============Made by DoomSlayer=============
//Ferreiro Custom - Quanto mais materiais maior
//a chance de sucesso!
//=============================================

MAPA,X,Y,3	script	Blacksmith Custom	63,{
	disable_items;
	mes "^0000FF"+.name$+"^000000";
	mes "Eu sou o melhor Ferreiro da cidade!";
	mes "Meu custo de trabalho e "+.price+" Zeny!";
	mes "Quanto mais materiais voce ultilizar, mais chances de sucesso voce tem!";
	next;
	switch(select("Refinar:Sair")){
		case 1:
			mes "^0000FF"+.name$+"^000000";
			mes "Qual o equipament que voce quer refinar?";
			next;
			goto OnRefine;
			end;
		case 2:
			mes "^0000FF"+.name$+"^000000";
			mes "Boa sorte!";
			close;
			end;
	}
OnRefine:
	setarray .@indices[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW;
	for(set .@i,1; .@i<=10; set .@i,.@i+1)
		set .@menu$, .@menu$ + ( getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-[Unequipped]" ) +":";
	set .@part, .@indices[ select(.@menu$) ];
	if (!getequipisequiped(.@part)) {
		mes "^0000FF"+.name$+"^000000";
		mes "Voce nao tem nennhum equipamento!";
		close;
	}
	if (!getequipisenableref(.@part)) {
		mes "^0000FF"+.name$+"^000000";
		mes "Este equipament nao pode ser refinado!";
		close;
	}
	.@equip_id = getequipid(.@part);
	.@equip_refine = getequiprefinerycnt(.@part);
	setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);

	if (.@equip_refine >= 20) {
		mes "^0000FF"+.name$+"^000000";
		mes "Este equipamento ja esta no maximo!";
		close;
	}
	
	if (getequipweaponlv(.@part) == 0){
		set .@matuse,2;
	} else {
		set .@matuse,1;
	}
	mes "^0000FF"+.name$+"^000000";
	mes "Quantos "+.namemat$[.@matuse]+" voce quer usar?";
	mes "A cada material sua chance aumenta por "+.matchance+"%.";
	next;
	input .@amount;
	if (.@amount == 0) {
		mes "^0000FF"+.name$+"^000000";
		mes "Nenhum material? como vou refinar assim?";
		close;
		end;
	}
	if (countitem(.material[.@matuse]) < .@amount){
		mes $npc$;
		mes "Voce nao tem essa quantidade de materiais";
		close;
		end;
	}
	if (.@amount > .maxmat){
		mes $npc$;
		mes "Voce so pode ultilizar um maximo de "+.maxmat+" materiais!";
		close;
		end;
	}
	mes "^0000FF"+.name$+"^000000";
	mes "Entao vamos la!";
	next;
	delitem .material[.@matuse],.@amount;
	set .@failchance,rand(1,100);
	set .@schance, (.chance + (.@amount * .matchance));
	if (.@failchance > .@schance){
		specialeffect2 EF_SUI_EXPLOSION;
		if (.break == 1){ failedrefitem .@part; }
		if (.break == 2){ downrefitem .@part; }
		mes "^0000FF"+.name$+"^000000";
		mes "Nao foi desta vez...";
		close;
		end;
	}
	successrefitem .@part;
	mes "^0000FF"+.name$+"^000000";
	mes "Muito facil!";
	close;
	end;
	
OnInit:
	set .name$,"Ferreiro";						//Nome do NPC
	set .chance,10;								//Chance de refinar 10 = 10% (sem material)
	set .matchance,1;							//Quantos % sobem por material
	set .maxmat,90;								//Maximo de materiais que se pode usar (90 x 1 = 90%)
	setarray .namemat$,"Oridecon","Elunium";	//Nome dos materiais abaixo
	setarray .material[1],984,985;				//Material que vai ser usado (984 - Oridecon 985 - Elunium)
	set .break,1;								//1 - Errar quebra / 2 - Errar desce refinamento / 3 - Nada acontece ao errar
	set .price,25000;							//Preco para refinar
	end;
}

 

Edited by DoomSlayer
  • 0
Posted
On 11/15/2020 at 9:44 PM, DoomSlayer said:

Gostei da ideia e fiz um npc, se quiseres usar, meu teclado nao eh portugues entao esta faltando acentos!
Nao esqueca de trocar "MAPA,X,Y" pelas posicoes do NPC!

 

//==============Made by DoomSlayer=============
//Ferreiro Custom - Quanto mais materiais maior
//a chance de sucesso!
//=============================================

MAPA,X,Y,3	script	Blacksmith Custom	63,{
	disable_items;
	mes "^0000FF"+.name$+"^000000";
	mes "Eu sou o melhor Ferreiro da cidade!";
	mes "Meu custo de trabalho e "+.price+" Zeny!";
	mes "Quanto mais materiais voce ultilizar, mais chances de sucesso voce tem!";
	next;
	switch(select("Refinar:Sair")){
		case 1:
			mes "^0000FF"+.name$+"^000000";
			mes "Qual o equipament que voce quer refinar?";
			next;
			goto OnRefine;
			end;
		case 2:
			mes "^0000FF"+.name$+"^000000";
			mes "Boa sorte!";
			close;
			end;
	}
OnRefine:
	setarray .@indices[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW;
	for(set .@i,1; .@i<=10; set .@i,.@i+1)
		set .@menu$, .@menu$ + ( getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-[Unequipped]" ) +":";
	set .@part, .@indices[ select(.@menu$) ];
	if (!getequipisequiped(.@part)) {
		mes "^0000FF"+.name$+"^000000";
		mes "Voce nao tem nennhum equipamento!";
		close;
	}
	if (!getequipisenableref(.@part)) {
		mes "^0000FF"+.name$+"^000000";
		mes "Este equipament nao pode ser refinado!";
		close;
	}
	.@equip_id = getequipid(.@part);
	.@equip_refine = getequiprefinerycnt(.@part);
	setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);

	if (.@equip_refine >= 20) {
		mes "^0000FF"+.name$+"^000000";
		mes "Este equipamento ja esta no maximo!";
		close;
	}
	
	if (getequipweaponlv(.@part) == 0){
		set .@matuse,2;
	} else {
		set .@matuse,1;
	}
	mes "^0000FF"+.name$+"^000000";
	mes "Quantos "+.namemat$[.@matuse]+" voce quer usar?";
	mes "A cada material sua chance aumenta por "+.matchance+"%.";
	next;
	input .@amount;
	if (.@amount == 0) {
		mes "^0000FF"+.name$+"^000000";
		mes "Nenhum material? como vou refinar assim?";
		close;
		end;
	}
	if (countitem(.material[.@matuse]) < .@amount){
		mes $npc$;
		mes "Voce nao tem essa quantidade de materiais";
		close;
		end;
	}
	if (.@amount > .maxmat){
		mes $npc$;
		mes "Voce so pode ultilizar um maximo de "+.maxmat+" materiais!";
		close;
		end;
	}
	mes "^0000FF"+.name$+"^000000";
	mes "Entao vamos la!";
	next;
	delitem .material[.@matuse],.@amount;
	set .@failchance,rand(1,100);
	set .@schance, (.chance + (.@amount * .matchance));
	if (.@failchance > .@schance){
		specialeffect2 EF_SUI_EXPLOSION;
		if (.break == 1){ failedrefitem .@part; }
		if (.break == 2){ downrefitem .@part; }
		mes "^0000FF"+.name$+"^000000";
		mes "Nao foi desta vez...";
		close;
		end;
	}
	successrefitem .@part;
	mes "^0000FF"+.name$+"^000000";
	mes "Muito facil!";
	close;
	end;
	
OnInit:
	set .name$,"Ferreiro";						//Nome do NPC
	set .chance,10;								//Chance de refinar 10 = 10% (sem material)
	set .matchance,1;							//Quantos % sobem por material
	set .maxmat,90;								//Maximo de materiais que se pode usar (90 x 1 = 90%)
	setarray .namemat$,"Oridecon","Elunium";	//Nome dos materiais abaixo
	setarray .material[1],984,985;				//Material que vai ser usado (984 - Oridecon 985 - Elunium)
	set .break,1;								//1 - Errar quebra / 2 - Errar desce refinamento / 3 - Nada acontece ao errar
	set .price,25000;							//Preco para refinar
	end;
}

 

Amigo, boa tarde.

Sei que já tem tempo, mas peguei seu script que achei bem interessante e dei uma mexida.

Vou postar aqui, vai que a galera precise de um UP.

 

Coloquei refine por item especifico como no quadro abaixo:

 

LVL ITEM 1 5 10 50 MATERIAL REFINO DE ATE
0 ARMOR 6225 16259 16261   Carnium Perfeito 10 10
4 WEAPON 6226 16258 16260   Bradium Perfeito 10 10
0 ARMOR 6241 16395 16396 17105 Elunium Perfeito 7 9
4 WEAPON 6240 16393 16394 17104 Oridecon Perfeito 7 9
0 ARMOR 7619 13610     Elunium Enriquecido 5 6
4 WEAPON 7620 13611     Oridecon Enriquecido 5 6
0 ARMOR 985       Elunium Refinado 1 4
4 WEAPON 984       Oridecon Refinado 1 4

 

LVL é o Weapon Level;

ITEM é o Type;

1; 5; 10; 50 são os códigos dos itens onde 1 equivale a 1 unidade e o resto são box's;

Material, alto explicativo;

De Ate é o nível de refinamento que o item será usado, exemplo:

Valk Armor +5

Utilizara 180 x 7619 - Elunium Enriquecido do nível 5 ao 6 e 6 ao 7.

Depois 360 x 6241 - Elinium Perfeito do nível 7 ao 10.

 

Tudo é configurável e o que não estava comentado eu comentei.

 

Ahh, sou novo em escrever por aqui, aceito criticas.

 

//==============Made by DoomSlayer=============
//Ferreiro Custom - Quanto mais materiais maior
//a chance de sucesso!
//=============================================
//==============Adaptation by JPontes=============
//Melhoria no script
//Adicionado chance por material especifico,
//weapon leave.
//http://www.vikingsro.com.br
//=============================================

prontera,150,180,3	script	Blacksmith Custom	63,{
	disable_items;
	mes "^0000FF"+.name$+"^000000";
	mes "Eu sou o melhor Ferreiro de Valhalla!";
	mes "Eu utilizo matéria-prima para realizar refinamentos em itens.";
	next;
	mes "^0000FF"+.name$+"^000000";
	mes "Para fazer este serviço, eu preciso de um valor simbólico de "+.price+" Zeny, assim ofereço "+.chance+"% de sucesso no refinamento!";
	mes "Caso você tenha os materiais necessarios, podemos chegar em "+(.chance + (.maxmat * .matchance))+"%.";
	next;
	mes "^0000FF"+.name$+"^000000";
	mes "Cada material, aumentamos em "+.matchance+"% a chance de sucesso!";
	mes "Quanto mais materiais você me der, mais chances de sucesso teremos!";
	next;
	if (.break == 1){
	mes "^0000FF"+.name$+"^000000";
	mes "^996600!^000000^ff0000ATENÇÃO^000000^996600!^000000";
	mes "Caso não obtenhamos sucesso, você poderá perder o item!";
	mes "Aconselho tirar todas as Card's do equipamento!";
	next;
	}
	switch(select("^00f000Vamos refinar^000000:Informações:^ff0000Não, obrigado!^000000")){
		case 1:
			mes "^0000FF"+.name$+"^000000";
			mes "Qual equipamento que você quer refinar?";
			next;
			goto OnRefine;
			end;
		case 2:
			mes "^0000FF"+.name$+"^000000";
			mes "Os itens necessários para o refinamento são:";
			
			for( .@i = 0; .@i < getarraysize(.material); .@i++ )
			mes "{"+.material[.@i]+"} - "+.namemat$[.@i];
		
			next;
			switch(select("Escolher equipamento:Vou buscar os materiais")){
			case 1:
			goto OnRefine;
			case 2:
			mes "^0000FF"+.name$+"^000000";
			mes "Volte quando precisar de meus serviços!";
			close;
			end;
			}
		case 3:
			mes "^0000FF"+.name$+"^000000";
			mes "Volte quando precisar de meus serviços!";
			close;
			end;
	}
OnRefine:
	setarray .@indices[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW;
	for(.@i = 1; .@i<getarraysize(.@indices); ++.@i) {			
		if(getequipisequiped(.@indices[.@i])) {
			.@menu$ = .@menu$ + F_getpositionname(.@indices[.@i]) + "-[" + getequipname(.@indices[.@i]) + "]";
			.@equipped = 1;
		}
		.@menu$ = .@menu$ + ":";
	}
	if (.@equipped == 0) {
		mes "^0000FF"+.name$+"^000000";
		mes "Você não está equipando nada!";
		close;
	}
	
	set .@part, .@indices[ select(.@menu$) ];
	

	if (!getequipisenableref(.@part)) {
		mes "^0000FF"+.name$+"^000000";
		mes "Este equipamento não pode ser refinado!";
		close;
	}
	.@equip_id = getequipid(.@part);
	.@equip_refine = getequiprefinerycnt(.@part);
	setarray .@card[0], getequipcardid(.@part,0), getequipcardid(.@part,1), getequipcardid(.@part,2), getequipcardid(.@part,3);
	// +10 não refinar
	if (.@equip_refine >= 10) { // max refine
		mes "^0000FF"+.name$+"^000000";
		mes "Este equipamento já está +10!";
		mes "Escolha outro equipamento:";
			next;
			goto OnRefine;
			end;
		
	// 0 a 4
	} else if((.@equip_refine >= 0) && (.@equip_refine <= 4)){
	if (getequipweaponlv(.@part) == 0){
		set .@matuse,1;
	} else {
		set .@matuse,0;
	}
	goto OnRefineOk;
		
	// 5 a 6
	} else if((.@equip_refine >= 5) && (.@equip_refine <= 6)){
	if (getequipweaponlv(.@part) == 0){
		set .@matuse,3;
	} else {
		set .@matuse,2;
	}
	goto OnRefineOk;
		
	// 7 a 9	
	} else if((.@equip_refine >= 7) && (.@equip_refine <= 9)){
	if (getequipweaponlv(.@part) == 0){
		set .@matuse,5;
	} else {
		set .@matuse,4;
	}
	goto OnRefineOk;
		
	// 10 + (tirar os comentarios abaixo caso seja refine > 10
//	} else if(.@equip_refine = 9){
//	if (getequipweaponlv(.@part) == 0){
//		set .@matuse,7;
//	} else {
//		set .@matuse,6;
//	}
//	goto OnRefineOk;
	}	
	
	OnRefineOk:
	mes "^0000FF"+.name$+"^000000";
	mes "Quantos {"+.material[.@matuse]+"} - "+.namemat$[.@matuse]+" Você quer usar?";
	mes "Lembrando que cada material sua chance aumenta por "+.matchance+"%.";
	next;
	input .@amount;
	if (.@amount == 0) {
		mes "^0000FF"+.name$+"^000000";
		mes "Nenhum material? Não consigo garantir o sucesso se você não me ajudar também!";
		close;
		end;
	}
	if (countitem(.material[.@matuse]) < .@amount){
		mes "^0000FF"+.name$+"^000000";
		mes "Você não tem essa quantidade de materiais";
		close;
		end;
	}
	if (.@amount > .maxmat){
		mes "^0000FF"+.name$+"^000000";
		mes "Você so pode ultilizar um maximo de "+.maxmat+" materiais!";
		close;
		end;
	}
	mes "^0000FF"+.name$+"^000000";
	mes "Entao vamos la!";
		set .@percent, .@amount + .chance;
	mes "Você acumulou um percentual de "+.@percent+"%!";
	next;
	
	delitem .material[.@matuse],.@amount;
	set .@failchance,rand(1,100);
	set .@schance, (.chance + (.@amount * .matchance));
	if (.@failchance > .@schance){
		specialeffect2 EF_SUI_EXPLOSION;
		if (.break == 1){ failedrefitem .@part; }
		if (.break == 2){ downrefitem .@part; }
		mes "^0000FF"+.name$+"^000000";
		mes "Não foi desta vez...";
		close;
		end;
	}
	successrefitem .@part;
	mes "^0000FF"+.name$+"^000000";
	mes "Muito fácil!";
	close;
	end;
	
OnInit:
	set .name$,"Ferreiro Viking";				//Nome do NPC
	set .chance,10;								//Chance de refinar 10 = 10% (sem material)
	set .matchance,1;							//Quantos % sobem por material
	set .maxmat,90;								//Maximo de materiais que se pode usar (90 x 1 = 90%)
	setarray .namemat$,							//Lista dos itens utilizados para o refine
	"Oridecon",
	"Elunium",
	"Oridecon Enriquecido",
	"Elunium Enriquecido",
	"Oridecon Perfeito",
	"Elunium Perfeito"
//	"Bradium Perfeito"
//	"Carnium Perfeito"
	;
	setarray .material[0],						//Lista dos id
	984,
	985,
	7620,
	7619,
	6240,
	6241
//	6226
//	6225
	;
	set .break,1;								//1 - Errar quebra / 2 - Errar desce refinamento / 3 - Nada acontece ao errar
	set .price,25000;							//Preco para refinar
	end;
}

 

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...