Soporte ✅Como desactivar el trade? (para evitar clonaciones)

kurinino

Miembro
LV
21
 
Awards
19
Hola amigo Alex, ya tengo el servidor online, pero me di cuenta de que se pueden duplicar items dentro del depot a través del uso de trade with ", no daré muchos más detalles para no espacir esa información. Pero conoces alguna manera de quitar el trade with " del juego?. Para así evitar las clonaciones de los items?. Muchas gracias de ante mano amigo como siempre.
 
Solución
Hola,

Muchas gracias amigo Alex como siempre por tu ayuda :)❤️

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
Hola amigo Alex, ya tengo el servidor online, pero me di cuenta de que se pueden duplicar items dentro del depot a través del uso de trade with ", no daré muchos más detalles para no espacir esa información. Pero conoces alguna manera de quitar el trade with " del juego?. Para así evitar las clonaciones de los items?. Muchas gracias de ante mano amigo como siempre.
Hola,

 

kurinino

Miembro
LV
21
 
Awards
19
Hola,

Muchas gracias amigo Alex como siempre por tu ayuda :)❤️
 

kurinino

Miembro
LV
21
 
Awards
19
Hola Alex, disculpa, para mejorar un poquito ese código, descubri que puedes entrar desde fuera de un depot con el trade puesto, entonces se pueden clonar igual los items, haciendo trade fuera del depot y caminando hacia dentro.

Se me ocurria agregar al script algo como esto, si es que tu posicion cambia mientras haces trade, que se cancele el trade. Pero no me resulta, como podría ser?.

local nextPosition = self:getPosition()
nextPosition:getNextPosition(direction)
if position != nextPosition then
self:sendTextMessage(MESSAGE_INFO_DESCR, "No puedes moverte mientras haces trade.")
return false
end
 

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
Hola Alex, disculpa, para mejorar un poquito ese código, descubri que puedes entrar desde fuera de un depot con el trade puesto, entonces se pueden clonar igual los items, haciendo trade fuera del depot y caminando hacia dentro.

Se me ocurria agregar al script algo como esto, si es que tu posicion cambia mientras haces trade, que se cancele el trade. Pero no me resulta, como podría ser?.

local nextPosition = self:getPosition()
nextPosition:getNextPosition(direction)
if position != nextPosition then
self:sendTextMessage(MESSAGE_INFO_DESCR, "No puedes moverte mientras haces trade.")
return false
end
Bouh, no lo sé cómo sería esa parte.

En hellgrave quería desactivarlo totalmente en toda la Map. El problema que hay es que hay items que tienen valor y/o superior al máximo del market 9999999........ No sé cuántos 9. Entonces no lo puse y modificar las sources no permite agregar más de esa cantidad.


Y pregunta porque != , Eso nunca lo vi aún , conozco > o < , =< , == etc...
 

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
Hola Alex, disculpa, para mejorar un poquito ese código, descubri que puedes entrar desde fuera de un depot con el trade puesto, entonces se pueden clonar igual los items, haciendo trade fuera del depot y caminando hacia dentro.

Se me ocurria agregar al script algo como esto, si es que tu posicion cambia mientras haces trade, que se cancele el trade. Pero no me resulta, como podría ser?.

local nextPosition = self:getPosition()
nextPosition:getNextPosition(direction)
if position != nextPosition then
self:sendTextMessage(MESSAGE_INFO_DESCR, "No puedes moverte mientras haces trade.")
return false
end
Puedes probar esto y decirme si funciona la duplicación ?


Si funciona házmelo saber y iré corrigiendo todos los servidores aquí subidos.

Este bug fue creado internacionalmente por la comunidad para destruir ots, pero si es el más grave y hay que corregirlo.
 

kurinino

Miembro
LV
21
 
Awards
19
Bouh, no lo sé cómo sería esa parte.

En hellgrave quería desactivarlo totalmente en toda la Map. El problema que hay es que hay items que tienen valor y/o superior al máximo del market 9999999........ No sé cuántos 9. Entonces no lo puse y modificar las sources no permite agregar más de esa cantidad.


Y pregunta porque != , Eso nunca lo vi aún , conozco > o < , =< , == etc...
Aaaah entiendo, oye Alex entonces si existe una forma de desactivarlo simplemente para todo el server?, y a mi no me molestaria quitar el trade y utilizar solo market. asi elimino el problema de raiz, me podrías decir como eliminar el trade del juego por favor?. O simplemente usaste el código de las 2 esquinas y marcaste cuadrados gigantes que tomaran todo el mapa por cada piso?.

"Y pregunta porque != , Eso nunca lo vi aún , conozco > o < , =< , == etc...". Y sobre esto, era pseudocódigo, para explicar la lógica de lo que quería lograr wajajajaja.
 

kurinino

Miembro
LV
21
 
Awards
19
Puedes probar esto y decirme si funciona la duplicación ?


Si funciona házmelo saber y iré corrigiendo todos los servidores aquí subidos.

Este bug fue creado internacionalmente por la comunidad para destruir ots, pero si es el más grave y hay que corregirlo.
Si Alex, el código si funciona, lo probé con todo los pisos del depot de Thais, desactiva el trade y salta el mensaje. Y lo de cancelar el trade en movimiento no funciona, porque te comentaba, es pseucódigo nomas, no se programar en TFS :(.

Y que maldad lo de destruir ots pero bueno, si es que me puedes ayudar diciendome como se desactiva el trade del server yo quedaría feliz :D wajajajaja.
 

Alex

Miembro del equipo
Webdesigner
LV
58
 
Awards
38
Si Alex, el código si funciona, lo probé con todo los pisos del depot de Thais, desactiva el trade y salta el mensaje. Y lo de cancelar el trade en movimiento no funciona, porque te comentaba, es pseucódigo nomas, no se programar en TFS :(.

Y que maldad lo de destruir ots pero bueno, si es que me puedes ayudar diciendome como se desactiva el trade del server yo quedaría feliz :D wajajajaja.
Pero , sin el script que te pase compilando con esa parte en las sources no corrige el problema ?

Pegando esto en game.cpp: ( Reemplazando linea 7499 hasta 7513 diria )
Tienes esto:
Código:
if (!itemList.empty()) {
            if (it.stackable) {
                uint16_t tmpAmount = stashmath;
                for (Item *item : itemList) {
                    uint16_t removeCount = std::min<uint16_t>(tmpAmount, item->getItemCount());
                    tmpAmount -= removeCount;
                    internalRemoveItem(item, removeCount);

                }
            } else {
                for (Item *item : itemList) {
                    internalRemoveItem(item);
                }
            }
        }

Cambiando por esto:

Código:
if (itemList.empty()) {
            return;
        }

        if (it.stackable) {
            uint16_t tmpAmount = amount;
            for (Item* item : itemList) {
                uint16_t removeCount = std::min<uint16_t>(tmpAmount, item->getItemCount());
                tmpAmount -= removeCount;
                internalRemoveItem(item, removeCount);

                if (tmpAmount == 0) {
                    break;
                }
            }
        } else {
            for (Item* item : itemList) {
                internalRemoveItem(item);
            }
        }
 
Última edición:

kurinino

Miembro
LV
21
 
Awards
19
Pero , sin el script que te pase compilando con esa parte en las sources no corrige el problema ?

Pegando esto en game.cpp: ( Reemplazando linea 7499 hasta 7513 diria )
Tienes esto:
Código:
if (!itemList.empty()) {
            if (it.stackable) {
                uint16_t tmpAmount = stashmath;
                for (Item *item : itemList) {
                    uint16_t removeCount = std::min<uint16_t>(tmpAmount, item->getItemCount());
                    tmpAmount -= removeCount;
                    internalRemoveItem(item, removeCount);

                }
            } else {
                for (Item *item : itemList) {
                    internalRemoveItem(item);
                }
            }
        }

Cambiando por esto:

Código:
if (itemList.empty()) {
            return;
        }

        if (it.stackable) {
            uint16_t tmpAmount = amount;
            for (Item* item : itemList) {
                uint16_t removeCount = std::min<uint16_t>(tmpAmount, item->getItemCount());
                tmpAmount -= removeCount;
                internalRemoveItem(item, removeCount);

                if (tmpAmount == 0) {
                    break;
                }
            }
        } else {
            for (Item* item : itemList) {
                internalRemoveItem(item);
            }
        }
Alex es justo lo que me faltaba, ahora ya no te cuenta el item en el market si es que lo tienes en la mochila, por lo que la gente ya no puede entrar al depot haciendo trade desde fuera, entonces este código más el anterior, solucionarian el problema de la duplicación de items :)
 
Arriba