Neverwinter Nights
Menú
Gamersmafia es ahora un archivo de solo lectura.

Palankas!

Tengo este codigo que recoji de un puzzle con palankas y que lo modifique a mi manera… [code:1:06e7c9e6cd]void main() { // Sequencia de les palanques “LEVER_n” string sLeverSequence = “1234”; // El tag de la palanca object oPalank = GetLastUsedBy() // Missatge quan encertas string sEncert = “Parece que has activado una parte del mecanismo con exito”; // Missatge quan falles string sFalla = “Parece que el mecanismo vuelve a su normalidad”; // Missatge quan completes string sComplet = “El campo de fuerza parece debilitarse”; // La porta que s’obra quan acabem el puzzle object oDoor = GetObjectByTag (“DOOR_1”); // Terremoto final object oTarget=GetWaypointByTag(“gnomo_earthq”); location lLoc=GetLocation(oTarget); // The object where the “last lever used” is stored object oLeverStatus = GetObjectByTag (“LEVER_1”); // Get the count of the number of valid levers used so far (0 if none) int iLeverCount = GetLocalInt (oLeverStatus, “LEVER_COUNT”); // Get the number of the lever being used right now int iThisLever = StringToInt (GetSubString (GetTag (OBJECT_SELF), 6, 1)); // Get the number of the lever we expect to be used int iNextLeverExpected = StringToInt (GetSubString (sLeverSequence, iLeverCount, 1)); // Do the lever animation stuff for the lever we just used ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE); ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE); // See if the lever used was what we expected if (iThisLever == iNextLeverExpected) { // We got the lever we expected. Increment the lever count AssignCommand(oPalank,ActionSpeakString(sEncert)); iLeverCount++; // Check if we have completed the puzzle if (iLeverCount >= GetStringLength (sLeverSequence)) { // No more levers to use, puzzle is complete !! // Reset the lever count iLeverCount = 0; // Open the door !! DelayCommand(4.0, ActionCastFakeSpellAtLocation(SPELL_EARTHQUAKE, lLoc)); AssignCommand(oPalank,ActionSpeakString(sComplet)); AssignCommand (oDoor, ActionOpenDoor(oDoor)); SetLocked (oDoor, FALSE); } } else { // The lever used was *not what we expected. So, reset the lever count iLeverCount = 0; AssignCommand(oPalank,ActionSpeakString(sFalla)); } // Store the current lever count SetLocalInt (oLeverStatus, “LEVER_COUNT”, iLeverCount); }[/code:1:06e7c9e6cd] Pero no me compila… parece que las strings de arriba o algo no estan bien o yo que se… teneis algua idea?

¿Has probado a ponerle un punto y coma al final de la 6ª línea?

object oPalank = GetLastUsedBy()

Mira a ver si es eso. Un saludo.

Cosas que se me ocurren, Lagarto:

1) Auron tiene razón. Falta un “;”.

2) “oPalank” no es “El tag de la palanca” sino “La criatura que accionó la palanca”. Esto no es muy importante, porque sólo se usa para hacer que el personaje “diga” las frases.

3) Las variables no hay porqué definirlas todas al principio de tirón. Eso es elegante, si, pero puede estar consumiendo recursos innecesariamente. Por ejemplo,

[code:1:3c21934c41] object oDoor = GetObjectByTag ("DOOR_1"); [/code:1:3c21934c41]

sólo tiene sentido definirlo cuando sabes que
(iLeverCount >= GetStringLength (sLeverSequence))
vale TRUE (o sea, que se va a abrir la puerta). Especialmente, la búsqueda que hace GetObjectByTag() es preferible ahorrarla hasta que sea imprescindible.

3) Las líneas

[code:1:3c21934c41] object oTarget = GetWaypointByTag("gnomo_earthq");
location lLoc = GetLocation(oTarget);[/code:1:3c21934c41]

Se pueden resumir en

[code:1:3c21934c41]location lLoc = GetLocation(GetWaypointByTag("gnomo_earthq"));[/code:1:3c21934c41]

Ya que ni “oTarget” ni GetWaypointByTag(“gnomo_earthq”) se usan en ninguna otra parte (creo). Le ahorras al NWN una variable.

4) Me ha costado un ratillo comprender cómo se va analizando la secuencia de las palancas almacenada en “sLeverLequence”. La verdad es que me parece un poco enrevesado todo el sistema… pero no digo que esté mal.

5) Asegúrate de que las 4 palancas tengan por etiquetas “LEVER_1” a “LEVER_4” [b:3c21934c41]EN EL IDIOMA INGLÉS Y EN EL ESPAÑOL[/b:3c21934c41], o todo esto es muy probable que no te funcione en absoluto. Ya lo he visto antes: Uno pone una etiqueta en un ubicado que ha cogido de alguna parte y ya no funciona… porque tiene una etiqueta ‘rara’ en inglés que PREVALECE sobre los demás idiomas.

Un saludo.

este script es de hace un tiempo , cuando era mongui scripteando (aun lo soy pero menos ). Gracia sigualmente por el interes.

Que no, que no, Lagarto. No escribía por sacarte defectos, sino cosas que se me ocurrían como “mejorables”.

Si te fijas, el script te funcionaría sin hacer nada de lo que sugiero. Son sólo detalles para afinar un poco más a la hora de economizar recursos del NWN. Al cabo de un tiempo, se notan bastante en el lag.

Hay gente con suerte que tiene un cañón de máquina o una conexión estilo Banco, pero como en mi caso me he tenido que ceñir a máquinas “que se quedan antiguas” o a conexiones domésticas, de eso de reducir el lag algo sé. Será la envidia que me dan pero… ¿cómo irían los servidores “potentes” si los scripts se afinaran siempre al máximo?.

En cualquier caso, nada que decir. Si tienes un problema y lo solucionas, lo que hagas no estará tan mal. ¿O no?

Venga. Un saludo.

Los más activos en Scripting