News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

Nueva opción de Vender (Sell) en el SMFShop

Started by fre3men, January 04, 2008, 02:36:29 PM

Previous topic - Next topic

fre3men

Hola, pues aquí os pongo una modificación que le hice hace mucho tiempo, más bien hice muchos añadidos pero borré este mod porque no era lo que buscaba sin contar que tenía ciertos agujeros de seguridad. Actualmente estoy en el desarrollo desde cero de una aplicación mucho más ambiciosa que el SMFShop, espero que algún día vea la luz (pues son ya muchas semanas que le he dedicado, aunque el parón de las navidades ha dolido mucho al desarrollo).

Bien, al tema. Esta modificación añade la opción de vender el objeto al mismo sistema de la tienda por la mitad de precio (del que te costó). Una vez lo vendes al sistema, se actualiza el stock de la misma tienda (está comentado como hacer para que esta actualización del stock no se haga si no se desea, realmente lo tengo todo comentado para que sepáis que va haciendo el código ;))

Primero de todo tenéis que añadir el código siguiente al archivo Shop.php (que se encuentra en Sources/Shop) justo antes del else que hay por el final del archivo:

Código a buscar


// Otherwise... What do you want us to do?
else
{
fatal_error('ERROR: The \'do\' action you passed was not valid!');
}



Código que hay que insertar antes del código buscado


