Jump to content
  • 0

Ayuda Duda como Resolver Acumulacion de Pasivas Mastery y_y


WarderS

Question

Buenas tardes Adapte ese codigo pero me acumula solo cuando se hace subclass overlord,bishop,Prophet,Elemental Summoner,Elven Oracle,Elven Elder,Phantom Summoner,Shillien Oracle,Shillien Elder se acumula los 2 mistery Light y Robe pero con las demas profesiones no quien me puede ayudar a solucionar este problema

 

Boa tarde, adaptei esse código mas ele só acumula ao subclassificar overlord, bispo, Profeta, Elemental Summoner, Elven Oracle, Elven Elder, Phantom Summoner, Shillien Oracle, Shillien Elder acumula os 2 mistérios Light e Robe mas com as outras profissões isso acontece não Quem pode me ajudar a resolver este problema?

 

Gracias

 

Index: /Trunk/L2_GameServer/java/config/intrepid.properties
===================================================================
--- /Trunk/L2_GameServer/java/config/intrepid.properties (revision 30)
+++ /Trunk/L2_GameServer/java/config/intrepid.properties (revision 49)
@@ -30,2 +30,5 @@
#---------------------------------------------
AllowedNPCTypes = L2Boss,L2Chest,L2FestivalMonster,L2Minion,L2Monster,L2Pet,L2RaidBoss,L2SiegeGuard,L2SiegeNpc,L2ControlTower,L2GrandBoss,L2Artefact,L2FortManager,L2FortSiegeNpc,L2FortSiegeGuard,L2FortCommander,L2FortBallista
+
+# Sub stuck
+SubStucking = False
Index: /Trunk/L2_GameServer/java/net/sf/l2j/Config.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/Config.java (revision 30)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/Config.java (revision 49)
@@ -652,4 +652,6 @@
    /** List of NPC types that won't allow casting */
    public static FastList<String> LIST_ALLOWED_NPC_TYPES = new FastList<String>();
+    /** stuck sub **/
+    public static boolean ACUMULATIVE_SUBCLASS_SKILLS;

    /** ************************************************** **/
@@ -1552,4 +1554,5 @@
	                	LIST_ALLOWED_NPC_TYPES.add(npc_type);
	                }
+	                ACUMULATIVE_SUBCLASS_SKILLS = Boolean.parseBoolean(intrepidSettings.getProperty("SubStucking", "False"));
	            }
	            catch (Exception e)
Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java (revision 8)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java (revision 49)
@@ -816,6 +816,6 @@


-        final Race npcRace = getVillageMasterRace();
-        final ClassType npcTeachType = getVillageMasterTeachType();
+        getVillageMasterRace();
+        getVillageMasterTeachType();

        PlayerClass currClass = PlayerClass.values()[charClassId];
@@ -862,22 +862,4 @@
                        availSubs.remove(availSub);                        
                }
-
-                if (npcRace == Race.Human || npcRace == Race.Elf)
-                {
-                    // If the master is human or light elf, ensure that fighter-type
-                    // masters only teach fighter classes, and priest-type masters
-                    // only teach priest classes etc.
-                    if (!availSub.isOfType(npcTeachType)) availSubs.remove(availSub);
-
-                    // Remove any non-human or light elf classes.
-                    else if (!availSub.isOfRace(Race.Human)
-                        && !availSub.isOfRace(Race.Elf)) availSubs.remove(availSub);
-                }
-                else
-                {
-                    // If the master is not human and not light elf,
-                    // then remove any classes not of the same race as the master.
-                    if (!availSub.isOfRace(npcRace)) availSubs.remove(availSub);
-                }
            }
        }
Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 48)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 49)
@@ -231,4 +231,5 @@
    // Character Skill SQL String Definitions:
	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE charId=? AND class_index=?";
+	private static final String ACUMULATE_SKILLS_FOR_CHAR_SUB = "SELECT skill_id,skill_level FROM character_skills WHERE charId=? ORDER BY skill_id , skill_level ASC";
	private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (charId,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)";
	private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND charId=? AND class_index=?";
