Jump to content
  • 0

NPC que aumenta % refino por QT de item dado


KRMizu

Question


  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.01
  • Content Count:  29
  • Reputation:   0
  • Joined:  05/26/18
  • Last Seen:  

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.

 

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  21
  • Topics Per Day:  0.01
  • Content Count:  130
  • Reputation:   70
  • Joined:  09/03/14
  • Last Seen:  

Verifique os npcs de refine nativos do emulador.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  3
  • Topics Per Day:  0.00
  • Content Count:  68
  • Reputation:   8
  • Joined:  05/12/20
  • Last Seen:  

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
	}
}

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  6
  • Reputation:   1
  • Joined:  11/01/20
  • Last Seen:  

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
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  2
  • Reputation:   2
  • Joined:  05/19/20
  • Last Seen:  

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
Link to comment
Share on other sites

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.

×
×
  • Create New...