//implementamos la opción de vender el objeto
//creado por fre3men
elseif($_GET['do'] == 'sell')
{
//protegemos la entrada de datos
$id_objeto = (int) $_GET['id'];

//pasamos todos los datos del usuario al array "result"
$result = db_query("
SELECT *
FROM {$db_prefix}members
WHERE ID_MEMBER = {$ID_MEMBER}", __FILE__, __LINE__);

$user = mysql_fetch_assoc($result);
mysql_free_result($result);

$result2 = db_query("
SELECT *
FROM {$db_prefix}shop_inventory
WHERE id = {$id_objeto}", __FILE__, __LINE__);

$item = mysql_fetch_assoc($result2);
mysql_free_result($result2);

//protegemos el ROBO!!!! de objetos por HACKERS!!! //comprobamos que el propietario del objeto es el usuario que ha ejecutado la función de vender
if ($item['ownerid'] != $ID_MEMBER)
fatal_error('ERROR: ¡Has intentado hackear el programa vendiendo un objeto que no te pertenece! - Tu IP ha sido registrada para posibles sanciones'); //en el LOG de ERRORES del Foro SMF aparece esta información con el username y la IP del usuario :) (no se pueden escapar jeje)

$result3 = db_query("
SELECT *
FROM {$db_prefix}shop_items
WHERE id = {$item['itemid']}", __FILE__, __LINE__);

$desc_item = mysql_fetch_assoc($result3);
mysql_free_result($result3);

//si el objeto vale más que 1 calculamos el valor de la venta dividiendolo por 2
if ($item['amtpaid'] > 1)
$venta = $item['amtpaid'] / 2;
//el valor mínimno de compra será 1 en caso que el objeto tenga un valor inferior a 1
else
$venta = 1;

//eliminamos este objeto (registro) de la base de datos
db_query("
DELETE FROM {$db_prefix}shop_inventory
WHERE id = {$id_objeto}
LIMIT 1", __FILE__, __LINE__);

//actualizamos la cantidad de dinero del usuario con la suma del valor de la venta
db_query("
UPDATE {$db_prefix}members
SET money = money + {$venta}
WHERE ID_MEMBER = {$ID_MEMBER}", __FILE__, __LINE__);

//actualizamos el estock de la tienda al ser vendido este objeto al sistema del smfshop
$inc = 1; //si no queremos que se actualice el stock de la tienda, basta con sustituir el 1 por un 0 (no borrar por si se cambia de opinión)
db_query("
UPDATE {$db_prefix}shop_items
SET stock = stock + {$inc}
WHERE id = {$desc_item['id']}", __FILE__, __LINE__);

// Ponemos título a la página
$context['page_title'] = $txt['shop'];

// Pasamos lo que se ha hecho
$context['shop_buy_message'] = '' . $txt['shop_venta1'] . ' ' . $desc_item['name'] . '';

//añadimos la categoría
$context['shop_buy_message'] .= '<br><br><a href="' . $scripturl . '?action=shop;do=inv;">' . $txt['shop_back2inv'] . '</a>';

//Llamamaremos a la función que nos mostrará el texto anterior
$context['sub_template'] = 'message';
}





Bueno, hecho esto, ya habéis hecho la parte más importante, ahora toca poner la opción VENDER en el inventario.

Tenéis que abrir el archivo Shop.template.php que seguramente se encuentre en Themes/Default sino estará en vuestro Themes (poco probable).

Buscar este código (aparece por la línea 377):


// If the trade centre is enabled...
if ($modSettings['shopTradeEnabled'])
//... show the 'Trade Item' link
echo '
<br /><a href="', $scripturl, '?action=shop;do=trade_sell;id=', $item['id'], '">', $txt['shop_tradeitem'], '</a>';
}



Justamente, después del símbolo de cerrar llave (que debería ser la línea 383) por encima de este otro código:


}
// Close this row
echo '
</tr>';
// Change the alternating row background
$alternating = ($alternating == 'windowbg') ? 'windowbg2' : 'windowbg';




Insertar el siguiente código:


//implementamos el botón vender, lo mostramos si no se está comerciando con el objeto y si este tiene un valor superior a 0
//por fre3men
if ($item['trading'] == 0 && $item['amtpaid'] > 0)
{
if ($item['amtpaid'] > 1)
$valor = $item['amtpaid'] / 2;
//el valor mínimno de compra será 1
else
$valor = 1;

//implementamos el botón de vender indicando el valor de compra por el smfshop e indicando la divisa
echo '<hr><a href="', $scripturl, '?action=shop;do=sell;id=', $item['id'], '">', $txt['shop_sell'], '</a> ' . $txt['shop_sell2'] . ' ' . $valor . ' ' . $txt['divisa'] . '';
}



Lo último y más sencillo es añadir ciertas variables de texto al archivo Shop.spanish.php y Shop.english.php. Para ello debéis ir a la carpeta de Languages en el theme default (o en vuestro theme) y añadir este código:



$txt['shop_venta1'] = 'Has vendido el siguiente objeto:';
$txt['divisa'] = 'creditos';
$txt['shop_sell'] ='Vender';
$txt['shop_sell2'] = ' por';




Claro está que el nombre de "creditos" que le he puesto a la divisa lo podéis cambiar según tengáis vuestro nombre de divisa.

Recordad de hacer una copia de seguridad de los archivos que váis a modificar.

Bueno, pues esto es todo amigos.

Si queréis ver alguna aplicación que he creado para el SMF aquí tenéis algunas:

Lanzador de Dados HQ.es
Simulador de Combate
Trivial HeroQuest.es

El Trivial espero en algún momento tener el suficiente tiemp como para crear un gestor y que ataque a la base de datos MYSQL para crear las preguntas y también hacer su instalador y ponerlo como mod.

Succubus Evaligan

#1
Hola!!!
A mi me interesa el lanzador de dados para mi foro.
No se si tu hayas jugado Dungeons and Dragons, bueno es un juego que se juega con diferentes dados.
1d3, 1d4,1d6,1d8.1d10,1d12,1d20 y 2 dados porcentuales. Nosotras desde hace mucho tiempo hemos querido implementar un sistema de lanzamiento de dados para jugar Dungeons and Dragons OnLine por el foro.

En el foro ya subimos varios libros que se ocupan para el juego por Descarga Directa, Pando, Torrent, etc. Pero obviamente no se puede jugar D&D sin los dichosos dados.

Serias de gran ayuda si nos ayudas con un sistema así.

P.D. Estaba revisando los otros dos que pusiste abajo y sabes, no están nada mal. La verdad es que también nos podrían servir. Solo seria cuestión de cambiar las clases por otro tipo de clases y los monstruos por monstruos por otros parecidos a D&D o a VM o a los de Ragnarok OnLine.

Como nota adicional... el foro es femenino, osea sus integrantes son en su mayoría mujeres, espero que no haya mucho problema por eso ¿o si?
Yuri Goddess

bigo

oye tengo qeu admirir que el Trivial HeroQuest.es me encanto... me gustaria saber spodrias mandarme las intruciones para hacverlo funcionar en una de esa te ayudo a crear el mod... me intersa porque tengo una pagian de comics y esot es lqo eu seimpre e estado buscando hacer... espero respuesta  ;)
Devuelta pero sin pagina :P

Mis Mod:
multiples bbcode - Nuevo  MessagePreview - firma por defecto

Succubus Evaligan

Quote from: bigo on March 01, 2008, 02:11:42 PM
oye tengo qeu admirir que el Trivial HeroQuest.es me encanto... me gustaria saber spodrias mandarme las intruciones para hacverlo funcionar en una de esa te ayudo a crear el mod... me intersa porque tengo una pagian de comics y esot es lqo eu seimpre e estado buscando hacer... espero respuesta  ;)
Ahora que lo mencionas ese mod esta muy interesante. Me gusto las preguntas que hacia y como contaba el tiempo que tardabas en contestarlas. Estuvo muy bueno eso.
Yuri Goddess

lemaniac

#4
esto me va a servir bastante...

yo juego D&D!!! y mi foro tiene dados... el mod lo encontre x aqui... pero le hise algunas modificaciones... si supiera como las hice... XD.... todabia soy muy novato en php T_T

me gustaria saber si hay alguna forma de crear varias tiendas, las cuales estarian designadas a uno o varios usarios para que ellos puedan administrarlas a su antojo

____________________________________
editado a los 20min:

ya encontre el mod original para dados... lo dejo junto con mi version

Succubus Evaligan

#5
QuoteError in Package Installation
At least one error was encountered during a test installation of this package. It is strongly recommended that you do not continue with installation unless you know what you are doing, and have made a backup very recently. This error may be caused by a conflict between the package you're trying to install and another package you have already installed, an error in the package, a package which requires another package that you don't have installed yet, or a package designed for another version of SMF.

Install Actions
Installations actions for "Dice Roller for Your Forum":
Installing this package will perform the following actions:
   Type    Action    Description
1.    Execute Modification    ./Sources/Post.php    Test failed
2.    Execute Modification    ./Themes/default/Post.template.php    Test failed
3.    Execute Modification    ./index.php    Test successful
4.    Extract File    ./Themes/default/images/dice.gif    
5.    Extract File    ./Themes/default/images/rollgen.gif    
6.    Extract File    ./Sources/RPG.php    

Creo que tendré que instalarlo manualmente... aunque no estoy muy segura sobre como hacer eso.

¿Alguien me ayuda con la instalación de los dados?

Información General del Paquete
Aquí aparece información general acerca del paquete, tal como el ID del paquete y su nombre.
ID del paquete: shank:dicemod
Nombre del paquete: Dice Roller for Your Forum
version del Paquete: 1.0
Tipo de paquete: modification
Instalación : instrucciones para las siguientes versiones de SMF: 1.1.4
Archivos instalados

    * dice.gif se copiará a $imagesdir
    * rollgen.gif se copiará a $imagesdir
    * RPG.php se copiará a $sourcedir

Modificaciones en archivos de SMF
En el archivo $sourcedir/Post.php
Busque:

preparsecode($_POST['message']);


Arriba de eso, añada:

       include_once 'RPG.php';
                        $_POST['message'] = preg_replace('~:dice (\d+)d(\d+)(\D*?)(\d*?):~ei', "dice('\$1', '\$2', '\$3', '\$4')", $_POST['message']);
                        $_POST['message'] = preg_replace('~:stats (\d+)d(\d+)(\D*?)(\d*?),(\D+),(\d+):~ei', "statroll('\$1', '\$2', '\$3', '\$4', '\$5', '\$6')", $_POST['message']);
                        $_POST['message'] = preg_replace('~:rollgen (.*?):~ei', "rollgen('\$1')", $_POST['message']);


En el archivo $themedir/Post.template.php
Busque:

global $context, $settings, $options, $txt, $modSettings;


Reemplácelo por:

global $context, $settings, $options, $txt, $scripturl, $modSettings;


En el archivo index.php
Busque:

'requestmembers' => array('Subs-Auth.php', 'RequestMembers'),


Debajo, añada:

'rpg' => array('RPG.php', 'rpg'),


Hice todo eso pero no veo los dichosos dados para hacer clic sobre ellos por ninguna parte al momento de crear el post.

Aclaro que estoy usando el theme default y ni aun así los veo por ningún lado.

Alguien puede ayudarme con eso por favor?
Por cierto seria genial ver esos dados en acción y funcionando en algún foro.
Yuri Goddess

lemaniac

en mi foro funcionan...

www.vinzentghost.com/foro




bigo

yo hace tiempo instale ese mod y no tuve problemas pero recuerdo que mucho no pudieron... no creo que sea muy complicado :P
Devuelta pero sin pagina :P

Mis Mod:
multiples bbcode - Nuevo  MessagePreview - firma por defecto

Succubus Evaligan

Quote from: bigo on March 03, 2008, 07:47:27 PM
yo hace tiempo instale ese mod y no tuve problemas pero recuerdo que mucho no pudieron... no creo que sea muy complicado :P
Pues a mi lo que me falta es que aparezcan los dados para apretarle. Porque ya probé con los códigos que copie del foro de el y si me salen en el mio; pero no aparece el botoncito. No se realmente a que se deba. Instale todo tal como decía el parse SMF y coloque los archivos en donde me dijo, no se que más hace falta hacer.

Por cierto buen mod ese de vender los items que compraste a la tienda. Esta genial. :D
Yuri Goddess

lemaniac

creo que te falto agregar despues de

Quoteglobal $context, $settings, $options, $txt, $scripturl, $modSettings;

esto

Quote// Enter link to the roller!
                echo '
                        <tr>
                        <td valign="top" align="right"></td>
                        <td><a href="'.$scripturl.'?action=rpg" onclick="return reqWin(this.href,350,320)"><img src="' . $settings['images_url'] . '/rollgen.gif" alt="Dice roll code generator" /></a></td>
                        </tr>';

bigo

oye fre3men cuenta po como hiciste esa modificacion!!
Devuelta pero sin pagina :P

Mis Mod:
multiples bbcode - Nuevo  MessagePreview - firma por defecto

fre3men

Hola, vaya, veo que se ha hablado de todo menos del tema del post  :o

Respecto al Lanzador de dados, pues actualmente está programado para el tipo de dado del HeroQuest o mejor dicho para dos tipos de dados de seis caras. Ya tenía en mente hacer una macro aplicación de dados en la que poder añadir incluso las imágenes de las caras de cualquier tipo de dado (atacando a la Base de Datos), pero por tiempo lo tengo desestimado (al menos por ahora).

Sobre el Trivial, pues aún está verde el programa, tengo que arreglar un problema que tengo a la hora de calcular el tiempo que ha llevado realizar el mismo, y por supuesto cambiar en la BBDD el tipo de campo que guarda las fechas y el tiempo, ya que estará mucho más optimizado utilizando integers y el problema que tengo encima desaparece :) . También tendría que hacer el gestor de administración, que no lo hay. Y que las preguntas en vez de estar en una BBDD como archivo php se guardaran en la BBDD del Foro. Actulamente lo único que se utiliza de la BBDD del foro es para guardar las estadísitcas de los usuarios registrados que realizan el Test. Por cierto, este Test te pregunta un número de preguntas que tú le dices que quieres que haga (lo tengo puesto en 20 preguntas) de la BBDD, y te las hace aleatoriamente cogiéndolas desde la BBDD sin repetirte ninguna en ese mismo test. Vamos, que no tienes que crear test diferentes, tan sólo las preguntas :D

Pero como dije al principio del post, estoy inmerso (y ahora bastante saturado) programando varias aplicaciones nuevas para mi web, y una de ellas bastante extensa y que apasionará a más de uno. Por ello no se cuando podré crear el MOD del Trivial, y claro está no puedo facilitar el código hasta que esté bien terminado, y asegurarme que pueda quedar clara la autoría del mismo si se descarga e instala (a todos nos gusta que reconozcan nuestro trabajo y respeten nuestros derechos de autor ;) ).