@@ -7557,10 +7558,14 @@
		try
		{
+			// L2 Emu Addon
+			boolean isAcumulative = Config.ACUMULATIVE_SUBCLASS_SKILLS;
+			
			// Retrieve all skills of this L2PcInstance from the database
			con = L2DatabaseFactory.getInstance().getConnection();
-			PreparedStatement statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR);
-			
+			PreparedStatement statement = con.prepareStatement(isAcumulative ? ACUMULATE_SKILLS_FOR_CHAR_SUB : RESTORE_SKILLS_FOR_CHAR);
			statement.setInt(1, getObjectId());
-			statement.setInt(2, getClassIndex());
+			if (!isAcumulative)
+				// L2 Emu Addon
+				statement.setInt(2, getClassIndex());
			ResultSet rset = statement.executeQuery();

Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/base/PlayerClass.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/base/PlayerClass.java (revision 6)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/base/PlayerClass.java (revision 49)
@@ -209,5 +209,4 @@

	private static final Set<PlayerClass> mainSubclassSet;
-	private static final Set<PlayerClass> neverSubclassed = EnumSet.of(Overlord, Warsmith);

	private static final Set<PlayerClass> subclasseSet1 = EnumSet.of(DarkAvenger, Paladin, TempleKnight, ShillienKnight);
@@ -222,5 +221,4 @@
	{
		Set<PlayerClass> subclasses = getSet(null, Third);
-		subclasses.removeAll(neverSubclassed);

		mainSubclassSet = subclasses;
@@ -269,9 +267,38 @@
				switch (_race)
				{
+					case Human:
+						subclasses.removeAll(getSet(DarkElf, Third));
+						subclasses.removeAll(getSet(Elf, Third));
+						subclasses.removeAll(getSet(Orc, Third));
+						subclasses.removeAll(getSet(Dwarf, Third));
+						subclasses.removeAll(getSet(Kamael, Third));
+						break;
+					case DarkElf:
+						subclasses.removeAll(getSet(Human, Third));
+						subclasses.removeAll(getSet(Elf, Third));
+						subclasses.removeAll(getSet(Orc, Third));
+						subclasses.removeAll(getSet(Dwarf, Third));
+						subclasses.removeAll(getSet(Kamael, Third));
+						break;
					case Elf:
+						subclasses.removeAll(getSet(Human, Third));
						subclasses.removeAll(getSet(DarkElf, Third));
-						break;
-					case DarkElf:
+						subclasses.removeAll(getSet(Orc, Third));
+						subclasses.removeAll(getSet(Dwarf, Third));
+						subclasses.removeAll(getSet(Kamael, Third));
+						break;
+					case Orc:
+						subclasses.removeAll(getSet(Human, Third));
+						subclasses.removeAll(getSet(DarkElf, Third));
						subclasses.removeAll(getSet(Elf, Third));
+						subclasses.removeAll(getSet(Dwarf, Third));
+						subclasses.removeAll(getSet(Kamael, Third));
+						break;
+					case Dwarf:
+						subclasses.removeAll(getSet(Human, Third));
+						subclasses.removeAll(getSet(DarkElf, Third));
+						subclasses.removeAll(getSet(Orc, Third));
+						subclasses.removeAll(getSet(Elf, Third));
+						subclasses.removeAll(getSet(Kamael, Third));
						break;
				}
@@ -294,6 +321,4 @@
				else
					subclasses.removeAll(EnumSet.of(femaleSoulbreaker));
-				if (player.getTotalSubClasses() < 2)
-					subclasses.removeAll(EnumSet.of(inspector));
			}
		}
Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 49)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 50)
@@ -7575,12 +7575,20 @@
				int id = rset.getInt("skill_id");
				int level = rset.getInt("skill_level");
+				int chclass = rset.getInt("class_index");

				if (id > 9000 && id < 9007)
					continue; // fake skills for base stats
-
+				if(chclass != getClassIndex())
+
+				{
+					// Remove armor mastery from other classes
+					if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
+				}
+					
				// Create a L2Skill object for each record
				L2Skill skill = SkillTable.getInstance().getInfo(id, level);
-
-				// Add the L2Skill object to the L2Character _skills and its Func objects to the calculator set of the L2Character
+					
+				// Add the L2Skill object to the L2Character _skills and its
+				// Func objects to the calculator set of the L2Character
				super.addSkill(skill);
				if (Config.CHECK_SKILLS && Config.CHECK_SKILLS_ACCESS_LEVEL_LIST.contains(getAccessLevel().getLevel()))
