Jump to content

Santy!.

Miembro
  • Contador contenido

    181
  • Ingreso

  • Última visita

  • Días ganados

    7

Actividad de reputación

  1. Me Gusta
    Santy!. reacted to Serex in [3D]Zarpas Ninja   
    Hola chicos! Bueno os cuento, me dió por empezar a aprender algo de 3D y empezar a innovar en este campo que desconocía, ya que los otros campos los tengo muy tocados ya (;
    Pues estuve hoy todo el día liado y aqui os traigo mi primer trabajito para mi gente de MZ.
     
    Zarpas Ninja!
     

     

     

     
    Bueno espero espero opiniones YA!
    Al que les hayan gustado mis zarpas y las quiera ver en primera persona se las dejo aqui adjuntas!
    Espero críticas, y opiniones e ideas sobre que puedo seguir haciendo!

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  2. Me Gusta
    Santy!. got a reaction from Joseks in [GUIA3] Introduciendo al Editor + Ejercicio   
    que inteligente somos los argentinos xD.
  3. Me Gusta
    Santy!. reacted to Joseks in [GUIA3] Introduciendo al Editor + Ejercicio   
    BIENVENIDO A LA TERCERA GUÃA DE PROGRAMACIÓN EN PYTHON HOY NOS INTRODUCIREMOS EN EL EDITOR E IMPORTARLOS Y INTENTAREMOS HACER UNOS EJERCICIO



    En esta Guia Utilizaremos los terminos ya vistos si no vieron las anteriores guia los invito a verlas haciendo clic sobre ellas:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.


    Bien, para comenzar necesitaremos algún editor IES cualquiera funciona hasta el notepad pero les recomiendo que utilicen, el editor geany ya que no es tan complicado.
    para descargarlo pueden darle Debes iniciar sesión para ver el contenido del enlace en esta publicación., una ves descargado e instalado




    PODEMOS COMENZAR:

    Abrimos el Editor y primero guardaremos el archivo en la carpeta De python porque sino no lo encontrara en el .exe (osea en la ruta donde esta en mi caso es C:Python27) lo guardamos con un nombre ejemplo guia3mz.py




    una vez gardado definiremos una funcion con el nombre Bienvenido y el parametro nombre le damos enter y ponemos print seguido de las "" y el mesnaje que le queremos dar seguido de la , y el parametro impuesto anteriormente:




    guardamos e abrimos el interprete
    y pondremos import y el nombre como lo hemos guardado en mi caso guia3mz (sin el .py)



    una ves echo esto llamaremos a funcion como lo emos importado tendremos que poner adelante el nombre del archivo (luego veremos como evitar esto) seguido de un .(punto) y el nombre de la funciÓn (Bienvenido) y entre parentesis el un nombre X (pondre usuario yo no es un nombre pero para ejemplo);



    y como ven nos da la bienvenida


    Ahora para evitar llamar la funcion con el nombre del archivo al importar podemos poner
    from guia3mz import *




    Ejercicio Polinomio:
    recordemos para los que no lo allan visto en su colegio un polinomio es una formula matematica que es
    y= a*x2 + b* x + c

    raiz=
    y vale 0 cuanto vale x: ??

    X= (-b +- raiz(b2-4a*c))/2a

    Bien aremos un programa para calcular esto

    1- Crearemos un archivo con el nombre Ejercicion1mz.py



    2- crearemos una funcion (la llamare raiz) y le daremos de parámetro (a,b,c):
    dentro de ella (acuérdense de darle tab) pondremos que x1 va a ser
    = (-b + (b*b-4*a*c)**(1/2.0))/(2.0*a)



    EXPLICACIÓN:

    -los dos ** significa que se eleva por 2
    -despues de / se pone 2.0 porque en python si ponemos 2 toma que es un numero entero y nos dara un resultado entero icorecto osea 1/2 me dara = 0 en ves si ponemos 1/2.0 nos dara como resultado 0.5 un resultado exacto

    Luego seguimos con x2 que va a ser lo mismo pero con signo menos(-) seria:
    = (-b - (b*b-4*a*c)**(1/2.0))/(2.0*a)



    y agregaremos que nos devuelva x1,x2 con return:


    -Bueno Guardamos y nos dijimos al interprete e importamos el archivo con el nombre puesto:




    llamamos a la funcion raiz con los parametrons (1,1,-2) (un ejemplo que esos sean los datos que nos allan dado)


    y finalmente nos dara las raizes de nuestro polinomio.







    Terminamos con esta guÃa, en la siguiente haremos otros ejercicios y agregaremos algunos nuevos términos , dudas preguntas hacerla en el post o mp como quede mas cÓmodo evitar insultos y falta de respeto si me equivoque en algo avisarlo y lo corrijo sin ningún problema ademas disculpen los errores de ortografÃa saludos


    Derechos de autor de la guÃa propios, no copy paste en ningún lado GRACIAS


    Dar gracias no cuesta nada Y:
  4. Me Gusta
    Santy!. reacted to Akroma in [DESENCRIPTACION FINAL] desencriptar clientes de metin2 en minutos   
    Bueno MZ, como vais, yo bien :trollface: , despues de trollearme a casi toda españa, y a italia entera, he decidido postear el metodo de desencriptacion que uso yo i algunas personas que tambien han desencriptado clientes, grandes.
    Bueno vamos al tema
     
    1- Descargar Cheat Engine
     
    2- Descargar el cliente a desencriptar
     
    3- Iniciar el cliente
     
    4- Iniciar Cheat Engine
     
    5- Pulsar aca:

     
    Seleccionais el proceso de el metin a desencriptar, yo en este caso seleccionare el legend of metin.
     

     
    Una vez echo eso le damos al boton memory view, y buscamos las keys, y demas, lo cambiamos a 1 m2.exe y fin del cliente :trolldad:
     
    Creditos: Sema por recordarme mis inicios :trollface:
  5. Me Gusta
    Santy!. reacted to PACI in Como Actualizar Files 2010   
    Hola Metineros,
    Bueno, hace poco me preguntava como actualizar las files de 2006, 2007, etc, para 2010. Y al final encontre la solucion. Y vengo a compartirla con vosotros. Aviso desde ahora que el Tuto no fui yo quien lo hizo! Solo vine a compartirlo con vosotros. Al final Estan los tutos originales.
     
    Bueno, en 1er lugar hagan 1 BACKUP de vuestras files, por si hay algun error.
     
    Empezaremos por el MySql
     
    Vayan al Navicat > Account > Query > New Query
    Y pongan esta Query
     

    ALTER TABLE account.account ADD `last_play` datetime default NULL; UPDATE common.locale SET `mValue`='locale_name' WHERE (`mKey`='DB_NAME_COLUMN'); UPDATE common.locale SET `mValue`='portugal' WHERE (`mKey`='LOCALE'); DROP TABLE IF EXISTS log.loginlog2; CREATE TABLE log.loginlog2 ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` text, `is_gm` int(11) DEFAULT NULL, `login_time` datetime DEFAULT NULL, `channel` int(11) DEFAULT NULL, `account_id` int(11) DEFAULT NULL, `pid` int(11) DEFAULT NULL, `client_version` text, `ip` text, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.lotto_list; CREATE TABLE player.lotto_list ( `id` int(10) unsigned NOT NULL auto_increment, `server` varchar(20) default NULL, `pid` int(10) unsigned default NULL, `time` datetime default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.highscore; CREATE TABLE player.highscore ( `pid` int(11) default NULL, `board` varchar(0) default NULL, `value` varchar(0) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.change_empire; CREATE TABLE player.change_empire ( `account_id` int(11) DEFAULT NULL, `change_count` int(11) DEFAULT NULL, `time` datetime DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS player.horse_name; CREATE TABLE player.horse_name ( `id` int(11) NOT NULL default '0', `name` varchar(24) NOT NULL default 'NONAME', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; ALTER TABLE player.item_proto CHANGE COLUMN `gb2312name` `locale_name` varbinary(24) NOT NULL DEFAULT 'Noname' AFTER `name`; ALTER TABLE player.mob_proto CHANGE COLUMN `gb2312name` `locale_name` varbinary(24) NOT NULL DEFAULT 'Noname' AFTER `name`; ALTER TABLE player.mob_proto ADD `skill_level2` tinyint(3) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_vnum2` int(10) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_level3` tinyint(3) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_vnum3` int(10) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_level4` tinyint(3) unsigned default NULL; ALTER TABLE player.mob_proto ADD `skill_vnum4` int(10) unsigned default NULL; ALTER TABLE player.monarch_candidacy ADD `name` varchar(16) default NULL; Quando hagan esto, se quedaran con la base de datos actualizada.
     
    Ahora en el FreeBSD
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Se conectan al FreeBSD ( Filezilla o WinSCP ).
    Después se dirigen al directorio:
     

    /usr/rain/db NOTA: Este es el directorio que tienen que ir, aunque son de las files de Rain, si usais las files de Fyuri o de Daroo entonces se quedará:
     
    Con las files de Fyuri:

    /usr/fyuri/db Y con las de Daroo

    /usr/daroo/db Depende de vuestras files... 
    Y colocan el archivo db de la descarga en ese directorio y substituyan..
     
    Despues vayan a:

    /usr/rain/channel/share_data Y colocan el archivo GAME. Si hay algun error o no se puede colocar, entonces borran el GAME que ahy en el FreeBSD y despues colocan el de la descarga. 
    Despues en la Máquina Virtual, ponen esto:

    cd /usr/rain/auth rm auth ln -s ../channel/share_data/game auth En el ln , es un L minusculo y no un i mayusculo.
     
    Archivo conf.txt
     
    En

    /usr/rain/db Abran el archivo conf.txt y os aparecerá algo así:

    WELCOME_MSG = "DB Server has been started" SQL_ACCOUNT = "localhost account mt2 mt2!@# 0" SQL_PLAYER = "localhost player mt2 mt2!@# 0" SQL_COMMON = "localhost common mt2 mt2!@# 0" SQL_HOTBACKUP = "localhost hotbackup mt2 mt2!@# 0" TABLE_POSTFIX = "" BIND_PORT = 15001 DB_SLEEP_MSEC = 10 CLIENT_HEART_FPS = 25 HASH_PLAYER_LIFE_SEC = 600 BACKUP_LIMIT_SEC = 3600 PLAYER_ID_START = 100 PLAYER_DELETE_LEVEL_LIMIT = 70 ITEM_ID_RANGE = 70000001 100000000 LOCALE = big5 Entonces:
     
    Por debajo de:

    PLAYER_DELETE_LEVEL_LIMIT = 70 Borran todo y adicionan esto:
    PLAYER_DELETE_CHECK_SIMPLE = 2 ITEM_ID_RANGE = 2000000000 2100000000 MIN_LENGTH_OF_SOCIAL_ID = 6 SIMPLE_SOCIALID = 1 Block "Y/QSB7omi36awq4ctpUxuiwRARM=" Y al final quedara asi:

    WELCOME_MSG = "DB Server has been started" SQL_ACCOUNT = "localhost account mt2 mt2!@# 0" SQL_PLAYER = "localhost player mt2 mt2!@# 0" SQL_COMMON = "localhost common mt2 mt2!@# 0" SQL_HOTBACKUP = "localhost hotbackup mt2 mt2!@# 0" TABLE_POSTFIX = "" BIND_PORT = 15001 DB_SLEEP_MSEC = 10 CLIENT_HEART_FPS = 25 HASH_PLAYER_LIFE_SEC = 600 BACKUP_LIMIT_SEC = 3600 PLAYER_ID_START = 100 PLAYER_DELETE_LEVEL_LIMIT = 70 PLAYER_DELETE_CHECK_SIMPLE = 2 ITEM_ID_RANGE = 2000000000 2100000000 MIN_LENGTH_OF_SOCIAL_ID = 6 SIMPLE_SOCIALID = 1 Block "Y/QSB7omi36awq4ctpUxuiwRARM=" Cierren y Guarden el Archivo.
     
    Archivos CONFIG
     
    En:

    /usr/rain/auth  
    Abre el archivo CONFIG.
     
    Aparecerá algo asi:

    HOSTNAME: metin2_auth CHANNEL: 1 PORT: 11002 P2P_PORT: 12001 DB_PORT: 15001 DB_ADDR: localhost TABLE_POSTFIX: ITEM_ID_RANGE: 000000001 000000002 PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 AUTH_SERVER: master PLAYER_SQL: localhost mt2 mt2!@# account LOG_SQL: localhost mt2 mt2!@# log COMMON_SQL: localhost mt2 mt2!@# common  
    Entonces Borra esto:

    ITEM_ID_RANGE: 000000001 000000002 Y al final, por debajo de:

    COMMON_SQL: localhost mt2 mt2!@# common Adiciona esto:

    LOCALE_SERVICE: SPAIN adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU  
    Y al final se quedara asi:

    HOSTNAME: metin2_auth CHANNEL: 1 PORT: 11002 P2P_PORT: 12001 DB_PORT: 15001 DB_ADDR: localhost TABLE_POSTFIX: PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 AUTH_SERVER: master PLAYER_SQL: localhost mt2 mt2!@# account LOG_SQL: localhost mt2 mt2!@# log COMMON_SQL: localhost mt2 mt2!@# common LOCALE_SERVICE: SPAIN adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU  
    Despues en:
     

    /usr/rain/channel Tienes que editar los archivos CONFIG, de las carpetas:
     
    - first
    - game1_1
    - game1_2
    - game1_3
    - game2
    - game61
    - game99
     
    El first apacerá así:
     

    HOSTNAME: first CHANNEL: 1 PORT: 13000 P2P_PORT: 14000 DB_PORT: 15001 DB_ADDR: localhost MAP_ALLOW: TABLE_POSTFIX: ITEM_ID_RANGE: 5000001 10000000 PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 PLAYER_SQL: localhost mt2 mt2!@# player COMMON_SQL: localhost mt2 mt2!@# common LOG_SQL: localhost mt2 mt2!@# log #TEST_SERVER: 1 pk_server: 1  
    Borra el:

    ITEM_ID_RANGE: VALOR1 VALOR2  
    NOTA: Valor1 = Al 1º Número que aparece en la linea. Valor2 = El 2º Número que aparece en la linea.
     
    Despues borra todo lo que aparece por debajo de:

    LOG_SQL: localhost mt2 mt2!@# log Y adiciona esto:

    NO_PK: 1 CHECK_MULTIHACK: 1 adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU LOCALE_SERVICE: SPAIN VIEW_RANGE: 20000 MAX_LEVEL: 99  
    Y al final quedará así:
     

    HOSTNAME: first CHANNEL: 1 PORT: 13000 P2P_PORT: 14000 DB_PORT: 15001 DB_ADDR: localhost MAP_ALLOW: TABLE_POSTFIX: PASSES_PER_SEC: 25 SAVE_EVENT_SECOND_CYCLE: 180 PING_EVENT_SECOND_CYCLE: 180 PLAYER_SQL: localhost mt2 mt2!@# player COMMON_SQL: localhost mt2 mt2!@# common LOG_SQL: localhost mt2 mt2!@# log NO_PK: 1 CHECK_MULTIHACK: 1 adminpage_ip: 127.0.0.1 adminpage_ip1: 127.0.0.1 adminpage_ip2: 127.0.0.1 adminpage_ip3: 127.0.0.1 adminpage_password: cexubrecegutru7u6atrEqurUyudeSutafruwuz55#etrehAdajezeje+uthustU LOCALE_SERVICE: SPAIN VIEW_RANGE: 20000 MAX_LEVEL: 99  
    Y REPITAN ESTO PARA TODOS LOS CONFIG DE LA CARPETA CHANNEL!
     
    Alterar el locale
     
    Vayan a:

    /usr/rain/channel/share_data/locale Y cambien el nombre de " Hongkong " para " spain "
     
    Despues dentro de la carpeta " spain "
    Cambian el nombre de:

    big5_string.txt  
    Para:

    locale_string.txt  
    Y En el directorio:

    /usr/rain/channel/share_data/locale/spain  
    Colocan el archivo " translate.lua "
     
    Despues van a:
     

    /usr/rain/channel/share_data/locale/spain/quest  
    Y cambian el nombre del:

    locale_big5.lua Para " locale.lua "
     
    Y cambian el nombre de:

    hongkong_list Para " locale_list "
    Y repiten esto para todos los hongkong que encuentren en la carpeta quest.
     
    Despues van a:

    /root  
    Y colocan el archivo:

    data.tar.gz  
    Despues en la maquina virtual hacen esto:

    cd /usr/rain/channel/share_data rm -fR data tar -xzvf /root/data.tar.gz  
    Y quando os pare todo lo que os aparece
    Hacen:

    reboot  
    Y al final inician el Servidor!
     
    Creditos:
     
    IvanSantos
    Valenza
     
    Tutoriales originales:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Y un vídeo por si no entienden algo:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Cuando tengan las files actualizadas para jugar en ellas necesitarán 1 cliente 2010, entonces yo os dejo aqui uno:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Bueno espero haber podido ayudar,
    Buenas Tardes.
     
    EDITO: Si al hacer todo esto despues en la máquina da el error de cores...
    Entonces se dirigen al FreeBSD y van al directorio del GAME

    /usr/rain/channel/share_data Despues le dan click con el boton derecho del raton y clican en Permisiones, y al final meten, Permisiones 777Cierran el FreeBSD y dan reboot
  6. Me Gusta
    Santy!. got a reaction from sinalota in Colocar levantamiento de login   
    No universojuegos.es
     
    Hola hoy les enseñare a colocar levantamiento de login empesemos:
     
    crearemos un archivo que se llame auto.sh en las carpetas ch1 ch2 game99
    adentro de ese archivo pergaremos lo siguiente:
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./game while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done ahora en autch asemos el mismo archivo pero de esta forma:
     
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./auth while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done  
     
    y ahora en db de esta forma
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./db while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done Luego de eso en cada una de esas carpetas crearemos una carpeta llamada "cores" adentro de esa carpeta cores crearemos 6 carpetas mas llamadas "cores.1" ------- "cores.2" ---------- "cores.3" así hasta el 6 acuerdense que a todo hay que darle permisos 777.
     
    Luego abriremos el script start.sh y lo modificaremos para que inicie con auto.sh les deve quedar asi:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
    Bueno espero averlos ayudado cualquier cosa en skype el cual es santysacred
  7. Me Gusta
    Santy!. reacted to Pedro Fuentes in Conectar a Dos Base De Datos desde 1Script   
    Aqui les dejo un script que funciona para como dice el titulo, Conectar mediante 1script a dos base de datos!!
     

    DEFINE('SQL_HOST', ''); DEFINE('SQL_USER', ''); DEFINE('SQL_PASS', ''); DEFINE('SQL_HP_HOST', ''); DEFINE('SQL_HP_USER', ''); DEFINE('SQL_HP_PASS', ''); DEFINE('SQL_HP_DB', 'account'); DEFINE('SQL_HOST2', ''); DEFINE('SQL_USER', ''); DEFINE('SQL_PASS', ''); DEFINE('SQL_HP_HOST2', ''); DEFINE('SQL_HP_USER', ''); DEFINE('SQL_HP_PASS', ''); DEFINE('SQL_HP_DB', 'account');  
     
    Pedido de Santy!
     
    Se me fueron los creditos xd
     
    Creditos: TheSanto [Adm]Metin3Dioses
    Dejen las gracias si les sirvio, Lo Hago para el foro pero me vendria de animos seguir investigando para ustedes!
  8. Me Gusta
    Santy!. reacted to Joseks in [GUIA1]Introducción al Iterprete Python y Descarga   
    Bienvenido a La primera guia instalacion e itroduccion a python


    -INSTALACION: Para comensar aprender programacion con python lo esencial es el programa podemos descargarlo
    de la pagina oficial gratuitamente haciendo Debes iniciar sesión para ver el contenido del enlace en esta publicación. y seleccionando el adecuado para su sistema


    2- una ves instalado, nos dirijimos a abrir python.exe (Python (command line) ese es el



    -interprete de python, el iterprete es un programa donde python iterpreta las ordenes que les damos un ejemplo sensillo es una suma




    2+2 interpreta que es una suma y te devuelve el resultado osea 4

    igual con todas las operación matemáticas (multiplicación, divicion, resta, suma etc)


    solamente no es operaciones matemáticas sino con letras un ejemplo lógico es el comando print


    -Print: cumple la función de devolverte lo que escribes ejemplo:


    primero va el print seguido de las comillas entre ellas pones una palabra al darle enter
    te debulve lo puesto anteriormente:



    bueno ya visto esto que es una introducción pasamos a las

    -funciones
    que lo que es la funciones: es una programación la cual al llamarla cumple una función ya definida osea ya programada
    para crear una función primero se coloca def seguido de una palabra definida por ustd ejmplo:
    def metin2zone y le agrega unos paréntesis quedando:


    luego apretas enter y creas la funcion para programarla tenemos esta dentro del cuerpo (dentro de ella) lo que tendrias que apretar el tab eso es porque python iterpreta que estas dentro de la funcion



    Al estar adentro aplicamos lo ya visto:

    Agregamos un print "Hola Metin2Zone" enter y tab y print "Chau Metin2Zone" apretamos dos enter y listo.

    Ahora para llamar a la funcion solo ponemos el nombre que le designaron (en mi caso Metin2Zone). seguida de los parentesis ()






    y se imprime lo puesto anteriormente,




    Seguido a esto veremos la

    -Variable: Las variable son útiles para guardar información e usarla mas tarde en ella se puede guardar cualquier tipo de carácter, (letra numero símbolo etc)

    Seguramente en matematicas vieron operaciones en donde X era igual a un numero aqui seria parecido, ejemplo






    X= 3

    Seria va X (que es la variable) luego el igual seguido de un espacio y el numero a asignar

    y si ponemos x *(por) 3 nos dara como resultado 9 porque definimos que X es igual a 3 no solo se le puede agregar a x o Y sino tambien a nombres :





    tambien se puede agregar a una operaciones variable con palabras ejemlo





    Tambien puedes hacerlo con palabras osea al nombre en ves de agregarle un numero le pones una palabra
    y nos imprimira dos veses la plabra









    -Combinacion


    podemos convinar las dos funciones vistas anteriormente, un ejemplo si queremos crear un programa que salude a nuestro usuarios


    creamos una funcion agregando def seguido del nombre que le asignan y los paréntesis, dentro de ello ponemos el parametro nombre, (el que le pedirá al entrar al usuario) le damos enter luego un tab y creamos un print con el paramatro nombre como indica la imagen



    les damos los dos enter y la llamando con el nombre asignado Bienvenido y entreparentesis con comillas su nombre Ejemplo: Bienvenido("Joseks") y nos dara la bienvenida:



    En nombre iría el nombre del usuario no Joseks es un ejemplo





    Bueno eso es todo por ahora espero averles dado una idea mas clara de la programación en python luego seguir con mas guías, dudas preguntas hacerla en el post o mp como quede mas cómodo, evitar insultos y falta de respeto si me equivoque en algo avisarlo y lo corrijo sin ningún problema ademas disculpen los errores de ortografía saludos hasta la proxima.



    Derechos de autor de la guía propios, no copy paste en ningún lado GRACIAS
  9. Me Gusta
    Santy!. reacted to Pedro Fuentes in Quest de Recompenza Nvl40   
    Bueno les traigo mi primera quest, No es algo del otro mundo!
     
    En Que consiste?
    Consiste que a cierto nivel (yo le puse 40 pero ustedes ponen el que quieran) Les sale una miision como la de bienvenida pero que os felicitad por llegar a ese nivel y como recompenza obtienen los poderes perfect!
     
    No es la gran cosa pero quise cambiar la rutina de el item de perfect o la npc que da perfect, por una mision que se activa automaticamente al llegar al nivel!
     

    quest perfect begin state start begin when levelup or login with pc.get_level() == 40 and pc.getqf("recompenza2") == 0 begin say("Felicidades Has Llegado Al Nivel 40") say("Ya Puedes Liderar Tu Propio Gremio") say("y Para Ello Te Facilitaremos Con una.") say("Ayuda, Te Daremos las Habis Perfect.") say_reward("Entrenar habilidades") local habs = select ("Guerrero" , "Ninja" , "Sura" , "Chaman" , "Cerrar") if habs == 1 then say("Eres cuerpo o mental?") say_reward("Elije tu profesion") local guerr = select ("Cuerpo", "Mental", "Cerrar") if guerr == 1 then pc.set_skill_level(1,59) pc.set_skill_level(2,59) pc.set_skill_level(3,59) pc.set_skill_level(4,59) pc.set_skill_level(5,59) pc.set_skill_level(6,59) chat("Has recibido tus P") item.remove() elseif guerr == 2 then pc.set_skill_level(16,59) pc.set_skill_level(17,59) pc.set_skill_level(18,59) pc.set_skill_level(19,59) pc.set_skill_level(20,59) pc.set_skill_level(21,59) chat("Has recibido tus P") item.remove() elseif guerr == 3 then return end elseif habs == 2 then say("Eres asesino o arquero?") say_reward("Elije tu profesion") local ninj = select ("Asesino", "Arquero", "Cerrar") if ninj == 1 then pc.set_skill_level(31,59) pc.set_skill_level(32,59) pc.set_skill_level(33,59) pc.set_skill_level(34,59) pc.set_skill_level(35,59) pc.set_skill_level(36,59) chat("Has recibido tus P") item.remove() elseif ninj == 2 then pc.set_skill_level(46,59) pc.set_skill_level(47,59) pc.set_skill_level(48,59) pc.set_skill_level(49,59) pc.set_skill_level(50,59) pc.set_skill_level(51,59) chat("Has recibido tus P") item.remove() elseif ninj == 3 then return end elseif habs == 3 then say("Eres magia negra o espejo?") say_reward("Elije tu profesion") local sur = select ("Mag. Negra", "Espejo", "Cerrar") if sur == 1 then pc.set_skill_level(76,59) pc.set_skill_level(77,59) pc.set_skill_level(78,59) pc.set_skill_level(79,59) pc.set_skill_level(80,59) pc.set_skill_level(81,59) chat("Has recibido tus P") item.remove() elseif sur == 2 then pc.set_skill_level(61,59) pc.set_skill_level(62,59) pc.set_skill_level(63,59) pc.set_skill_level(64,59) pc.set_skill_level(65,59) pc.set_skill_level(66,59) chat("Has recibido tus P") item.remove() elseif sur == 3 then return end elseif habs == 4 then say("Eres dragon o curacion?") say_reward("Elije tu profesion") local cham = select ("Dragon", "Curacion", "Cerrar") if cham == 1 then pc.set_skill_level(91,59) pc.set_skill_level(92,59) pc.set_skill_level(93,59) pc.set_skill_level(94,59) pc.set_skill_level(95,59) pc.set_skill_level(96,59) chat("Has recibido tus P") item.remove() elseif cham == 2 then pc.set_skill_level(106,59) pc.set_skill_level(107,59) pc.set_skill_level(108,59) pc.set_skill_level(109,59) pc.set_skill_level(110,59) pc.set_skill_level(111,59) chat("Has recibido tus P") item.remove() elseif cham == 3 then return end elseif habs == 5 then return end end end end  
     
    Para meter la quest
    Entrar en su FTP (winscp o filezilla)
    cd /home/game/quest
    y ponen la quest pero con el nombre " recompenza.quest "
    Le Dan permisos y van al freebsd y ponen :
    #./qc nombredetuquest.quest
    y luego ponen en el cliente /reload q
    y luego estara funcionando
     
    Creditos:
    Quest Hecha Por Mi
    Guia de Implementacion Sacada de Metin2Zone
    Ayuda en dudas de quest Keko
     
    Acepto Criticas da igual xD es mi primera quest
  10. Me Gusta
    Santy!. reacted to TheSanto in [Script] Protección DDoS   
    Bueno pues aquí les dejo 1 script muy util y sencillo.
     
    Para descargarlo vamos aquí


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Lo metemos mediante por el ftp el archivo , le damos permisos 700 al archivo install.sh
     

     
    Hay tenemos 1 imagen.
     
    Cuando lo tengamos abrimos putty ( si es dedicado y si no lo es virtual box)
     
    Hacemos lo siguiente.
     
    cd /
    ./install.sh
     
    y os aparecera esto
     

     
    Y para aseguraros de se os ha instalado bien vais a /usr/local/ddos y vereis esto
     

     
    Espero que os sirva y Agradecer la Guia
     
     
    Edito: Si se os instalase mal aqui os dejo para desistalarlo
     
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. seria igual que instalarlo
     
    cd /
    ./uninstall.ddos
     
    y ya esta !
     
    Creditos :
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Probado en : 2 dedicados , en no dedicados a veces da error.
  11. Me Gusta
    Santy!. got a reaction from Myth in Unas armaduras   
    Hola aquí encontré estas armor que nunca las avia visto y se las comparto:
    es una para cada raza.
     

     
     
    y sinceramente mucho no me gustan.
     
    creditos las saque del yoneis.
    link:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  12. Me Gusta
    Santy!. reacted to Serex in [MegaRecopilacion]Pack Armaduras + MSM + Querys + Protos   
    Hola Metin2Zone! Hoy os traigo una MegaRecopilación de armaduras nuevas y viejas, algunos las habréis visto todas otros no... Pero bueno yo os traigo todas juntas en un .epk y con todo listo para ser instaladas en 2 minutos!

    La descarga incluye:
    -Archivo .epk con todas las armaduras modelos .gr2, texturas, iconos, etc.
    -Msm de todas las armaduras listos para ponerlos directamente en tu cliente.
    -Líneas del item_proto listo para agregarlas al tuyo.
    -Querys de todas las armaduras para implementarlas en tu base de datos.
    -Líneas del item_list listas para agregarlas al tuyo.

    Guía de instalación

    1- Introducimos el:
    eyvil.eix
    eyvil.epk
    En la carpeta pack de nuestro cliente.

    2- Abrimos el archivo Index que esta en la carpeta pack de nuestro cliente y le agregamos la siguiente línea al final:

    * eyvil

    3-Descompilamos los root y introducimos todos los msm nuevos sustituyendo los anteriores que teniamos.

    4-Descompilamos el locale y agregamos a nuestro item_list todas las líneas del que trae la descarga.

    5-Descompilamos el item_proto y agregamos todas las líneas del que trae la descarga.

    6-Vamos al navicat e introducimos todas las nuevas querys, vienen todas en un archivo de texto en la descarga.


    Armaduras que trae el pack:


    Blaugelb Rüstungen



    Phönix Rüstungen



    Kingu Rüstungen



    Antike Rüstungen



    4x210 Rüstungen



    4x220 Rüstungen



    4x230 Rüstungen



    Y algunas mas conocidas como estas:




















    Bueno y eso es todo, ¿Que os parece el pack?

    Link de descarga:
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    PD: Si a alguien le da error al compilar el item_proto del cliente, que use estas líneas en vez de las que vienen en la descarga:


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  13. Me Gusta
    Santy!. reacted to Serex in [Quest] Ranking in-game   
    Bueno chicos hoy os traigo una sencilla quest para que podais ver hasta el top 15 en el juego clickando solo a 1 npc.
     

    quest raking begin state start begin when 20095.chat."Ranking" begin local rangliste = mysql_query("SELECT * FROM player.player WHERE player.name NOT LIKE '[%]%' ORDER BY player.level DESC, player.exp DESC","root","rootpw","player","rootip") say_title("Top 15") say("#: Nombre Nivel ") say("Top 1: "..rangliste.name[1].." "..rangliste.level[1].." ") say("Top 2: "..rangliste.name[2].." "..rangliste.level[2].." ") say("Top 3: "..rangliste.name[3].." "..rangliste.level[3].." ") say("Top 4: "..rangliste.name[4].." "..rangliste.level[4].." ") say("Top 5: "..rangliste.name[5].." "..rangliste.level[5].." ") say("Top 6: "..rangliste.name[6].." "..rangliste.level[6].." ") say("Top 7: "..rangliste.name[7].." "..rangliste.level[7].." ") say("Top 8: "..rangliste.name[8].." "..rangliste.level[8].." ") say("Top 9: "..rangliste.name[9].." "..rangliste.level[9].." ") say("Top 10: "..rangliste.name[10].." "..rangliste.level[10].." ") say("Top 11: "..rangliste.name[11].." "..rangliste.level[11].." ") say("Top 12: "..rangliste.name[12].." "..rangliste.level[12].." ") say("Top 13: "..rangliste.name[13].." "..rangliste.level[13].." ") say("Top 14: "..rangliste.name[14].." "..rangliste.level[14].." ") say("Top 15: "..rangliste.name[15].." "..rangliste.level[15].." ") local s = select("Salir") elseif s == 1 then return end end end
  14. Me Gusta
    Santy!. reacted to ElRaulxX in [Quest Editable] Coins comerciables   
    Si cambias el nombre de la quest, tienes que cambiar el nombre a todas las funciones declaradas en ella y incluidas en la misma quest.
  15. Me Gusta
    Santy!. got a reaction from ezerrata311 in Explicasion errores generales que marca el syser   
    Solo para este foro.
     
    Hola buenas a todos a pedido de kohaku are este post explicando un poco el syser y a solucionar sus problemas mas principales.
     
    antes de nada debemos saber que el syser:
    el syser es el registro de los channel donde se marcaran errores del servidor.
     
    ¿Donde lo podemos localizar?
     
    bueno el se localizara en la siguiente ruta:
     

    cd /home/game/channel1 cd /home/game/channel2 cd /home/game/game99 cd /home/game/g1/db cd /home/game/g1/auth claramente esta el de channel 1 registrara los de dicho canal.
     
    Errores mas comunes:
     
     

    SYSERR: Aug 17 21:09:04 :: GetMotionFileName: Motion: boar2 have not motlist.txt vnum(20115) folder(boar2) este error dice que que bicho 20115 no tiene movimiento como os solucionaremos fácil accedemos a navicat tabla player mob_proto 1 ves hay buscamos el mob 20115 y en aiflag debemos seleccionar el tipo de movimiento que le daremos puede ser agresivo, atak con movimiento, sin movimiento, etc obviamente al lado de aiflag hay mas columnas llamadas set_race_flag, etc fíjense de rellenar esas correctamente.
     
    siguiente error:
     
     

    SYSERR: Aug 17 22:09:52 :: SpawnMob: SpawnMob: no mob data for vnum 10828 SYSERR: Aug 17 22:09:52 :: regen_load: No mob data by vnum 10829 esto dice que no se recibe data de el mob 1089 lo solucionamos de la misma manera nos fijamos que en el mob_proto del navicat estén todas las columnas correctamente.
     
    siguiente:
     
     

    SYSERR: Jul 17 20:40:00 :: ChildLoop: AsyncSQL: query failed: Unknown column 'vnum' in 'field list' (query: INSERT DELAYED INTO log (type, time, who, x, y, what, how, hint, ip, vnum) VALUES('ITEM', NOW(), 0, 1, 0, 90001178, 'SET_SOCKET', '', '', 3090) errno: 1054) Según collado metemos esta query en log:
     

    -- ---------------------------- -- Table structure for `log` -- ---------------------------- DROP TABLE IF EXISTS `log`; CREATE TABLE `log` ( `ID` int(11) DEFAULT NULL, `type` varchar(20) COLLATE big5_bin DEFAULT NULL, `time` datetime DEFAULT NULL, `who` int(11) DEFAULT NULL, `x` int(11) DEFAULT NULL, `y` int(11) DEFAULT NULL, `what` int(11) DEFAULT NULL, `how` varchar(20) COLLATE big5_bin DEFAULT NULL, `hint` varchar(20) COLLATE big5_bin DEFAULT NULL, `ip` varchar(30) COLLATE big5_bin DEFAULT NULL, `vnum` int(50) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_bin; -- ---------------------------- -- Records of log -- ---------------------------- siguiente:
     

    SYSERR: Aug 17 22:51:01 :: socket_connect: HOST localhost:15000, could not connect. SYSERR: Aug 17 22:51:02 :: hupsig: SIGHUP, SIGINT, SIGTERM signal has been received. shutting down. SYSERR: Aug 17 22:51:02 :: socket_block: fcntl: nonblock: Bad file descriptor SYSERR: Aug 17 22:53:33 :: socket_connect: HOST 220.95.239.40:7120, could not connect. SYSERR: Aug 17 22:53:33 :: heart_idle: losing 75 seconds. (lag occured) solo lag borrar logs
    siguiente:
     
     
     

    SYSERR: Aug 17 23:53:22 :: DirectQuery: AsyncSQL::DirectQuery : mysql_query error: Column 'name' in field list is ambiguous query: SELECT pid, name, date FROM monarch_candidacy a, player b where a.pid = b.id aqui tenemos mal la tabla monarca
     
    [02:00:24 p.m.] .Angel Collado: lo de monarca tiene solucion modificando el archivo db o la tabla monarch
    [02:00:35 p.m.] .Angel Collado: en mi virtual cambie lo de db y no me ha dado error ninguna vez as
    [02:00:36 p.m.] .Angel Collado: mas*
     
    siguiente:
     

    SYSERR: Aug 17 21:16:26 :: ChildLoop: AsyncSQL: query failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (query: REPLACE INTO quest (dwPID, szName, szState, lValue) VALUES(1, 'event_map', '__status', -2107478168) errno: 2002) SYSERR: Aug 17 21:16:26 :: ChildLoop: AsyncSQL: retrying en esta nos esta fallando la conexion a mysql.
     
    Bueno ahora ya saben un poco mas de estos feos errores que tantos dolores de cabeza nos dan que tengan suerte!
     
    Agradecimiento: collado.
  16. Me Gusta
    Santy!. got a reaction from kco 1 in Colocar levantamiento de login   
    No universojuegos.es
     
    Hola hoy les enseñare a colocar levantamiento de login empesemos:
     
    crearemos un archivo que se llame auto.sh en las carpetas ch1 ch2 game99
    adentro de ese archivo pergaremos lo siguiente:
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./game while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done ahora en autch asemos el mismo archivo pero de esta forma:
     
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./auth while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done  
     
    y ahora en db de esta forma
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./db while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done Luego de eso en cada una de esas carpetas crearemos una carpeta llamada "cores" adentro de esa carpeta cores crearemos 6 carpetas mas llamadas "cores.1" ------- "cores.2" ---------- "cores.3" así hasta el 6 acuerdense que a todo hay que darle permisos 777.
     
    Luego abriremos el script start.sh y lo modificaremos para que inicie con auto.sh les deve quedar asi:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
    Bueno espero averlos ayudado cualquier cosa en skype el cual es santysacred
  17. Me Gusta
    Santy!. got a reaction from S K in Colocar levantamiento de login   
    No universojuegos.es
     
    Hola hoy les enseñare a colocar levantamiento de login empesemos:
     
    crearemos un archivo que se llame auto.sh en las carpetas ch1 ch2 game99
    adentro de ese archivo pergaremos lo siguiente:
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./game while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done ahora en autch asemos el mismo archivo pero de esta forma:
     
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./auth while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done  
     
    y ahora en db de esta forma
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./db while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done Luego de eso en cada una de esas carpetas crearemos una carpeta llamada "cores" adentro de esa carpeta cores crearemos 6 carpetas mas llamadas "cores.1" ------- "cores.2" ---------- "cores.3" así hasta el 6 acuerdense que a todo hay que darle permisos 777.
     
    Luego abriremos el script start.sh y lo modificaremos para que inicie con auto.sh les deve quedar asi:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
    Bueno espero averlos ayudado cualquier cosa en skype el cual es santysacred
  18. Me Gusta
    Santy!. reacted to Elite™ in Levelup(Metin2.es)   
    ----------------------------------
    -- Cazeria
    -- Traducida como el metin2.es
    -- Creditos: Eliteâ„¢
    ----------------------------------
    quest levelup begin
    state run begin
    when letter begin
    local current = pc.getqf("current")
    local completed_level = pc.getqf("complete");
    if current == 0 and
    pc.get_level() > completed_level and
    pc.get_level() > 1 and
    pc.get_level() < 60 then
    local lev = pc.get_level()
    pc.setqf("buttonstate", 2)
    makequestbutton("Comenzar tarea "..lev.."")
    pc.setqf("current", lev)
    pc.setqf("select", 1)
    pc.setqf("remain", special.levelup_quest[lev][2])
    setskin(NOWINDOW)
    end
    setstate(start)
    end
    end
    state start begin
    when info begin
    local lev = pc.getqf("current")
    if lev == 0 then return end
    setskin(SCROLL)
    setbgimage('level_bg.tga')
    local s = pc.getqf("select")
    if s == 0 then s = 1 end
    addimage(20,12,special.levelup_img[special.levelup_quest[lev][s*2-1]])
    setcolor(0,0,0)
    say("¡Elimina a ",mob_name(special.levelup_quest[lev][s*2-1])," !")
    say("Número de objetivos: "..special.levelup_quest[lev][s*2])
    raw_script("Recompensa: ".. special.levelup_quest[lev][5].."% de experiencia.")
    say("")
    if lev <= table.getn(special.levelup_reward1) then
    raw_script(" "..item_name(special.levelup_reward1[lev][pc.job+1]))
    else
    raw_script(" ".."Objeto Aleatorio")
    end
    raw_script(newline)
    levelup.show_mob_pos(lev)
    select("Confirmar")
    clearmapsignal()
    setskin(NOWINDOW)
    end
    when login begin
    local lev = pc.getqf("current")
    if lev != 0 then
    if pc.getqf("remain") <= 0 then
    setskin(NOWINDOW)
    pc.setqf("buttonstate", 3)
    makequestbutton(""..lev.." misión - terminada")
    else
    setskin(NOWINDOW)
    pc.setqf("buttonstate", 1)
    makequestbutton("Comenzar tarea "..lev.." ")
    end
    end
    end
    when button begin
    local lev = pc.getqf("current")
    if lev == 0 then return end
    if pc.getqf("buttonstate") == 3 then
    local s = pc.getqf("select")
    if s == 0 then s = 1 end
    say_title(" "..lev.." misión - terminada")
    say("Bien, has terminado con éxito la misión.")
    wait()
    if lev <= 20 then
    if lev <= table.getn(special.levelup_reward1) then
    pc.give_item("Nivel "..lev.." Objeto",
    special.levelup_reward1[lev][pc.job+1])
    else
    local v = number(1,100)
    if v <= special.levelup_reward3[1][1] then
    pc.give_item("Nivel "..lev.." Objeto",
    special.levelup_reward3[1][2],special.levelup_reward3[1][3])
    elseif v <= special.levelup_reward3[2][1] then
    pc.give_item("Nivel "..lev.." Objeto",
    special.levelup_reward3[2][2],special.levelup_reward3[2][3])
    elseif v <= special.levelup_reward3[3][1] then
    pc.give_item("Nivel "..lev.." Objeto",
    special.levelup_reward3[3][2],special.levelup_reward3[3][3])
    elseif v <= special.levelup_reward3[4][1] then
    pc.give_item("Nivel "..lev.." Objeto",
    special.levelup_reward3[4][2],special.levelup_reward3[4][3])
    else
    pc.give_item("Nivel "..lev.." Objeto",
    special.levelup_reward3[5][2],special.levelup_reward3[5][3])
    end
    end
    pc.give_exp_perc("Nivel "..lev.." Experiencia",
    lev, special.levelup_quest[lev][5])
    if lev == 12 or lev == 14 or lev == 16 or lev == 18 or lev == 20 then
    pc.give_item2(50083)
    say_reward(item_name(50083) .. " recibido.")
    end
    else
    local ll = lev - 20
    if lev < 26 then
    local n = table.getn(special.levelup_reward_item_21[ll])
    local t = special.levelup_reward_item_21[ll][number(1, n)]
    say_reward("Recompensa: ")
    if type(t) == 'table' then
    pc.give_item2(t[1], t[2])
    say_reward("Recibido "..item_name(t[1])..
    ""..t[2].."")
    else
    pc.give_item2(t)
    say_reward("Recibido "..item_name(t)..
    "")
    end
    end
    local reward_gold = special.levelup_reward_gold21
    local reward_exp = special.levelup_reward_exp21
    if lev >= 31 and lev <= 40 then
    reward_gold = special.levelup_reward_gold31
    reward_exp = special.levelup_reward_exp31
    elseif lev >= 41 and lev <= 50 then
    reward_gold = special.levelup_reward_gold41
    reward_exp = special.levelup_reward_exp41
    elseif lev >= 51 and lev <= 60 then
    reward_gold = special.levelup_reward_gold51
    reward_exp = special.levelup_reward_exp51
    end
     
    n = number(0, 99)
    local i = 0
    for i = 1, table.getn(reward_gold) do
    if n < reward_gold[2] then
    pc.change_money(reward_gold[1])
    say_reward("Recibes "..reward_gold[1].." Yang.")
    break
    else
    n = n - reward_gold[2]
    end
    end
     
    n = number(0, 99)
    i = 0
    for i = 1, table.getn(reward_exp) do
    if n < reward_exp[2] then
    pc.give_exp_perc("Nivel"..lev.." Experiencia",
    lev, reward_exp[1])
    say_reward("Recibes "..reward_exp[1].."% de Experiencia.")
    break
    else
    n = n - reward_exp[2]
    end
    end
    say("")
    end
    local old_lev = lev
    lev = lev + 1
     
    if lev > 1 and lev < 60 and pc.level >= lev then
    pc.setqf("buttonstate", 2)
    makequestbutton(" "..lev.." misión")
    pc.setqf("current", lev)
    pc.setqf("select", 1)
    pc.setqf("remain",special.levelup_quest[lev][2])
    setskin(NOWINDOW)
    return
    else
    pc.setqf("complete", old_lev)
    pc.setqf("current", 0)
    q.done()
    end
    elseif pc.getqf("buttonstate") == 2 then
    local lev = pc.getqf("current")
    if lev == 0 then
    q.done()
    end
    say_title("Tarea de caza:")
    say("Para la siguiente tarea de caza, tienes que")
    say("elegir cuál de los dos monstruos quieres matar.")
    local sel = select(
    mob_name(special.levelup_quest[lev][1]).." "..special.levelup_quest[lev][2].." ",
    mob_name(special.levelup_quest[lev][3]).." "..special.levelup_quest[lev][4].." "
    )
     
     
    setskin(SCROLL)
    setbgimage('level_bg.tga')
    pc.setqf("select", sel)
    addimage(20, 12, special.levelup_img[special.levelup_quest[lev][sel*2-1]])
    setcolor(0,0,0)
    say("¡Elimina a ",mob_name(special.levelup_quest[lev][sel*2-1])," .!")
    say("Número de objetivos: "..special.levelup_quest[lev][sel*2])
    raw_script("Recompensa: ".. special.levelup_quest[lev][5].."% de experiencia")
    say("")
    if lev <= table.getn(special.levelup_reward1) then
    raw_script(" "..item_name(special.levelup_reward1[lev][pc.job+1]))
    else
    say("")
    raw_script(" ".." Objeto aleatorio")
    end
    raw_script(newline)
    levelup.show_mob_pos(lev)
    local s = select("¡Bien! ¡Vamos!")
    if s == 1 then
    setskin(NOWINDOW)
    pc.setqf("remain",special.levelup_quest[lev][sel*2])
    syschat("<Tarea> ", mob_name(special.levelup_quest[lev][sel*2-1])," "..
    special.levelup_quest[lev][sel*2].." número de victorias.")
    q.set_title("mata "..mob_name(special.levelup_quest[lev][sel*2-1]).." ")
    q.set_counter("Restantes : ", pc.getqf("remain"))
    q.start()
    end
    setskin(NOWINDOW)
    clearmapsignal()
    elseif pc.getqf("buttonstate") == 1 then
    local s = pc.getqf("select")
    if s == 0 then s = 1 end
    local lev = pc.getqf("current")
    if lev != 0 then
    say_title("Tarea de caza:")
    say("Tienes que matar")
    say(pc.getqf("remain").." Número de este tipo:",mob_name(special.levelup_quest[lev][s*2-1]), "")
    say("más para completar la misión de caza.")
    local ss = select("Información sobre la misión de caza","Continuar")
     
     
    if ss == 1 then
    setskin(SCROLL)
    setbgimage('level_bg.tga')
    addimage(20,12,special.levelup_img[special.levelup_quest[lev][s*2-1]])
    setcolor(0,0,0)
    say("¡Elimina a ",mob_name(special.levelup_quest[lev][s*2-1])," !")
    say("Número de objetivos: "..special.levelup_quest[lev][s*2])
    raw_script("Recompensa: ".. special.levelup_quest[lev][5].."% de experiencia")
    say("")
    if lev <= table.getn(special.levelup_reward1) then
    raw_script(" "..item_name(special.levelup_reward1[lev][pc.job+1]))
    else
    raw_script(" ".." Objeto Aleatorio")
    end
    raw_script(newline)
    q.set_title("mata ", mob_name(special.levelup_quest[lev][s*2-1]), " ")
    q.set_counter("Restantes : ", pc.getqf("remain"))
    q.start()
    levelup.show_mob_pos(lev)
    select("Confirmar")
    setskin(NOWINDOW)
    clearmapsignal()
    end
    setskin(NOWINDOW)
    q.set_title(" matar "..mob_name(special.levelup_quest[lev][s*2-1]).." ")
    q.set_counter("Restantes:",
    pc.getqf("remain"))
    --q.set_icon(string.format("level_%02d.sub", lev))
    q.start()
    end
    end
    pc.setqf("buttonstate", -1)
    end
    when levelup begin
    local lev = pc.getqf("current");
    if lev == 0 then
    lev = pc.level
     
    if lev < 2 or lev > 60 then return end
    pc.setqf("buttonstate", 2)
    makequestbutton(""..lev.." misión")
    pc.setqf("current", lev)
    pc.setqf("select", 1)
    pc.setqf("remain", special.levelup_quest[lev][2])
    setskin(NOWINDOW)
    end
    end
    when kill begin
    local sel = pc.getqf("select")
    if sel == 0 then
    sel = 1
    end
    local lev = pc.getqf("current")
    if lev != 0 and npc.race == (special.levelup_quest[lev][sel*2-1]) and pc.getqf("buttonstate") == -1 then
    local remain = pc.getqf("remain") - 1
    if remain <= 0 then
    pc.setqf("remain", 0)
    q.set_counter_value(0)
    setskin(NOWINDOW)
    makequestbutton(" "..lev.." Misión - terminada")
    pc.setqf("buttonstate", 3)
    else
    pc.setqf("remain", remain)
    q.set_counter_value(remain)
    end
    end
    end
    function show_mob_pos(lev)
    map_index = pc.get_map_index()
    if map_index <= 0 then
    test_chat("show_mob_pos: map_index("..map_index..") < 0")
    return
    end
    if map_index > table.getn(special.lvq_map) then
    test_chat("show_mob_pos: map_index("..map_index..") > max("..table.getn(special.lvq_map)..")")
    return
    end
    lev_quest_list = special.lvq_map[map_index]
    if not lev_quest_list then
    test_chat("show_mob_pos: special.lvq_map[map_index("..map_index..")] is nil")
    return
    end
    mob_pos_list = lev_quest_list[lev]
    if not mob_pos_list then
    test_chat("show_mob_pos: special.lvq_map[map_index("..map_index..")][lev("..lev..")] is nil")
    return
    end
    table.foreachi(
    mob_pos_list,
    function (n, mob_pos)
    test_chat("addmapsignal("..mob_pos[1]..", "..mob_pos[2]..")")
    addmapsignal(mob_pos[1]*100, mob_pos[2]*100)
    end
    )
    setmapcenterposition(200, 0)
    end
    end
    end

  19. Me Gusta
    Santy!. got a reaction from Joakin47 in QuestHelper 1.0   
    por lo menos podrías de ortografia me arias un grandisimo favor
  20. Me Gusta
    Santy!. reacted to Joakin47 in QuestHelper 1.0   
    Bueno, esta tarde estuve el curso de quest de Keko y ElRaulXx y se me ocurrió hacer esta aplicación para facilitar las cosas a la hora de hacer una quest.

    Bien, ahora empezaré con unas preguntas que quizá se hagan...

    ¿Qué es QuestHelper qué es y para qué sirve?
    Pues la función de esta aplicación es facilitar las cosas a la hora de hacer una quest, helper traducido al español es "ayudante", más bien es como un editor de texto pero dedicado a las quest.

    ¿Cómo funciona QuesterHelper?
    Pues simple, es como un editor de texto, le das a "Nuevo" para empezar una quest desde cero, o "Abrir" para abrir una quest que ya tengas guardada en la PC.

    Otras funciones:
    Puedes cambiar la fuente que usas y el color de ella para trabajar un poco más cómodo.
    Trae una lista con casi todos los comandos quest accesible desde el menú.
    Acceso rápido al foro donde se encuentra el curso de quest.
     
     
    Fotos









    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  21. Me Gusta
    Santy!. reacted to ElRaulxX in Capí­tulo V - Los states   
    Buenas foreros de Metin2 Zone!
    Os vengo a traer la quinta entrega de nuestro fantástico curso de quests. En este capítulo trataremos los states, algo básico que tenéis que tener en cuenta a la hora de crear una quest. La verdad es que esto formaría parte del capítulo II, pues los states estructuran las quests, pero hemos aplazado este capítulo para que lo podáis entender mejor ahora que ya habéis avanzado un poco.

    Supongo que habréis visto ya en todas las quests la estructura state start begin. Efectivamente, eso es un state. Pero antes de todo debemos entender qué es realmente un state.


    1 - ¿Qué es un state?

    Podríamos decir que un state es la "división" de una quest. Las acciones de cada quest se dividen en bloques independientes: los states.
    Cuando el usuario inicia la quest empezará en el state inicial (start). A partir de entonces el creador de la quest puede ir cambiando de states a su conveniencia. De esta manera podemos hacer que el usuario sufra diferentes acciones en cada uno de los states.
    Algo importante a saber es que los states son totalmente independientes los unos de los otros. Las acciones que ocurren dentro de un state sólo ocurrirán en este state, es decir, cuando el usuario se encuentre dentro de este state.

    Un ejemplo, para que lo entendáis, son las misiones de búsqueda de un npc o de matar un determinado mob, las misiones de toda la vida que utiliza ymir. Cuando empieza la quest aparece un determinado pergamino. Conforme vamos avanzando la quest, este pergamino irá cambiando; en un state podemos abrir un determinado texto en un npc, en otro no. Esto no lo podríamos hacer sin nuestros states.
     
    Podemos entender mejor los states si los comparamos con un conjunto de habitaciones unidas a través de puertas.
    Empezamos entrando a la primera habitación (state start - inicio de la quest). En ella nos encontramos una alfombra y una silla. Por lo tanto podemos caminar sobre la alfombra y sentarnos en la silla. Ahora decidimos ir a una segunda habitación.
    En esta segunda habitación nos encontramos un sillón y una mesa. En esta habitación podemos sentarnos en el sillón y poner una baso sobre la mesa, pero no podemos caminar sobre la alfombra ni sentarnos en la silla ya que eso pertenece a la habitación anterior.
    De esta manera podemos entender los states. Cada state es independiente de los otros; podemos realizar las acciones que se encuentran dentro de un state independientemente de los otros. Para cambiar de state deberemos atravesar una puerta que, en términos de quest, correspondería a una función para cambiar el state en que se encuentra el usuario.

    Una quest puede tener un número indeterminado de states. Eso, como ya dije, va a conveniencia del creador de la quest.
    Cuando compilemos la quest (implementamos en el servidor) aparecerá en object la quest dividida/fragmentada. Esa división será en función de los states. Por ejemplo, si implementamos la quest tutorial.quest que contiene los states start, run y final, en object nos aparecerán los archivos tutorial.start, tutorial.run y tutorial.final (todo dividido en mobs, timers..., claro está). Esto lo trataremos a fondo en otro capítulo.


    2 - ¿Cómo cambiamos de state?
     
    El state del jugador puede cambiarse a partir de funciones creadas para ello.
    Los states se almacenan en la db y permanecerán hasta que sea modificado con cualquiera de las funciones creadas para ello.
    Existen dos maneras de cambiar un state: internamente o remotamente.
     
    Internamente:
    La función de cambio de state principal es la función set_state() o setstate(). Su uso es muy sencillo: tan solo debemos introducir como único argumento el nombre del state al que queremos cambiar cuando queramos realizar el cambio de state interno de la quest (por si no se entiende, entre paréntesis tenemos que poner el nombre del state al que queremos ir).
    set_state(string $state) Ejemplo:
    quest tutorial begin state start begin when 9012.chat."Aprendamos los states 1" begin say("Actualmente te encuentras en el state start") say("¿Quieres cambiar de state?") local s = select("Si","No") if s == 1 then say("Has cambiado de state correctamente") set_state("run") end end end state run begin when 9012.chat."Aprendamos los states 2" begin say("Actualmente te encuentras en el state run") say("¿Quieres cambiar de state?") local s = select("Si","No") if s == 1 then say("Has cambiado de state correctamente") set_state("start") end end endend Como veis en el ejemplo, cada state es independiente de los otros.
    También debo recordar que TODOS los states se cierran con un end.
    Los states pueden tener cualquier nombre, el que queramos. Aún así, para evitar cualquier tipo de error, es aconsejable utilizar nombres sencillos sin caracteres especiales.

    Remotamente:
    Los states de una quest también podemos cambiarlos remotamente, es decir, desde otra quest ajena. ¿Cómo hacemos eso? Pues con la función: set_quest_state(). Esta función toma dos argumentos: el primer argumento debe ser el nombre de la quest a la que queramos cambiar el state (IMPORTANTE: el nombre de la quest es el definido en la primera línea quest x begin donde x es el nombre de la quest; no confundir con el nombre del archivo quest) y el segundo el nuevo state al que queremos ir.
    set_quest_state(string $quest, string $state) Ejemplo:
     
    Quest1:
    quest tutorial1 begin state start begin when 9012.chat."Aprendamos los states 1" begin say("Actualmente te encuentras en el state start") end end state run begin when 9012.chat."Aprendamos los states 2" begin say("Actualmente te encuentras en el state run") end endend Quest2:
    quest tutorial2 begin state start begin when 9012.chat."Aprendamos los states - cambiar state" begin say("¿A que state quieres cambiar?") local s = select("start","run") if s == 1 then say("Has cambiado de state correctamente") set_quest_state("tutorial1", "start") elseif s == 2 then say("Has cambiado de state correctamente") set_quest_state("tutorial1", "run") end end endend 3 - States en los when - enter y leave
     
    Existen dos maneras de activar un when a través de los states: enter y leave.
    Enter: Se ejecutará el when cuando entremos en el state. Leave: Se ejecutará el when cuando salgamos del state. A través de estos dos whens podemos aumentar mucho la funcionalidad de una quest en las ocasiones en que podamos cambiar los states.
    He visto programadores quest que utilizan mucho esta táctica para conseguir solucionar problemas que de otra manera serían mucho más difíciles de solucionar, ¡incluso lo utiliza nuestra madre ymir!
     
    Aquí tenéis un ejemplo explicativo:
    quest tutorial begin state start begin when 9012.chat."Aprendamos los states - 1" begin say("¿Realmente quieres cambiar de state?") local s = select("si","no") if s == 1 then say("Has cambiado de state correctamente") set_state("run") end end end state run begin when enter begin chat("Has entrado al state.") end when leave begin chat("Has salido del state.") end when 9012.chat."Aprendamos los states - 2" begin say("¿Realmente quieres cambiar de state?") local s = select("si","no") if s == 1 then say("Has cambiado de state correctamente") set_state("start") end end endend Cuando entremos al state run se ejecutará chat("Has entrado al state.") y cuando salgamos del mismo chat("Has salido del state."). Este ejemplo es muy sencillo pero estoy seguro que de aquí os pueden salir grandes ideas que mejorarán mucho vuestro código.
     
     
     
    Con todo esto podemos ir jugando con los states y hacer miles de cosas.
    Algo muy útil es poner un state sin ninguna acción. Así podemos dar por finalizada la quest, ¡muy útil para quests con recorrido!
    Recordar que los states es lo principal de las quest. Si sabéis utilizarlos serán buenos aliados, sino tan solo serán neutrales. Siempre es mejor tener aliados, ¿no creéis?
     
     
    Changelog
    31/07/12 20:18 - Primera publicación oficial del capítulo. 04/09/13 11:35 - Correcciones varias. 04/09/13 14:33 - Correcciones varias. 04/09/13 15:31 - Correcciones varias, Añadida sección 3 - States en los when - enter y leave
  22. Me Gusta
    Santy!. got a reaction from gregornrv in Colocar levantamiento de login   
    No universojuegos.es
     
    Hola hoy les enseñare a colocar levantamiento de login empesemos:
     
    crearemos un archivo que se llame auto.sh en las carpetas ch1 ch2 game99
    adentro de ese archivo pergaremos lo siguiente:
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./game while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done ahora en autch asemos el mismo archivo pero de esta forma:
     
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./auth while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done  
     
    y ahora en db de esta forma
     

    ############################################################################# #mt2_blackstorm c 2012####################################################### ############################################################################# SERVER_NAME=./db while ( : ) do DATE=`date` echo "autogame starting game $DATE" >> syslog echo "running" $SERVER_NAME >> syslog # cp -f $SERVER_NAME $SERVER_NAME.current $SERVER_NAME rm cores/core.1 mv cores/cores.2 cores/cores.1 mv cores/cores.3 cores/cores.2 mv cores/cores.4 cores/cores.3 mv cores/cores.5 cores/cores.4 mv cores/cores.6 cores/cores.5 mv $SERVER_NAME.cores cores/cores.6 if [ ! -r .fastboot ]; then sleep 3 else rm .fastboot sleep 3 fi if [ -r .killscript ]; then DATE=`date`; echo "autoscript killed $DATE" >> syslog rm .killscript exit fi while [ -r pause ]; do sleep 60 done done Luego de eso en cada una de esas carpetas crearemos una carpeta llamada "cores" adentro de esa carpeta cores crearemos 6 carpetas mas llamadas "cores.1" ------- "cores.2" ---------- "cores.3" así hasta el 6 acuerdense que a todo hay que darle permisos 777.
     
    Luego abriremos el script start.sh y lo modificaremos para que inicie con auto.sh les deve quedar asi:
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
    Bueno espero averlos ayudado cualquier cosa en skype el cual es santysacred
  23. Me Gusta
    Santy!. reacted to KeKo in Mision de la muerte by portmap!   
    Tienes un fallo en la linea de cuando hablas con el npc tras matar al monstruo, ya que el comando with mob.kill no es lo que quirres usar ahi. Seria en todo un .is_dead()
     
    Pero lo mas comodo en este caso es hacer una linea asi:
     

    when mob.kill begin pc.setqf("muerte", pc.getqf("muerte") + 1 end Y luego cuando hables con el npc:
     

    when npc.chat."dialogo" with pc.getqf("muerte") == 1 begin
  24. Me Gusta
    Santy!. reacted to KeKo in Capitulo IV - Profundicemos en las condiciones   
    Buenas zone!
    De nuevo tras otro emocionante capítulo del curso brindado por el gran raul es mi turno de seguir con el curso. El capítulo de hoy tratará sobre las condiciones en las quests, lo que popularmente conoceis todos como usar if en una quest.
     
    Esta vez también nos vamos a centrar en el cuerpo de una quest, y como mi colega raul empezare con la estructura básica de un if. Recordad esto primero:
     
    De nuevo la idea es la misma que con los whens:
     
     
     
    Por lo tanto la estructura es asi:
     

    if [X] then accion end Como veis cada if le corresponde un end y para que nos os de error al cargar tiene que ir un then al final del if, si no os saltara este error:
     

     
    Bien si ya tenemos claro la estructura vamos a profundizar un poco en el uso de las condiciones. Lo primero de todo me gustaría hacer una pequeña distinción entre varios tipos de condiciones:
     
    - Condiciones simples: Son aquellas que solo tienen un unico if (con sus posibles elseifs).
     
    - Condiciones compuestas: Son aquellas que se dan en las quests en las que si superamos la primera condicion se nos pone otra condición. Ojo! Son 2 condiciones diferentes, que llevan dos if y dos ends.
     
    - Condiciones opuestas: Que son las que usan habitualmente un else, o si no un return+end (ya os explicare como funcionan en el capi), y que son aquellas en las que ponemos una condicion y lo que pasara si se cumple lo contrario a esa condicion.
     
    Bueno vamos aver un pequeño ejemplo de una quest que usa una condicion:
     

    quest capicuatro begin state start begin when login with pc.get_map_index() == 41 begin if pc.get_empire() == 1 then say("No estas en el mapa de tu reino") end end end end Hasta aquí todo bien no? Como veis es una quest que se activa si te logeas en el mapa de city1 de jinno, pero te pone la condicion de que si eres del reino 1 (shinsoo) te aparece un mensaje diciendo que no estas en el mapa de tu reino.
     
    Respecto a los ends, como hay un if lleva un end y los otros tres son del when y de la apertura.
     
    Por lo tanto hagamos un resumen: cuando quieres poner una condicion en una quest primero pones el when [X] begin al que queremos ponerle la condicion, luego escribimos la condicion en si, la accion que se realiza una vez cumplida la condicion y el end.
     

    if [X] then accion end  
    Ahora pongamos otro ejemplo con esta misma mision pero ya con algunos elseif:
     

    quest capicuatro begin state start begin when login with pc.get_map_index() == 41 begin if pc.get_empire() == 1 then say("No estas en el mapa de tu reino") elseif pc.get_empire() == 2 then say("No estas en el mapa de tu reino") elseif pc.get_empire() == 3 then say("Estas en el mapa de tu reino!") end end end end Ahora ya tenemos 3 condiciones, pero como os fijais solo 1 lleva if, ya que son continuacion de la primera y por lo tanto solo llevan un end por las tres.
     
    Y también otro ejemplo del uso de un elseif, con un local select que es cuando mas vais a ver un elseif:
     

    quest capicuatro begin state start begin when 70042.use begin say_title("Tienda portatil") say("Con este objeto podras comprar") say("Potas donde quiera que estes.") say_reward("Quieres algunas?") local tienda = select ("Potas rojas" , "Potas azules" , "Superpotas" , "Cerrar") if tienda == 1 then say("Toma 200 potas rojas") pc.give_item2("27003", 200) pc.change_money(-30000) elseif tienda == 2 then say("Toma 200 potas azules") pc.give_item2("27006", 200) pc.change_money(-45000) elseif tienda == 3 then say(" Usted ha sido trolleado") say("no hay superpotas") elseif tienda == 4 then return end end end end  
     
    A estas alturas ya os habreis dado cuenta de como funciona el uso de un elseif:
     

    if [X] then accion elseif [X] then accion elseif [X] then accion end Al igual que cuando usabamos un solo if, ponemos el when [X] begin, luego la condicion if [X] then y esta vez las otras posibilidades que queremos que haya unidas al primer if [X] then (podemos poner las que queramos) con la estructura elseif [X] then. Por último cerramos el if con un end.
     
    Vayamos ahora a un caso de condicion compuesta, por ejemplo un teletransportador para un mapa:
     

    quest capicuatro begin state start begin when 20095.chat."Teleporter" begin if pc.get_level() < 50 then say("Lo siento eres muy bajo") say("vuelve cuando seas mas lvl") return end if pc.count_item("50084") == 0 then say("Valla, no tienes sello") say("Asi que no puedes entrar") return end if pc.get_map_index() == 190 then say("No puedes ir al mapa nuevo") say("Si ya estas en el") return end say("Pues lo siento ahora no quiero") say(" llevarte al mapa nuevo.") end end end Ahora en vez de usar condiciones unidas a la primera (el if [X] then) ponemos diferentes condiciones, cada una de estilo if [X] then y con su respectivo end.
     
    Usando las condiciones compuestas conseguimos que para llegar a la accion propia del when [X] begin haya que ir cumpliendo cada una de las condiciones. Es decir, si cumplimos la primera condicion el juego mirará aver si cumplimos la segunda.
     
    Si no cumplimos la segunda no se ejecutará, y si la cumplimos mirará aver si cumplimos la tercera. Si cumplimos todas las condiciones, la accion principal se ejecutará.
     
    Otra cosa a tener en cuenta es que podemos meter condiciones dentro de otras condiciones, y para eso os pondré un ejemplo en el que mezclaré condiciones simples con condiciones opuestas (hare mas compleja la quest de antes de las potas):
     

    quest capicuatro begin state start begin when 70042.use begin say_title("Tienda portatil") say("Con este objeto podras comprar") say("Potas donde quiera que estes.") say_reward("Quieres algunas?") local tienda = select ("Potas rojas" , "Potas azules" , "Superpotas" , "Cerrar") if tienda == 1 then if pc.gold < 30000 then say("Vaya no tienes suficiente dinero") return end say("Toma 200 potas rojas") pc.give_item2("27003", 200) pc.change_money(-30000) elseif tienda == 2 then if pc.gold < 45000 then say("Vaya no tienes suficiente dinero") return end say("Toma 200 potas azules") pc.give_item2("27006", 200) pc.change_money(-45000) elseif tienda == 3 then say(" Usted ha sido trolleado") say("no hay superpotas") elseif tienda == 4 then return end end end end end Ahora hemos metido una condición dentro de otra: primero metemos la condicion de elegir la opcion 1 (la de potas rojas) y luego dentro de esa hacemos que el juego mire si tenemos 30k para comprar las potas.
     
    Os habreis fijado que ahi usamos una condición opuesta:
     

    if pc.gold < 45000 then say("Vaya no tienes suficiente dinero") return end say("Toma 200 potas azules") pc.give_item2("27006", 200) pc.change_money(-45000) Ponemos la condicion:
     

    if pc.gold < 45000 then Luego lo que pasa si la cumplimos:
     

    say("Vaya no tienes suficiente dinero") Y para cerrar la condicion ponemos:
     

    return end De esta manera, lo siguiente que pongamos se cumplirá EN CUALQUIER CASO EN EL QUE NO CUMPLAMOS LA CONDICION ANTERIOR. Y como veis si tenemos mas de 45k de yang (es decir, no cumplimos la condicion) pues nos da las potas:
     

    say("Toma 200 potas azules") pc.give_item2("27006", 200) pc.change_money(-45000) Para acabar me gustaría hablarlos de la palabra else. Esta palabra se utiliza para hacer una condicion opuesta, ya que implica que si la cumplimos estará pasando cualquier cosa contraria a la de la condicion anterior. Veamos un ejemplillo, y os recalco que UN ELSE NO TIENE QUE LLEVAR SU CORRESPONDIENTE END.
     

    quest capicuatro begin state start begin when 70044.use begin if pc.count_item("70042") == 0 then pc.give_item2("70024", 1) chat("Toma un 5o bonus") pc.remove_item("70024" , 1) else say("Lo siento pero ya tienes") say("el 5o bonus") end end end end En este caso la condicion primera es que no tengamos ningun 5o bonus en el inventario, y si no la cumplimos (es decir, si que tenemos 5o bonus) pues nos dice que ya lo tenemos. Como usamos un else no especificamos una cantidad de bonus que tenemos que tener, si no que en cualquier caso contrario a que no tengamos ninguno nos dirá que sí lo tenemos.
     
    Y bueno eso es todo en el capítulo de hoy, espero que lo hayais disfrutado y que os ayude a la hora de hacer nuevas quests .
  25. Me Gusta
    Santy!. got a reaction from ElRaulxX in Capítulo III - Profundicemos en los Whens   
    muchas gracias ademas me distes una idea :trollface:
×
×
  • Crear nuevo...