De todos modos me meto en todos los berenjenales y también empecé un tutorial para explicar como crear aplicaciones para el SMF (me gusta mejor llamar aplicaciones que mods, ya que no son pequeñas, medianas ni grandes modificaciones al funcionamiento del SMF sino más bien programas que se ejecutan desde el SMF).  Así que si algún día lo termino también lo colgaré. Pero lo dicho, ahora estoy con esas aplicaciones y no me quiero comprometer a nada más hasta terminar esas, espero que lo comprendáis.

Un saludo.

bigo

bueno no me quedara otra opcion que esperar y sobre los derechos de autor.. estoy mas por el softwar libre ;) saludo
Devuelta pero sin pagina :P

Mis Mod:
multiples bbcode - Nuevo  MessagePreview - firma por defecto

Succubus Evaligan

#13
Bueno regresando al tema original...
Si funciona la modificación y si vende; pero hay un mensaje que no me queda bastante claro que aparece en ocasiones y que puede asustar a las personas y es este.
Quote
An Error Has Occurred!
ERROR: �Has intentado hackear el programa vendiendo un objeto que no te pertenece! - Tu IP ha sido registrada para posibles sanciones
Solo fui a la tienda, compre un item, luego fui a Inventario y luego lo vendí; y me salio eso.

Eso me ocurrio la primera vez, la segunda vez ya no, y sigo probando a ver cuantas veces sale ese mensaje.
Quote
Has vendido el siguiente objeto: A Test Item

