Resultados 1 al 1 de 1

Tema: Introducción

  1. #1
    Super Moderator Avatar de Fearless
    Fecha de Ingreso
    20 oct, 08
    Ubicación
    Argentina
    Mensajes
    5,209

    Introducción

    Introducción

    La idea de esto es hacer una guía básica sobre como fixear bugs simples, para que puedan colaborar con arreglos. Algunas cosas son muy fáciles y ni necesitan tener un servidor propio, y otras (como fixear quest), sí tienen que tenerlo, porque deben testear los cambios que realizan.
    Esto no es una clase de SQL, explicaré lo mínimo necesario para que puedan fixear, con mis palabras (tal vez no sean los términos apropiados que correspondan).

    Acá les dejo un macro para el reino Cataclysm (no funciona en el WotLK), que les dice el entry y el guid del npc que estén targeteando, les será muy útil para todo lo que veremos abajo.
    Código:
    /run print("-- ".. UnitName("target").." - ID:", tonumber((UnitGUID("target")):sub(-12, -9), 16), "- Guid:", tonumber((UnitGUID("target")):sub(14, 19), 16))
    esto mostraría en el chat, por ejemplo:
    -- Keely Dunwald - ID: 46177 - Guid: 12444

    Este es para WotLK, pero solo dice el entry.
    Código:
    /run print("-- ".. UnitName("target").." - ID:", tonumber((UnitGUID("target")):sub(7, 12), 16))


    SELECT * FROM

    "Select * From" es un comando para seleccionar/buscar datos de la DB.
    Es importantísimo usarlo antes de empezar a tirar código, para juntar info de lo que vamos a arreglar, de lo que ya está actualmente en la DB (base de datos).
    Puede que el npc que vayamos a hacerle SAI (Smart_scripts), ya tenga algo hecho de otra quest o lo que sea, entonces corremos el riesgo de borrar/sobreescribir cosas que ya estén hechas.. tal vez arreglamos algo pero rompemos otras cosas.
    Con el Select * from, nos podemos fijar que por ejemplo, el npc equis no tenga script ya, y si lo tiene, los tomamos e incorporamos a nuestro fix (si funciona todo bien) y luego agregamos nuestros cambios a continuación.

    Ejemplo del Select:
    SELECT * FROM nombre_de_la_tabla WHERE `columna`=`valor`;
    SELECT * FROM smart_scripts WHERE entryorguid=30212;
    -- nos devuelve todas las columnas de la tabla smart_scripts, del entry que elegimos. En este caso, del npc "South Lightning Forge"

    Los SELECT yo los suelo poner arriba del todo mientras trabajo, para tenerlos a mano y que no molesten cuando voy probando el fix. Al terminar todo, los borramos.


    UPDATE

    Al utilizar "Update", se actualiza la columna que indiquemos, con el valor que le demos.

    Ejemplo del Update:
    UPDATE `nombre_de_la_tabla` SET `columna`=`Valor` WHERE `columna2`=´Valor2`;
    UPDATE `creature_template` SET `AIName`='SmartAI' WHERE entry=30212;

    El SET `columna`=`Valor`, es el valor que queremos actualizar en tal columna .
    en WHERE `columna2`=`Valor2`, indicamos en cual de todas las entradas, en este caso, en cual de todas las creatures, queremos cambiarle el valor que seteamos anteriormente.

    Se puede actualizar mas de 1 valor de una vez:
    UPDATE `nombre_de_la_tabla` SET `columna`=`Valor`, `columna2`=`Valor2`, `columna3`=`Valor3` WHERE entry=30212;
    Se puede actualizar en mas de una entrada (entry):
    UPDATE `creature_template` SET `columna`=`Valor` WHERE entry IN (12345,12346,12342);


    DELETE FROM - INSERT INTO

    El Delete From, sirve para borrar registros de la DB.
    El Insert Into, sirve para ingresar datos a la DB.

    La estructura sería:
    DELETE FROM `tabla` WHERE `columna`=`valor`;
    DELETE FROM `tabla` WHERE `columna`=`valor` AND `columna2`=`valor2`; -- mas precisión, por si hay varios registros con `columna`=`valor`
    INSERT INTO `tabla` (`columna1`,`columna2`,`columna3`,`columna4`,etc) VALUES
    (valor1,valor2,valor3,valor4,etc);

    Bueno, no hay mucho q aclarar con el delete e insert... ya veremos en las siguientes guias como se usan.
    La idea es borrar todo script que tenga el npc y agregar todo de nuevo, funcionando.
    O sea, cada INSERT INTO, tiene que tener un DELETE FROM anterior, que borre todo lo que haya donde estamos ingresando datos.

    Acá es importantísimo haber revisado con el Select, anteriormente, que no haya código ya, y si hay, ver de que era y tomarlo de ser necesario, y agregarlo a lo que vamos a hacer nosotros para no romper cosas que ya están funcionando.
    Además, todos los fixes que hagamos, tienen que poder ser ejecutados mas de una vez en nuestro server sin que salga error. Si no borramos los npcs, cuando querramos agregarlos de nuevo, obviamente no se podrá pq ya existen.

    También podemos ser mas específicos en el Delete, para no borrar cosas que no queremos.
    Por ejemplo:
    DELETE FROM `smart_scripts` WHERE entryorguid=6 AND `source_type`=0;
    ya que con el id 6 (npc "Kobold Vermin"), podria existir un objeto con ese id. En este caso, el objeto con id 6, es "Grimtotem Tent"
    Con el `source_type`=0, me aseguré que borre los scripts que sean de npc, y no de objetos (`source_type`=1). Toda esa info la sacan luego de la página ayuda de TC, no asusteis.


    SET

    SET, sirve para designarle un valor a una constante. Mas que nada, se usa para que sea mas claro el código al leerlo. En un fix de dos renglones, no tiene sentido pero en uno de cien lineas, si.

    SET @ForjaSur := 30212;
    De esta manera, luego en el código, es mucho mas fácil saber de que npc-spell-etc, estamos hablando (aunque la mayoria de las líneas que escribamos tengan una columna de comment), porque en vez de usar el id del mismo, usamos la constante que definimos.

    Por ejemplo:
    DELETE FROM `smart_scripts` WHERE [email protected] AND `source_type`=0;



    NOTAS:
    - Noten que siempre que al final de cada instrucción como Update, Delete from, etc, se finaliza con un punto y coma " ; ".
    - Siempre de guia/ayuda: http://collab.kpsn.org/display/tc/smart_scripts

    ATENCIÓN. Si en un UPDATE no se pone el WHERE, vamos a actualizar ese campo `columna`, en tooooooooodos los registros.
    UPDATE `creature_template` SET minlevel=85;
    haría que todas las creatures del server pasen a tener nivel mínimo 85.
    ATENCIÓN 2. No hay ctrl+z, no hay vuelta atrás. Si esto ocurre, hay que volver a cargar todos los datos de la tabla. Esto aplica a UPDATE, y al DELETE FROM.
    Última edición por Fearless; 08/07/2018 a las 11:45
    Fearless - Fearlight - Fearfury - Fearthunder - Fearbringer (H) // Fearfreezing - Fearwild (A)

Temas Similares

  1. Red vs Blue-Introduccion al mundo del internet
    Por Thurighaz en el foro General
    Respuestas: 4
    Último Mensaje: 12/05/2005, 01:16

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •