Tudo que gmstrikker postou
-
TSF 0.4
https://github.com/Fir3element/3777/tree/master/src
-
Compilar OTClient no Debian 9
bump
-
Compilar OTClient no Debian 9
bump
-
Compilar OTClient no Debian 9
Alguém sabe como compilar? Eu pago!
-
Compilar OTClient no Debian 9
bump
-
Compilar OTClient no Debian 9
Como compilar o OTClient no Debian 9, já estou tentando a um tempo, se preciso até pago pra quem me ajudar! As dependencias estão instaladas: root@tduarte:/home/leo# apt-get install -y build-essential cmake git-core Reading package lists... Done Building dependency tree Reading state information... Done git-core is already the newest version (1:2.11.0-3+deb9u2). build-essential is already the newest version (12.3). cmake is already the newest version (3.7.2-1). 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. root@tduarte:/home/leo# apt-get install -y libboost-all-dev libphysfs-dev libssl-dev liblua5.1-0-dev Reading package lists... Done Building dependency tree Reading state information... Done libssl-dev is already the newest version (1.1.0f-3+deb9u1). libboost-all-dev is already the newest version (1.62.0.1). libphysfs-dev is already the newest version (2.0.3-5). liblua5.1-0-dev is already the newest version (5.1.5-8.1+b2). 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. root@tduarte:/home/leo# apt-get install -y libglew-dev libvorbis-dev libopenal-dev zlib1g-dev Reading package lists... Done Building dependency tree Reading state information... Done libglew-dev is already the newest version (2.0.0-3+b1). libvorbis-dev is already the newest version (1.3.5-4). libopenal-dev is already the newest version (1:1.17.2-4+b2). zlib1g-dev is already the newest version (1:1.2.8.dfsg-5). 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. Mas quando eu tento compilar... root@tduarte:/home/leo/Documents/otclient/build# make [ 1%] Building CXX object CMakeFiles/otclient.dir/src/framework/util/crypt.cpp.o /home/leo/Documents/otclient/src/framework/util/crypt.cpp: In member function ‘void Crypt::rsaSetPublicKey(const string&, const string&)’: /home/leo/Documents/otclient/src/framework/util/crypt.cpp:329:21: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_dec2bn(&m_rsa->n, n.c_str()); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:330:21: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_dec2bn(&m_rsa->e, e.c_str()); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:333:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if(m_rsa->_method_mod_n) { BN_MONT_CTX_free(m_rsa->_method_mod_n); m_rsa->_method_mod_n = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:333:54: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if(m_rsa->_method_mod_n) { BN_MONT_CTX_free(m_rsa->_method_mod_n); m_rsa->_method_mod_n = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:333:77: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ _rsa->_method_mod_n) { BN_MONT_CTX_free(m_rsa->_method_mod_n); m_rsa->_method_mod_n = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp: In member function ‘void Crypt::rsaSetPrivateKey(const string&, const string&, const string&)’: /home/leo/Documents/otclient/src/framework/util/crypt.cpp:338:21: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_dec2bn(&m_rsa->p, p.c_str()); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:339:21: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_dec2bn(&m_rsa->q, q.c_str()); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:340:21: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_dec2bn(&m_rsa->d, d.c_str()); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:343:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if(m_rsa->_method_mod_p) { BN_MONT_CTX_free(m_rsa->_method_mod_p); m_rsa->_method_mod_p = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:343:54: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if(m_rsa->_method_mod_p) { BN_MONT_CTX_free(m_rsa->_method_mod_p); m_rsa->_method_mod_p = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:343:77: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ _rsa->_method_mod_p) { BN_MONT_CTX_free(m_rsa->_method_mod_p); m_rsa->_method_mod_p = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:344:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if(m_rsa->_method_mod_q) { BN_MONT_CTX_free(m_rsa->_method_mod_q); m_rsa->_method_mod_q = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:344:54: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if(m_rsa->_method_mod_q) { BN_MONT_CTX_free(m_rsa->_method_mod_q); m_rsa->_method_mod_q = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:344:77: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ _rsa->_method_mod_q) { BN_MONT_CTX_free(m_rsa->_method_mod_q); m_rsa->_method_mod_q = NULL; } ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ In file included from /usr/include/openssl/asn1.h:24:0, from /usr/include/openssl/rsa.h:16, from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:35: /home/leo/Documents/otclient/src/framework/util/crypt.cpp: In member function ‘bool Crypt::rsaCheckKey()’: /home/leo/Documents/otclient/src/framework/util/crypt.cpp:355:21: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_mod(m_rsa->dmp1, m_rsa->d, r1, ctx); ^ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ In file included from /usr/include/openssl/asn1.h:24:0, from /usr/include/openssl/rsa.h:16, from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:35: /home/leo/Documents/otclient/src/framework/util/crypt.cpp:355:34: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_mod(m_rsa->dmp1, m_rsa->d, r1, ctx); ^ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ In file included from /usr/include/openssl/asn1.h:24:0, from /usr/include/openssl/rsa.h:16, from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:35: /home/leo/Documents/otclient/src/framework/util/crypt.cpp:356:21: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_mod(m_rsa->dmq1, m_rsa->d, r2, ctx); ^ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ In file included from /usr/include/openssl/asn1.h:24:0, from /usr/include/openssl/rsa.h:16, from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:35: /home/leo/Documents/otclient/src/framework/util/crypt.cpp:356:34: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_mod(m_rsa->dmq1, m_rsa->d, r2, ctx); ^ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:358:29: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_mod_inverse(m_rsa->iqmp, m_rsa->q, m_rsa->p, ctx); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:358:42: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_mod_inverse(m_rsa->iqmp, m_rsa->q, m_rsa->p, ctx); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ /home/leo/Documents/otclient/src/framework/util/crypt.cpp:358:52: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ BN_mod_inverse(m_rsa->iqmp, m_rsa->q, m_rsa->p, ctx); ^~ In file included from /home/leo/Documents/otclient/src/framework/util/crypt.cpp:23:0: /home/leo/Documents/otclient/src/framework/util/crypt.h:31:16: note: forward declaration of ‘RSA {aka struct rsa_st}’ typedef struct rsa_st RSA; ^~~~~~ CMakeFiles/otclient.dir/build.make:110: recipe for target 'CMakeFiles/otclient.dir/src/framework/util/crypt.cpp.o' failed make[2]: *** [CMakeFiles/otclient.dir/src/framework/util/crypt.cpp.o] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/otclient.dir/all' failed make[1]: *** [CMakeFiles/otclient.dir/all] Error 2 Makefile:127: recipe for target 'all' failed make: *** [all] Error 2 root@tduarte:/home/leo/Documents/otclient/build#
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
White?
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Vc q manja pra cacete, me ajuda a fazer isso pls Pra vc não achar que eu to querendo me aproveitar de sua nobresa andei pesquisando pra não fazer merda, acho que fiz certo pra adicionar a tabela a ALTER TABLE `auction_system` ADD `rarity` TINYINT(1) NOT NULL DEFAULT '0' AFTER `date`; (Isso no sistema de tradeoff) CREATE TABLE `auction_system` ( `id` int(11) NOT NULL auto_increment, `player` int(11), `item_id` int(11), `item_name` varchar(255), `count` int(11), `cost` int(11), `date` int(11), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ALTER TABLE `players` ADD `auction_balance` INT( 11 ) NOT NULL DEFAULT '0'; Ou era pra fazer na parte do item do player, pq ai eu não consigo achar como faz... Ai no market system --[[ Offline player to player item trader (Auction System) by vDk Script version: 1.2a [ -- FIXED CLONE ITEMS BUG -- ] ]]-- local config = { levelRequiredToAdd = 50, maxOffersPerPlayer = 5, SendOffersOnlyInPZ = true, blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933} } function onSay(cid, words, param, channel) if(param == '') then local msg = "Market:\n\n/market buy, ID\n/market remove, ID\n/market add, ItemName, ItemPrice, ItemCount\n\nMore information look in us website!" doPlayerPopupFYI(cid, msg) return true end local t = string.explode(param, ",") if(t[1] == "add") then if((not t[2]) or (not t[3]) or (not t[4])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end if(not tonumber(t[3]) or (not tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.") return true end if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.") return true end local item = getItemIdByName(t[2], false) if(not item) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end if(getPlayerLevel(cid) < config.levelRequiredToAdd) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.") return true end if(getPlayerVocation(cid) == 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have the profession to do that action!") return true end if(isInArray(config.blocked_items, item)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.") return true end if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).") return true end local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";") if(check:getID() == -1) then elseif(check:getRows(true) >= config.maxOffersPerPlayer) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.") return true end end if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.") return true end local itemcount, costgp = math.floor(t[4]), math.floor(t[3]) doPlayerRemoveItem(cid, item, itemcount) db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.") end if(t[1] == "buy") then if(not tonumber(t[2])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(buy:getID() ~= -1) then if(getPlayerMoney(cid) < buy:getDataInt("cost")) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.") buy:free() return true end if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.") buy:free() return true end if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.") buy:free() return true end if(getPlayerVocation(cid) == 0 or getPlayerVocation(cid) == 13 or getPlayerVocation(cid) == 14) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have the profession to do that action!") return true end if(isItemStackable((buy:getDataString("item_id")))) then doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count")) else for i = 1, buy:getDataInt("count") do doPlayerAddItem(cid, buy:getDataString("item_id"), 1) end end doPlayerRemoveMoney(cid, buy:getDataInt("cost")) db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!") db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";") buy:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "remove") then if((not tonumber(t[2]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.") return true end end local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(delete:getID() ~= -1) then if(getPlayerGUID(cid) == delete:getDataInt("player")) then db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") if(isItemStackable(delete:getDataString("item_id"))) then doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count")) else for i = 1, delete:getDataInt("count") do doPlayerAddItem(cid, delete:getDataString("item_id"), 1) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!") end delete:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "withdraw") then local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";") if(balance:getDataInt("auction_balance") < 1) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.") balance:free() return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!") doPlayerAddMoney(cid, balance:getDataInt("auction_balance")) db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";") balance:free() end return true end Ai no item add if(t[1] == "add") then Teria que colocar a parte do rarity do item db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")") E no buy if(t[1] == "buy") then Teria que colocar a parte do rarirty tbm doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count")) Tbm, eu acho que é só isso, mas não sei como faze
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Tem ideia de como fazer white?
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
É sim! Desculpe a demora!
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Vc diz a tabela auction_system? Não sei mexer não, mas se vc me der um luz posso tentar! # Name Type Collation Attributes Null Default Comments Extra Action 1 id int(11) No None AUTO_INCREMENT Change Drop Primary More 2 player int(11) Yes NULL Change Drop Primary More 3 item_id int(11) Yes NULL Change Drop Primary More 4 item_name varchar(255) latin1_swedish_ci Yes NULL Change Drop Primary More 5 count int(11) Yes NULL Change Drop Primary More 6 cost int(11) Yes NULL Change Drop Primary More 7 date int(11) Yes NULL Change Drop Primary More
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Hoje!? *-----*
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Vc diz amanhã brother?
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Como tu disse é possivel mesmo mano! Meu amigo me mandou um OT que tem isso: http://www.noxiousot.com/?subtopic=market
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Vc pediu pra eu lembrar cá estou eu =)
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Aeeee esperei muito por isso =) Tá de ferias white? Consegue me ajudar com o sistema do trade offline com refinamento?
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Nossa mano muito obrigado! Queria muito abrir um ot com esse sistema de trade off + refinamento seria as partes principais do meu ot... Vou esperar vc ter tempo então, espero que a galera use tbm seria de mais jogar ots assim... Ficaria mt igual pixelchampions e ainda ia ficar melhor. Se tiver tempo antes faça por favor que eu vou tentar abrir um ot com esses dois e se alguem abrir tbm avisa q eu vou jogar
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Pls não me abandone brother!
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Uhun... isso seria possivel ou daria algum problema? Pq esses itens refinados precisam ser salvos em algum lugar.. Sei lá não entendo quase nada, to começando ainda estudando logica de programação... Esse ultimo script vc tirou aquela rates? Tipo que configurava chance = 1, chance = 2 E multiplicava a chance em 2 vezes? Pq eu tentei E o item 8300 em vez de começar como 100% de chance (50 * 2, [1] = {50, false, false},) parece que somou as porcentagens e ficou 52% O outro item [8306] = {range = {0, 10}, info = {chance = 1, removeable = true}}, também, em vez de começar com 50%: [1] = {50, false, false}, começou com 51%
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
Não sei como te agradecer, muito obrigado mesmo... Não sei se ta funcionando ou se vai bugar, demorou muito pra esse bug aparecer... Mas vlw por tudo aí! Esse sistema de refinamento é mt compelxo pra mim, só faço scripts onsay tipo comprar algum item, um movemment, uma porta, não entendo mt ele... Me tira uma dúvida... Seria possivel integrar ele com esse sistema de trade offline de 8.6? O que eu precisaria saber pra poder fazer isso? Qlqr material q souber ou puder, script relacionado... --[[ Offline player to player item trader (Auction System) by vDk Script version: 1.2a [ -- FIXED CLONE ITEMS BUG -- ] ]]-- local config = { levelRequiredToAdd = 50, maxOffersPerPlayer = 5, SendOffersOnlyInPZ = true, blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933} } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end local t = string.explode(param, ",") if(t[1] == "add") then if((not t[2]) or (not t[3]) or (not t[4])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end if(not tonumber(t[3]) or (not tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.") return true end if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.") return true end local item = getItemIdByName(t[2], false) if(not item) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end if(getPlayerLevel(cid) < config.levelRequiredToAdd) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.") return true end if(getPlayerVocation(cid) == 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have the profession to do that action!") return true end if(isInArray(config.blocked_items, item)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.") return true end if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).") return true end local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";") if(check:getID() == -1) then elseif(check:getRows(true) >= config.maxOffersPerPlayer) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.") return true end end if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.") return true end local itemcount, costgp = math.floor(t[4]), math.floor(t[3]) doPlayerRemoveItem(cid, item, itemcount) db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.") end if(t[1] == "buy") then if(not tonumber(t[2])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(buy:getID() ~= -1) then if(getPlayerMoney(cid) < buy:getDataInt("cost")) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.") buy:free() return true end if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.") buy:free() return true end if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.") buy:free() return true end if(getPlayerVocation(cid) == 0 or getPlayerVocation(cid) == 13 or getPlayerVocation(cid) == 14) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have the profession to do that action!") return true end if(isItemStackable((buy:getDataString("item_id")))) then doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count")) else for i = 1, buy:getDataInt("count") do doPlayerAddItem(cid, buy:getDataString("item_id"), 1) end end doPlayerRemoveMoney(cid, buy:getDataInt("cost")) db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!") db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";") buy:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "remove") then if((not tonumber(t[2]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.") return true end end local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(delete:getID() ~= -1) then if(getPlayerGUID(cid) == delete:getDataInt("player")) then db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") if(isItemStackable(delete:getDataString("item_id"))) then doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count")) else for i = 1, delete:getDataInt("count") do doPlayerAddItem(cid, delete:getDataString("item_id"), 1) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!") end delete:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "withdraw") then local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";") if(balance:getDataInt("auction_balance") < 1) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.") balance:free() return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!") doPlayerAddMoney(cid, balance:getDataInt("auction_balance")) db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";") balance:free() end return true end
-
Trocar +1,+2,+3 por nomes nesse script refin [10 reps]
White, depois de todo esse tempo testando o ot sozinho, ontem testando com uns amigos todo mundo refinando uma hora deu um erro e depois ninguem mais conseguiu refinar... Pelo que eu entendi o problema é no return "sucess", mas ta certinho não ta? Sabe me dizer o que pode ser? Error [23:57:13.709] [Error - Action Interface] [23:57:13.709] data/actions/scripts/upgrade.lua:onUse [23:57:13.709] Description: [23:57:13.709] data/lib/upgradesystem.lua:108: attempt to index a boolean value [23:57:13.709] stack traceback: [23:57:13.710] data/lib/upgradesystem.lua:108: in function 'refine' [23:57:13.710] data/actions/scripts/upgrade.lua:12: in function <data/actions/scripts/upgrade.lua:1> [23:57:19.666] [Error - Action Interface] [23:57:19.666] data/actions/scripts/upgrade.lua:onUse [23:57:19.666] Description: [23:57:19.667] data/lib/upgradesystem.lua:108: attempt to index a boolean value [23:57:19.667] stack traceback: [23:57:19.667] data/lib/upgradesystem.lua:108: in function 'refine' [23:57:19.667] data/actions/scripts/upgrade.lua:12: in function <data/actions/scripts/upgrade.lua:1> [23:57:28.575] [Error - Action Interface] [23:57:28.575] data/actions/scripts/upgrade.lua:onUse [23:57:28.575] Description: [23:57:28.575] data/lib/upgradesystem.lua:108: attempt to index a boolean value [23:57:28.575] stack traceback: [23:57:28.575] data/lib/upgradesystem.lua:108: in function 'refine' [23:57:28.575] data/actions/scripts/upgrade.lua:12: in function <data/actions/scripts/upgrade.lua:1> [23:57:43.396] [Error - Action Interface] [23:57:43.397] data/actions/scripts/upgrade.lua:onUse [23:57:43.397] Description: [23:57:43.397] data/lib/upgradesystem.lua:108: attempt to index a boolean value [23:57:43.397] stack traceback: [23:57:43.397] data/lib/upgradesystem.lua:108: in function 'refine' [23:57:43.397] data/actions/scripts/upgrade.lua:12: in function <data/actions/scripts/upgrade.lua:1> [23:57:45.493] [Error - Action Interface] [23:57:45.493] data/actions/scripts/upgrade.lua:onUse [23:57:45.493] Description: [23:57:45.493] data/lib/upgradesystem.lua:108: attempt to index a boolean value [23:57:45.493] stack traceback: [23:57:45.493] data/lib/upgradesystem.lua:108: in function 'refine' [23:57:45.493] data/actions/scripts/upgrade.lua:12: in function <data/actions/scripts/upgrade.lua:1> data/lib/upgradesystem.lua --PERFECT UPGRADE SYSTEM UpgradeHandler = { nameLv = { [1] = "UNIQ", [2] = "RARE", [3] = "EPIC" }, levels = { [1] = {50, false, false}, [2] = {30, false, false}, [3] = {15, true, true} }, broadcast = 4, -- não quero broad attributes = { ["attack"] = 3, ["defense"] = 2, ["armor"] = 1 }, message = { console = "Trying to refine %s to level +%s with %s%% success rate.", success = "You have upgraded %s to level +%s", fail = "You have failed in upgrade of %s to level +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "The targeted %s is already on max upgrade level.", notupgradeable = "This item is not upgradeable.", broadcast = "The player %s was successful in upgrading %s to level +%s.\nCongratulations!!", invalidtool = "This is not a valid upgrade tool.", toolrange = "This upgrade tool can only be used in items with level between +%s and +%s" }, tools = { [8306] = {range = {0, 10}, info = {chance = 1, removeable = true}}, [8300] = {range = {0, 10}, info = {chance = 2, removeable = true}} }, isEquipment = function(self) local weaponType = self:getItemWeaponType() return ((weaponType > 0 and weaponType < 8) or self.item.armor ~= 0) end, setItemName = function(self, name) return doItemSetAttribute(self.item.uid, "name", name) end, chance = function(self) local chances = {} chances.upgrade = (self.levels[self.item.level + 1][1] or 100) chances.downgrade = (self.item.level * 5) chances.erase = (self.item.level * 3) return chances end } function UpgradeHandler:new(item) local obj, ret = {} obj.item = {} obj.item.level = 0 obj.item.uid = item.uid for key, value in pairs(getItemInfo(item.itemid)) do obj.item[key] = value end ret = setmetatable(obj, { __index = function(self, index) if _G[index] then return (setmetatable({callback = _G[index]}, {__call = function(self, ...) return self.callback(item.uid, ...) end} )) else return UpgradeHandler[index] end end}) if ret:isEquipment() then ret:update() return ret end return false end function UpgradeHandler:update() -- this will return the level by the quality or 0 if it has no quality. self.item.level = 0 for r, v in ipairs(self.nameLv) do if self:getItemName():find(v) then self.item.level = r end end end function UpgradeHandler:refine(uid, item) if (self.item.level >= 3) then return true end if not self.item then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.notupgradeable) return "miss" end local tool = self.tools[item.itemid] if(tool == nil) then doPlayerSendTextMessage(uid, MESSAGE_EVENT_DEFAULT, self.message.invalidtool) return "miss" end if(self.item.level > #self.levels) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.maxlevel:format(self.item.name)) return "miss" end if(self.item.level < tool.range[1] or self.item.level >= tool.range[2]) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.toolrange:format(unpack(tool.range))) return "miss" end local chance = (self:chance().upgrade * tool.info.chance) doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.console:format(self.item.name, (self.item.level + 1), math.min(100, chance))) if(tool.info.removeable == true) then doRemoveItem(item.uid, 1) end if chance * 100 > math.random(1, 10000) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_ORANGE, self.message.success:format(self.item.name, (self.item.level + 1))) if (self.item.level + 1) >= self.broadcast then doBroadcastMessage(self.message.broadcast:format(getCreatureName(uid), self.item.name, (self.item.level + 1))) end -- it says if the item's level is greater then 0 (meaning is level equal to 1 or more) if it is add 1 more -- if the current level equals 0 add 1 to it self:setItemName(self.item.level > 0 and self.nameLv[self.item.level + 1].." "..(self:getItemName():gsub(self.nameLv[self.item.level].." ", "")) or self.nameLv[1].." "..self:getItemName()) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item.level > 0 and getItemAttribute(self.item.uid, key) or self.item[key]) + value) end end return "success" else if item.itemid == 8300 then if self.item.level > 0 then -- this will remove any number with a + sign in front of it from the string self:setItemName(self:getItemName():gsub((self.nameLv[self.item.level].." "), "")) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, getItemAttribute(self.item.uid, key) - self.item.level * value) end end end else doRemoveItem(self.item.uid, 1) end doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, item.itemid == 8300 and "Your item level has been reseted." or "You have broken your item while trying to upgrade it.") end end data/actions/scripts/upgrade.lua function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end local obj = UpgradeHandler:new(itemEx) if(obj == false) then return doPlayerSendCancel(cid, UpgradeHandler.message.notupgradeable) end local status = obj:refine(cid, item) if status == "success" then --doSendAnimatedText(toPosition, "Success!", COLOR_GREEN) doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) elseif status == "fail" then --doSendAnimatedText(toPosition, "Fail!", COLOR_RED) doSendMagicEffect(toPosition, CONST_ME_POFF) else doSendMagicEffect(toPosition, CONST_ME_POFF) end return true end
-
Problem Lubuntu + Elfbot - Shift+F12 [20 REPS]
ninguém sabe?
-
Problem Lubuntu + Elfbot - Shift+F12 [20 REPS]
Estou a testar o ElfBot e o LUbuntu, tudo funciona perfeitamente no wine+playonlinux o meu problema é na hora de esconder e mostrar o bot famoso fechar e apertar shift+f12 pra aparecer o bot de volta... Não sei nem o porque, mas o shift+f12 não funciona pra mostrar e esconder o elfbot e qnd eu escondo o elfbot não sei como mostra-lo de novo Alguém com conhecimento em ElfBot ou LUbuntu(ou qlqr linux desktop) poderia tentar me dar uma força Soluções q eu pensei: 1- Teria como arrumar isso pelo Lubunt,wine,playonlinux pra que funciona-se? 2- Teria como criar uma hotkey do elfbot pra mostrar e esconder o bot? 3- Teria como criar uma daquelas icones no client(nunca fiz isso) pra mostrar ou esconder o bot Não estou usando o fórum, mas faço questão se alguém me ajudar de entrar todos os dias até completar os 20 reps, pq isso tá me atrapalhando mt e não consigo achar solução
-
Por que entrou nesse if, comparação de skill
Tava tentando fazer um sistema que entregaria skill de acordo com o maior skill Ex: Se seu maior skill for o de sword, então você receberá skill de sword O trexo do código é esse: local axeskill = getPlayerSkillLevel(cid, SKILL_AXE) local swordskill = getPlayerSkillLevel(cid, SKILL_CLUB) local clubskill = getPlayerSkillLevel(cid, SKILL_SWORD) if (axeskill > swordskill and axeskill > clubskill) then doPlayerAddSkillTry(cid, SKILL_AXE, axeqnt * axestages) elseif (swordskill > axeskill and swordskill > clubskill) then doPlayerAddSkillTry(cid, SKILL_SWORD, swordqnt * swordstages) elseif (clubskill > axeskill and clubskill > swordskill) then doPlayerAddSkillTry(cid, SKILL_CLUB, clubqnt * clubstages) else -- negando tudo se bugar sei la doPlayerAddSkillTry(cid, SKILL_SWORD, swordqnt * swordstages) end
-
[8.60] The Forgotten Server 0.4 By Fir3Element (SQL and MYSQL)
Você consegueria fazer um desses itens ou esses itens pra ficar perfeito? 1- Proteção DDOS, tipo como no underwar, quando eles estão sobre ataque, se alguém morrer, não perde nada 2- Bônus exp party vocation, da nova atualização! Isso prende muito os players, seria muito da hora 3- Alguma forma de quando nukarem o ot ele salvar pra não ter clone