Back to your Inventory
Voy a la tienda y compro ese u otro objeto.
a veces aparece ese mensaje y otra veces no.

Bueno no pasa nada supongo, más que el susto que se lleve la persona al leer eso. xD (seguramente me van a llegar algunos mensajes sobre eso después).

El Tribial del HeroQuest esta muy bien, ojala que pronto termines todo eso que me imagino que si es mucho trabajo. Me encanta como corre el tiempo cuando te hacen las preguntas. xD eso forza a prestar más atención al usuario y a pensar rápido.

No te preocupes, cuando sea la hora de que compartas esa aplicación, sera la hora, mientras tanto esperaremos. Se lo que es tener bastante trabajo creando cosas para la web y el foro, y si se que quitan bastante el tiempo.
Yuri Goddess

fre3men

Hola Succubus Evaligan,

Sobre el primer mensaje, este advierte que se ha intentado vender un objeto que no te pertenece, ten en cuenta que se envía los datos por un formulario con método GET, entonces este es visible en la barra de direcciones y vulnerable a ser modificado, fijate en la URL que aparece cuando estas sobre el texto de vender, fíjate en el ID . Lo que hago con el código, es comprobar que el ID del objeto que se quiere vender corresponde a un objeto del vendedor, por eso de que si te ha salido ese mensaje es posible que hubieras modificado la URL, sino no debería salir. Aún así puedes cambiar el texto por algo más suave si quieres, algo así como: ERROR - Has intentado vender un objeto que no te pertenece.. Bueno, ya me dirás si te vuelve a pasar eso, pero lo dicho, sólo debe dar ese error si se pasa una ID no válida o de un objeto que no pertenece al vendedor.

