Jump to content
  • 0

Npc - Party reclutador de jugadores para subir de nivel


Josemaaaaa

Question


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  1.00
  • Content Count:  1
  • Reputation:   0
  • Joined:  05/21/25
  • Last Seen:  

Como puedo crear un npc que le de la oportunidad de un lider de party invitar jugadores desde el npc.

ejemplo: +30lvl minimo y tambien el job tipo un champ o un hp para heals, arqueros etc... (soporte)

1 npc cartel anunciador de partys, reclutador.

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  243
  • Reputation:   107
  • Joined:  06/02/12
  • Last Seen:  

You can use getunits, isloggedin, and party_addmember to display nearby players and allow the party leader to invite them directly from the NPC. You can use an NPC like this example poster to allow party leaders to post announcements filtered by level, class, or role, and other players can join if they meet the requirements.

SPA:

Spoiler

Puedes usar getunits, isloggedin, y party_addmember para mostrar jugadores cercanos y permitir que el líder de party los invite directamente desde el NPC. Puedes usar un NPC como este cartel ejemplo para que líderes de party publiquen anuncios filtrando por nivel, clase o rol, y otros jogadores se unan si cumplen os requisitos.


 

prontera,149,164,5	script	Cartel de Reclutamiento	4_BOARD3,{
	setarray .@jobs,Job_Knight,Job_Priest,Job_Wizard,Job_Blacksmith,Job_Hunter,Job_Assassin,Job_Crusader,Job_Monk,Job_Sage,Job_Rogue,Job_Alchemist,Job_Bard,Job_Dancer,Job_Gunslinger,Job_Ninja,Job_Star_Gladiator,Job_Soul_Linker;
	if (checkre(0))
		setarray .@jobs[getarraysize(.@jobs)],Job_Summoner;

	mes "Ves un cartel viejo. Alguien lo ha reutilizado para otro propósito...";
	mes "Parece usarse para ^EE8800reclutar miembros para grupos^000000 de aventura.";
	setarray .@roles$,"Dano","Curador","Tank","Soporte";
	switch(select("Publicar un anuncio", "Leer los anuncios", "Alejarme")) {
		case 1:
			clear;
			if (!getcharid(1)) {
				mes "Estoy solo. No tengo party.";
				close;
			}
			if (getcharid(0) != getpartyleader(getcharid(1), 2)) {
				mes "No soy el líder de mi party. No puedo publicar nada aquí.";
				close;
			}
			.@party_id = getcharid(1);

			for (.@i = 0; .@i < getarraysize($@party_ids); .@i++) {
				if ($@party_ids[.@i] == .@party_id) {
					mes "Já hay un anuncio de mi party aquí. Nada que hacer.";
					close;
				}
			}

			mes "Penso un poco...";
			mes "¿Qué nivel mínimo debería requerir?";
			input .@min_level,0,MAX_LEVEL;
			clear;
			if (.@min_level > 1)
				mes "Nivel mínimo : " + .@min_level;
			else
				mes "Sin nivel mínimo";

			switch(select("Seleccionar roles", "Seleccionar clases", "Cancelar")) {
			    case 1:
			        deletearray .@selected_roles[0], getarraysize(.@roles$);
			        .@accept_all = false;

			        while (1) {
			            .@menu$ = "";

			            if (.@accept_all)
			                .@menu$ += "^ff0000Desmarcar todos^000000:";
			            else
			                .@menu$ += "[  ] Cualquier rol^000000:";

			            for (.@i = 0; .@i < getarraysize(.@roles$); .@i++) {
			                .@menu$ += (.@selected_roles[.@i] ? "^0000FF[+] " : "^808080[  ] ") + .@roles$[.@i] + "^000000:";
			            }

			            .@menu$ += "Confirmar selección";

			            .@opt = select(.@menu$);

			            if (.@opt == 1) {
			                .@accept_all = !.@accept_all;
			                if (.@accept_all) {
			                    for (.@i = 0; .@i < getarraysize(.@roles$); .@i++)
			                        .@selected_roles[.@i] = true;
			                } else {
			                    deletearray .@selected_roles[0], getarraysize(.@roles$);
			                }
			            }
			            else if (.@opt == getarraysize(.@roles$) + 2) {
			                .@valid = false;
			                for (.@i = 0; .@i < getarraysize(.@roles$); .@i++) {
			                    if (.@selected_roles[.@i]) {
			                        .@valid = true;
			                        break;
			                    }
			                }
			                if (!.@valid) {
			                    mes "Necesito seleccionar al menos un rol.";
			                    continue;
			                }
			                break;
			            }
			            else {
			                .@index = .@opt - 2;
			                .@selected_roles[.@index] = !.@selected_roles[.@index];
			                if (.@accept_all && !.@selected_roles[.@index])
			                    .@accept_all = false;
			            }
			        }

			        if (.@accept_all) {
			            .party_filter_type$[.@party_id] = "role";
			            $@party_filter_values$[.@party_id] = "cualquier";
			        } else {
			            .@str$ = "";
			            for (.@i = 0; .@i < getarraysize(.@roles$); .@i++) {
			                if (.@selected_roles[.@i]) {
			                    .@str$ += (.@str$ == "" ? "" : ",") + .@roles$[.@i];
			                }
			            }
			            .party_filter_type$[.@party_id] = "role";
			            $@party_filter_values$[.@party_id] = .@str$;
			        }

			        mes "Roles confirmados. Anuncio publicado.";
			        .@index = getarraysize($@party_ids);
			        $@party_ids[.@index] = .@party_id;
			        $@party_min_level[.@party_id] = .@min_level;
			        $@party_leader$[.@party_id] = strcharinfo(0);

					if ($@party_filter_values$[.@target_pid] != "cualquier")
						.@announce$[.@count++] = replacestr(.@str$, ",", " / ");
			        break;

			    case 2:
			        deletearray .@selected_classes[0], getarraysize(.@jobs);
			        .@accept_all = false;

			        while (1) {
			            .@menu$ = "";

			            if (.@accept_all)
			                .@menu$ += "^ff0000Desmarcar todas^000000:";
			            else
			                .@menu$ += "[  ] Cualquier clase^000000:";

			            for (.@i = 0; .@i < getarraysize(.@jobs); .@i++) {
			                .@menu$ += (.@selected_classes[.@i] ? "^0000FF[+] " : "^808080[  ] ") + jobname(.@jobs[.@i]) + "^000000:";
			            }

			            .@menu$ += "Confirmar selección";
			            .@opt2 = select(.@menu$);
			            if (.@opt2 == 1) {
			                .@accept_all = !.@accept_all;
			                if (.@accept_all) {
			                    for (.@i = 0; .@i < getarraysize(.@jobs); .@i++)
			                        .@selected_classes[.@i] = true;
			                } else {
			                    deletearray .@selected_classes[0], getarraysize(.@jobs);
			                }
			            }
			            else if (.@opt2 == getarraysize(.@jobs) + 2) {
			                .@valid2 = false;
			                for (.@i = 0; .@i < getarraysize(.@jobs); .@i++) {
			                    if (.@selected_classes[.@i]) {
			                        .@valid2 = true;
			                        break;
			                    }
			                }
			                if (!.@valid2) {
			                    mes "Necesito seleccionar al menos una clase.";
			                    continue;
			                }
			                break;
			            }
			            else {
			                .@index2 = .@opt2 - 2;
			                .@selected_classes[.@index2] = !.@selected_classes[.@index2];
			                if (.@accept_all && !.@selected_classes[.@index2])
			                    .@accept_all = false;
			            }
			        }

			        if (.@accept_all) {
			            .party_filter_type$[.@party_id] = "class";
			            $@party_filter_values$[.@party_id] = "cualquier";
			        } else {
			            .@str$ = "";
			            for (.@i = 0; .@i < getarraysize(.@jobs); .@i++) {
			                if (.@selected_classes[.@i]) {
			                    .@str$ += (.@str$ == "" ? "" : ",") + .@jobs[.@i];
			                }
			            }
			            .party_filter_type$[.@party_id] = "class";
			            $@party_filter_values$[.@party_id] = .@str$;

						explode(.@class_array$, .@str$, ",");
						if (getarraysize(.@class_array$) < 4) {
							for (.@i = 0; .@i < getarraysize(.@class_array$); .@i++)
								.@class_array$[.@i] = jobname(atoi(.@class_array$[.@i]));
							.@announce$[.@count++] = implode(.@class_array$, " / ");
						}
						else
							.@announce$[.@count++] = "de ciertas clases";

			        }

			        mes "Clases confirmadas. Anuncio publicado.";
					mes "Ahora, a esperar que alguien se una.";
			        .@index = getarraysize($@party_ids);
			        $@party_ids[.@index] = .@party_id;
			        $@party_min_level[.@party_id] = .@min_level;
			        $@party_leader$[.@party_id] = strcharinfo(0);
					break;

			    case 3:
			        close;
			}
			if ($@party_min_level[.@party_id] > 1)
				.@announce$[.@count++] = "nivel " + $@party_min_level[.@party_id] + "+";
			if (.@announce$[0] != "")
				announce strcharinfo(0) + " está buscando miembros " + implode(.@announce$, " ") + " para su grupo.",0;
			else
				announce strcharinfo(0) + " está buscando miembros para su grupo.",0;
			close;
		case 2:
			if (getarraysize($@party_ids) == 0) {
				mes "El cartel está vacío. Nadie está reclutando ahora.";
				close;
			}
			for (.@i = 0; .@i < getarraysize($@party_ids); .@i++) {
				.@pid = $@party_ids[.@i];
				.@menu$ += "Party de " + $@party_leader$[.@pid] + " (Lv " + $@party_min_level[.@pid] + "+):";
			}

			.@chosen = select(.@menu$) - 1;
			.@target_pid = $@party_ids[.@chosen];
			
			clear;
			mes " - Líder: " + $@party_leader$[.@target_pid];
			if ($@party_min_level[.@target_pid] > 1)
				mes " - Nivel requerido: " + $@party_min_level[.@target_pid];

			if (.party_filter_type$[.@target_pid] == "role") {
				mes " - Roles: " + replacestr($@party_filter_values$[.@target_pid], ",", " / ");
			}
			else if (.party_filter_type$[.@target_pid] == "class") {
				if ($@party_filter_values$[.@target_pid] == "cualquier") {
					mes " - Clasess: Cualquier clase";
				}
				else {
					explode(.@class_array$, $@party_filter_values$[.@target_pid], ",");
					.@class_str$ = "";
					for (.@i = 0; .@i < getarraysize(.@class_array$); .@i++) {
					    .@class_str$ += (.@class_str$ == "" ? "" : ", ") + jobname(atoi(.@class_array$[.@i]));
					}

					mes "Clases: " + .@class_str$;
				}
			} else {
				mes " - Sin restricciones de clase.";
			}

			if (BaseLevel < $@party_min_level[.@target_pid]) {
				mes "Pero... no tengo el nivel suficiente.";
				close;
			}

			if (.party_filter_type$[.@target_pid] == "class") {
				if ($@party_filter_values$[.@target_pid] != "cualquier") {
					.@my_class$ = "," + Class + ",";
					.@allowed$ = "," + $@party_filter_values$[.@target_pid] + ",";
					if (!compare(.@allowed$, .@my_class$)) {
						mes "Mi clase no está permitida. Qué lástima.";
						close;
					}
				}
			}

			else if (.party_filter_type$[.@target_pid] == "role") {
				if ($@party_filter_values$[.@target_pid] == "Curador") {
					if (!(BaseJob == Job_Acolyte || BaseJob == Job_Priest)) {
						mes "Mi clase no corresponde al rol que esta party necesita.";
						close;
					}
				}

			}
			if (getcharid(1)) {
				mes "Ya pertenezco a una party. No puedo unirme a otra.";
				close;
			}
			mes "Doy un paso al frente, decidido a unirme...";
			.@result = party_addmember(.@target_pid, getcharid(0));
			if (.@result == 1)
				mes "Ahora formo parte de esa party.";
			else if (.@result == -4)
				mes "El grupo está lleno";
			else
				mes "Algo falló.";
			close;

		case 3:
			close;
	}

OnInit:
	deletearray $@party_ids[0];
	end;
}

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  243
  • Reputation:   107
  • Joined:  06/02/12
  • Last Seen:  

.

Edited by Racaae
duplicate
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...