@@ -7594,5 +7602,5 @@
						removeSkill(skill);
					}
-			}
+				}

			rset.close();

 

Shot00000.jpg

GMDark

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

 

if(chclass != getClassIndex())

				{
					// Remove armor mastery from other classes
					if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
				}

 

Já consegui aquele vasto conhecimento nesse fórum louco 😄

Link to comment
Share on other sites


  • 0
hace 9 horas, lipiTanKEr dijo:
if(chclass != getClassIndex())

				{
					// Remove armor mastery from other classes
					if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
				}

 

Eu já fiz isso, modifiquei esses parâmetros com os das classes e a mesma coisa check

if(chclass != getClassIndex())
						{
						// Remove armor mastery from other classes
						   if(id == 15 || id == 49 || id == 50 || id == 51 || id == 118) continue;
						// if(id == 14 || id == 15 || id == 16 || id == 17 || id == 28 || id == 29 || id == 30 || id == 41 || id == 42 || id == 43 || id == 50 || id == 51 || id == 96 || id == 97 || id == 98 || id == 104 || id == 105 || id == 111 || id == 112 || id == 115 || id == 118) continue;
					    // if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
						// if(id == 118 || id == 88 || id == 89 || id == 90 || id == 91 || id == 92 || id == 93 || id == 94 || id == 95 || id == 96 || id == 97 || id == 98 || id == 99 || id == 100 || id == 101 || id == 102 || id == 103 || id == 104 || id == 105 || id == 106 || id == 107 || id == 108 || id == 109 || id == 110 || id == 111 || id == 112 || id == 113 || id == 114 || id == 115 || id == 116 || id == 117) continue;
						}

 

GMDark

Link to comment
Share on other sites

  • 0

Aqui tem uma condição que compara as skills da classe base(getClassIndex()) com a subclasse(chclass).

if(chclass != getClassIndex())

Então se condição for verdadeira, id da skill da base cujo índice é diferente das skills da subclasse, ele encontra outra condição.

if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259)

Esses "id" são as skills que serão ignoradas.

id == 236 -----> Ignora o Mastery Light.

Então na teoria, para que elas não sejam ignoradas, basta remover o "id" de dentro dessa condição.

Ou simplismente remova tudo e libera geral.

if(chclass != getClassIndex())

				{
					// Remove armor mastery from other classes
					if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
				}


 

 

Já consegui aquele vasto conhecimento nesse fórum louco 😄

Link to comment
Share on other sites

  • 0
hace 1 hora, lipiTanKEr dijo:

Aqui tem uma condição que compara as skills da classe base(getClassIndex()) com a subclasse(chclass).

if(chclass != getClassIndex())

Então se condição for verdadeira, id da skill da base cujo índice é diferente das skills da subclasse, ele encontra outra condição.

if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259)

Esses "id" são as skills que serão ignoradas.

id == 236 -----> Ignora o Mastery Light.

Então na teoria, para que elas não sejam ignoradas, basta remover o "id" de dentro dessa condição.

Ou simplismente remova tudo e libera geral.

if(chclass != getClassIndex())

				{
					// Remove armor mastery from other classes
					if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
				}

 

nas 2 modificações não funcionou

Vou fazer um teste das seguintes formas e avisarei vocês

primeiro teste será assim adicionei os ids das habilidades ao invés das classes

if(chclass != getClassIndex())
						{
						// Remove armor mastery from other classes
						 if(id == 232 || id == 253 || id == 259 || id == 227 || id == 233  || id == 236 || id == 252 || id == 258 || id == 234 || id == 235  || id == 251) continue;
						// if(id == 14 || id == 15 || id == 16 || id == 17 || id == 28 || id == 29 || id == 30 || id == 41 || id == 42 || id == 43 || id == 50 || id == 51 || id == 96 || id == 97 || id == 98 || id == 104 || id == 105 || id == 111 || id == 112 || id == 115 || id == 118) continue;
					    // if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
						// if(id == 118 || id == 88 || id == 89 || id == 90 || id == 91 || id == 92 || id == 93 || id == 94 || id == 95 || id == 96 || id == 97 || id == 98 || id == 99 || id == 100 || id == 101 || id == 102 || id == 103 || id == 104 || id == 105 || id == 106 || id == 107 || id == 108 || id == 109 || id == 110 || id == 111 || id == 112 || id == 113 || id == 114 || id == 115 || id == 116 || id == 117) continue;
						}

 

O segundo teste vai ser assim, comentei tudo

if(chclass != getClassIndex())
						{
						// Remove armor mastery from other classes
						// if(id == 232 || id == 253 || id == 259 || id == 227 || id == 233  || id == 236 || id == 252 || id == 258 || id == 234 || id == 235  || id == 251) continue;
						// if(id == 14 || id == 15 || id == 16 || id == 17 || id == 28 || id == 29 || id == 30 || id == 41 || id == 42 || id == 43 || id == 50 || id == 51 || id == 96 || id == 97 || id == 98 || id == 104 || id == 105 || id == 111 || id == 112 || id == 115 || id == 118) continue;
					    // if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
						// if(id == 118 || id == 88 || id == 89 || id == 90 || id == 91 || id == 92 || id == 93 || id == 94 || id == 95 || id == 96 || id == 97 || id == 98 || id == 99 || id == 100 || id == 101 || id == 102 || id == 103 || id == 104 || id == 105 || id == 106 || id == 107 || id == 108 || id == 109 || id == 110 || id == 111 || id == 112 || id == 113 || id == 114 || id == 115 || id == 116 || id == 117) continue;
						}

Eu fiz o teste e vou te contar

Edited by GMDark

GMDark

Link to comment
Share on other sites

  • 0

SOLUCIONADO

 

/* CODIGO DE SUBACUMULATIVA */
	public synchronized void restoreSkills() {
	    boolean isAcumulative = Config.ACUMULATIVE_SUBCLASS_SKILLS;
	    try (Connection con = L2DatabaseFactory.getInstance().getConnection(false)) {
	        PreparedStatement statement;
	        if (Config.KEEP_SUBCLASS_SKILLS) {
	            statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR_ALT_SUBCLASS);
	            statement.setInt(1, getObjectId());
	        } else {
	            statement = con.prepareStatement(isAcumulative ? ACUMULATE_SKILLS_FOR_CHAR_SUB : RESTORE_SKILLS_FOR_CHAR);
	            statement.setInt(1, getObjectId());
	            if (!isAcumulative) {
	                statement.setInt(2, getClassIndex());
	            }
	        }

	        try (ResultSet rset = statement.executeQuery()) {
	            while (rset.next()) {
	                int id = rset.getInt("skill_id");
	                int level = rset.getInt("skill_level");

	                if (id > 9000) {
	                    // Fake skills for base stats, skipping
	                    continue;
	                }

	                if (!Config.KEEP_SUBCLASS_SKILLS && rset.getInt("class_index") != getClassIndex()) {
	                    // Remove specific skills from other classes
	                    if (id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue; // List of excluded skills
	                        continue;
	                }

	                // Create and add skill
	                L2Skill skill = SkillTable.getInstance().getInfo(id, level);
	                addSkill(skill);
	            }
	        }
	    } catch (Exception e) {
	        if (Config.ENABLE_ALL_EXCEPTIONS) {
	            e.printStackTrace();
	        }

	        LOGGER.warn("Could not restore character skills: " + e);
	    }
	}
	/* ======================== */

 

Edited by GMDark

GMDark

Link to comment
Share on other sites

  • 0
En 8/12/2023 a las 19:28, WarderS dijo:

SOLUCIONADO

/* CODIGO DE SUBACUMULATIVA */
	public synchronized void restoreSkills() {
	    boolean isAcumulative = Config.ACUMULATIVE_SUBCLASS_SKILLS;
	    try (Connection con = L2DatabaseFactory.getInstance().getConnection(false)) {
	        PreparedStatement statement;
	        if (Config.KEEP_SUBCLASS_SKILLS) {
	            statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR_ALT_SUBCLASS);
	            statement.setInt(1, getObjectId());
	        } else {
	            statement = con.prepareStatement(isAcumulative ? ACUMULATE_SKILLS_FOR_CHAR_SUB : RESTORE_SKILLS_FOR_CHAR);
	            statement.setInt(1, getObjectId());
	            if (!isAcumulative) {
	                statement.setInt(2, getClassIndex());
	            }
	        }

	        try (ResultSet rset = statement.executeQuery()) {
	            while (rset.next()) {
	                int id = rset.getInt("skill_id");
	                int level = rset.getInt("skill_level");

	                if (id > 9000) {
	                    // Fake skills for base stats, skipping
	                    continue;
	                }

	                if (!Config.KEEP_SUBCLASS_SKILLS && rset.getInt("class_index") != getClassIndex()) {
	                    // Remove specific skills from other classes
	                    if (id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue; // List of excluded skills
	                        continue;
	                }

	                // Create and add skill
	                L2Skill skill = SkillTable.getInstance().getInfo(id, level);
	                addSkill(skill);
	            }
	        }
	    } catch (Exception e) {
	        if (Config.ENABLE_ALL_EXCEPTIONS) {
	            e.printStackTrace();
	        }

	        LOGGER.warn("Could not restore character skills: " + e);
	    }
	}
	/* ======================== */

CODIGO CORREGIDO Y ACTUALIZADO

 

/* CODIGO DE SUBACUMULATIVA */
	public synchronized void restoreSkills() {
	    boolean isAcumulative = Config.ACUMULATIVE_SUBCLASS_SKILLS;
	    try (Connection con = L2DatabaseFactory.getInstance().getConnection(false)) {
	        // Eliminar habilidades específicas 146 y 147 antes de restaurar
	     // try (PreparedStatement deleteStatement = con.prepareStatement("DELETE FROM character_skills WHERE char_obj_id = ? AND skill_id IN (146, 147, 141, 249, 250)")) {
	        try (PreparedStatement deleteStatement = con.prepareStatement("DELETE FROM character_skills WHERE char_obj_id = ? AND skill_id IN (146, 147, 141, 249, 250, 227, 233, 236, 252, 258, 234, 235, 251, 231, 232, 253, 259)")) {	
	            deleteStatement.setInt(1, getObjectId());
	            deleteStatement.executeUpdate();
	        }

	        PreparedStatement statement;
	        if (Config.KEEP_SUBCLASS_SKILLS) {
	            statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR_ALT_SUBCLASS);
	            statement.setInt(1, getObjectId());
	        } else {
	            statement = con.prepareStatement(isAcumulative ? ACUMULATE_SKILLS_FOR_CHAR_SUB : RESTORE_SKILLS_FOR_CHAR);
	            statement.setInt(1, getObjectId());
	            if (!isAcumulative) {
	                statement.setInt(2, getClassIndex());
	            }
	        }

	        // Usamos un conjunto para almacenar los skills que ya han sido agregados
	        Set<Integer> addedSkills = new HashSet<>();

	        try (ResultSet rset = statement.executeQuery()) {
	            while (rset.next()) {
	                int id = rset.getInt("skill_id");
	                int level = rset.getInt("skill_level");

	             // if (id > 9000 || id == 146 || id == 147 || id == 141 || id == 249 || id == 250) {
	                if (id > 9000 || id == 146 || id == 147 || id == 141 || id == 249 || id == 250 || id == 227 || id == 233  || id == 236 || id == 252 || id == 258  || id == 234 || id == 235 || id == 251 || id == 231 || id == 232 || id == 253 || id == 259) {
	                    // Fake skills for base stats or excluded skills, skipping
	                    continue;
	                }

	                // Verifica si la habilidad ya ha sido añadida para evitar duplicados
	                if (addedSkills.contains(id)) {
	                    continue;
	                }

	                // Omite habilidades específicas de otras clases si no se deben conservar las habilidades de subclase
	                if (!Config.KEEP_SUBCLASS_SKILLS && rset.getInt("class_index") != getClassIndex()) {
	                    continue; // Solo continuar si no es la clase actual y no estamos manteniendo las habilidades de subclase
	                }

	                // Añade la habilidad y registra su ID para evitar duplicados
	                L2Skill skill = SkillTable.getInstance().getInfo(id, level);
	                addSkill(skill);
	                addedSkills.add(id);
	            }
	        }
	    } catch (Exception e) {
	        if (Config.ENABLE_ALL_EXCEPTIONS) {
	            e.printStackTrace();
	        }

	        LOGGER.warn("Could not restore character skills: " + e);
	    }
	}

 

 

Edited by WarderS

GMDark

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.
Note: Your post will require moderator approval before it will be visible.

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.

Loading...



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.