Sobre el segundo mensaje, supongo que te refieres cuando vendes y no cuando compras, ya que  es imposible que salga cuando compras, pues el código sólo está en el condicional que vende. Lo raro es que me dices que a veces no aparece cuando debería aparecer siempre que vendes, ya que el código que indica lo que has vendido está justo después de que efectue la venta, la parte del texto que te sale en inglés es porque no debes tener todo el mod traducido.

Un saludo.

fre3men

Quote from: bigo on March 04, 2008, 08:16:49 AM<br />bueno no me quedara otra opcion que esperar y sobre los derechos de autor.. estoy mas por el softwar libre

Hola bigo,

Bueno, el software libre también puede tener derechos de autor, aunque estos sean sólo para reflejar el reconocimiento al autor ;)

Saludos.

alojalo.net

Hola perdon mi ignoracion pero que eso no esta en el mod?? que dice reventa de articulos??
saludos
hxxp:www.alojalo.net [nonactive]

SolanDeCabras ®

En la reventa de articulos que viene por defecto con el Shopmod, los usuarios ponen en venta sus artículos, y otros usuarios compran esos artículos que otros usuarios pusieron a la venta en el Centro de reventas.

Pero con este mod los usuarios pueden vender y recibir automáticamente su dinero en la propia tienda.

Advertisement: