Hallo liebe Com wie der Titel schon sagt möchte ich euch mein selbst erstelltest und ausgedachtes Erfahrungslager mit euch teilen ich hab das auch noch nie irgendwo vorher gesehen.
Das Lager ist schon etwas älter und war nur eine Übung für mich um besser zu werden Der Code sieht demensprechend aus.....
aber es funktioniert und das ist wohl das wichtigste :-)
die Restlichen Dateien sind im Anhang explager nach uiscript uiexplager nach root und die quest halt
Screen:
viel Spaß damit ich hoffe es gefällt euch wenn nicht verwendet es nicht und jammert nicht rum...
eine verbesserte Version der quest thanks to Sensi :-) :
Quote:
Originally Posted by Seחsi
Captain here,
das explager läuft über den kompletten acc, man kann aber auch an andere spieler exp verkaufen (1 exp = 1 yang). Der andere spieler muss dem tausch zustimmen und darf maximal 10 einheiten vom gebenden spieler entfernt sein
*rides away on his dieded horse*
@topic
das ganze sollte so zwar funktionieren, schön geschrieben ist aber was anderes. ausserdem solltest du bei manchen sachen zur sicherheit noch prüfen, ob überhaupt etwas zurückgegeben wurde (bei querys sollte man sowas immer prüfen).
die variablennamen sind nicht immer wirklich eindeutig und auch würde ich dir empfehlen beim programmieren generell englische variablennamen zu nutzen.
im ganzen ist es aber ein nützliches release, gerade für die, die es eben nicht selbst schreiben können, weil das ganze einfach macht es machen soll und das ohne irgendwelche sicherheitslücken.
keep it up!
edit:
habe die quest mal reworked, untested
Code:
quest explager begin
state start begin
when login begin
explager.qcc_SendQID()
explager.qcc_SendExpInStock()
end
when 11000.chat."Erfahrungslager" begin
explager.qcc_OpenWindow()
setskin(NOWINDOW)
end
when button or info begin
local receiveFunctions = explager.getSettings().QCC.FUNCTIONS.RECEIVE
local receivedData = explager.qcc_ReceiveData()
if not receivedData.FUNCTION or not receivedData.VALUE then
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_1")
return
end
local method = ({
[receiveFunctions.GIVE] = explager.giveExpMenu,
[receiveFunctions.TAKE] = explager.takeExpMenu,
[receiveFunctions.EXCHANGE] = explager.exchangeExpMenu,
})[receivedData.FUNCTION]
if not method then
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_2")
return
end
method(receivedData.VALUE)
end
function giveExpMenu(amount)
if amount < 1 then
syschat("Explager: Zum Abheben bitte die dafür vorgesehen Funktion nutzen.")
return
elseif amount > pc.get_exp() then
syschat("Explager: Du hast nicht genug Exp zum einlagern.")
return
end
pc.give_exp2(-amount)
explager.addExpInStock(amount)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Du hast %d Erfahrung eingezahlt.", amount))
end
function takeExpMenu(amount)
local expInStock = explager.getExpInStock() or 0
if amount < 1 then
syschat("Explager: Zum Einzahlen bitte die dafür vorgesehen Funktion nutzen.")
return
elseif amount > expInStock then
syschat("Explager: Du hast nicht genug Exp zum einlagern.")
return
end
pc.give_exp2(amount)
explager.removeExpInStock(amount)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Du hast %d Erfahrung abgehoben.", amount))
end
function exchangeExpMenu(amount)
local expInStock = explager.getExpInStock() or 0
if amount < 1 then
syschat("Explager: Du kannst einem fremden Spieler keine Erfahrung abziehen.")
return
elseif amount > expInStock then
syschat("Explager: Du hast nicht genug Exp zum tauschen.")
return
end
local exchange_settings = explager.getSettings().EXCHANGE
local tradeGoldCost = amount * exchange_settings.RATE
say(string.format("Aktuelle Exp im Lager: %d", expInStock))
say(string.format("Zu handelnde Exp: %d", amount))
say(string.format("Neuer Kontostand: %d", expInStock - amount))
say(string.format("Yang erhalt: %d", tradeGoldCost))
say("")
say("Gib den Namen des Spielers ein, mit dem du Handeln möchtest")
local traderName = input()
local traderVID = find_pc_by_name(traderName)
local myName = pc.get_name()
local myVID = pc.get_vid()
if traderVID == 0 then
say(string.format("Der Spieler '%s' wurde nicht gefunden.", traderName))
if select("Neue Eingabe", "Abbrechen") == 2 then return end
explager.exchangeExpMenu(amount)
return
elseif not pc.is_near_vid(traderVID, exchange_settings.MAXRANGE)
say(string.format("Der Spieler '%s' muss in deiner Nähe sein.", traderName))
return
elseif traderName == myName then
say("Du kannst nicht mit dir selbst handeln.")
if select("Neue Eingabe", "Abbrechen") == 2 then return end
explager.exchangeExpMenu(amount)
return
end
if confirm(traderVID, string.format("Möchtest du %d Exp von %s für %d Yang kaufen?", amount, myName, tradeGoldCost), exchange_settings.TRADE_ACCEPT_TIME) ~= CONFIRM_OK then
syschat(string.format("Explager: %s hat den Handel abgelehnt.", traderName)
return
end
if pc.select(traderVID) ~= myVID then--pc.select returns the old player vid if executed correctly
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_3")
return
end
--trading partner
if tradeGoldCost > pc.get_gold() then
syschat("Explager: Du hast nicht genug Yang für den Handel.")
pc.select(myVID)
syschat(string.format("Explager: %s hat nicht genug Yangg für den Handel.", traderName))
return
end
pc.change_money(-tradeGoldCost)
pc.give_exp2(amount)
--executing player
pc.select(myVID)
explager.removeExpInStock(amount)
pc.change_money(tradeGoldCost)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Der Handel mit %s war erfolgreich.", traderName))
end
function getSettings()
return {
DB = {
FULL_TABLENAME = "account.account",
EXP_STOCK_COLUMN = "explager",
ID_COLUMN = "id",
ID_GETTER = function() return pc.get_account_id() end,
},
EXCHANGE = {
MAXRANGE = 10,
TRADE_ACCEPT_TIME = 30,
RATE = 1.0,--exp * rate = gold
},
QCC = {
MAIN_PARAM = "EXPSTORAGE",
SPLITCHAR = "/",
FUNCTIONS = {
RECEIVE = {
MAIN_PARAM = "QUESTCMD",
GIVE = "GIVE_EXP",
TAKE = "TAKE_EXP",
EXCHANGE = "SCHENK_EXP",
},
SEND = {
QID = "QID",
EXP_IN_STOCK = "EXPLAGER",
OPEN_GUI = "OPEN",
},
}
}
}
end
function qcc_SendQID()
local qcc_settings = explager.getSettings().QCC
cmdchat(string.format("%s %s%s%d", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.QID, qcc_settings.SPLITCHAR, q.getcurrentquestindex()))
end
function qcc_SendExpInStock()
local qcc_settings = explager.getSettings().QCC
local expInStock = explager.getExpInStock() or 0
cmdchat(string.format("%s %s%s%d", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.EXP_IN_STOCK, qcc_settings.SPLITCHAR, expInStock))
end
function qcc_OpenWindow()
local qcc_settings = explager.getSettings().QCC
cmdchat(string.format("%s %s", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.OPEN_GUI))
end
function qcc_ReceiveData()
local qcc_settings = explager.getSettings().QCC
cmdchat("getinputbegin")
cmdchat(string.format("%s %s%s", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.RECEIVE.MAIN_PARAM, qcc_settings.SPLITCHAR))
local cmd = split(input(), qcc_settings.SPLITCHAR)
cmdchat("getinputend")
return {FUNCTION = cmd[1], VALUE = tonumber(cmd[2])}
end
function getExpInStock()
local db_settings = explager.getSettings().DB
local expInStock = mysql_query(string.format("SELECT %s FROM %s WHERE %s = '%s';", db_settings.EXP_STOCK_COLUMN, db_settings.FULL_TABLENAME, db_settings.ID_COLUMN, tostring(db_settings.ID_GETTER())))
if not expInStock or table.getn(expInStock) < 1 then
return nil
end
return tonumber(expInStock[1][1])
end
function addExpInStock(amount)
local db_settings = explager.getSettings().DB
mysql_query(string.format("UPDATE %s SET %s = %s + %d WHERE %s = '%s';", db_settings.FULL_TABLENAME, db_settings.EXP_STOCK_COLUMN, db_settings.EXP_STOCK_COLUMN, amount, db_settings.ID_COLUMN, tostring(db_settings.ID_GETTER())))
end
function removeExpInStock(amount)
explager.addExpInStock(-amount)
end
end
end
Edit2:
Mir ist doch noch ein exploit aufgefallen. Es wird nicht geprüft, ob der Handelspartner die benötigte anzahl an Yang hat.
Bei meiner Version ist die Abfrage nun drin.
Und außerdem hat er es glaube ich so eingebaut dass derjenige der was bekommt bestätigen muss !
Nein in dem Lager kannst du EXP für deinen gesammten Account speichern und wenn du z.B ein neuen Char erstellst und die EXP von der Bank nimmst, kannst du dein Char so leveln. Im Prinzip ist das genau das Selbe wie ein normales Item Lager nur das man dort EXP speichern kann und alle Chars aus dem Account EXP abheben können.
Nein in dem Lager kannst du EXP für deinen gesammten Account speichern und wenn du z.B ein neuen Char erstellst und die EXP von der Bank nimmst, kannst du dein Char so leveln. Im Prinzip ist das genau das Selbe wie ein normales Item Lager nur das man dort EXP speichern kann und alle Chars aus dem Account EXP abheben können.
Captain here,
das explager läuft über den kompletten acc, man kann aber auch an andere spieler exp verkaufen (1 exp = 1 yang). Der andere spieler muss dem tausch zustimmen und darf maximal 10 einheiten vom gebenden spieler entfernt sein
*rides away on his dieded horse*
@topic
das ganze sollte so zwar funktionieren, schön geschrieben ist aber was anderes. ausserdem solltest du bei manchen sachen zur sicherheit noch prüfen, ob überhaupt etwas zurückgegeben wurde (bei querys sollte man sowas immer prüfen).
die variablennamen sind nicht immer wirklich eindeutig und auch würde ich dir empfehlen beim programmieren generell englische variablennamen zu nutzen.
im ganzen ist es aber ein nützliches release, gerade für die, die es eben nicht selbst schreiben können, weil das ganze einfach macht es machen soll und das ohne irgendwelche sicherheitslücken.
keep it up!
edit:
habe die quest mal reworked, untested
Code:
quest explager begin
state start begin
when login begin
explager.qcc_SendQID()
explager.qcc_SendExpInStock()
end
when 11000.chat."Erfahrungslager" begin
explager.qcc_OpenWindow()
setskin(NOWINDOW)
end
when button or info begin
local receiveFunctions = explager.getSettings().QCC.FUNCTIONS.RECEIVE
local receivedData = explager.qcc_ReceiveData()
if not receivedData.FUNCTION or not receivedData.VALUE then
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_1")
return
end
local method = ({
[receiveFunctions.GIVE] = explager.giveExpMenu,
[receiveFunctions.TAKE] = explager.takeExpMenu,
[receiveFunctions.EXCHANGE] = explager.exchangeExpMenu,
})[receivedData.FUNCTION]
if not method then
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_2")
return
end
method(receivedData.VALUE)
end
function giveExpMenu(amount)
if amount < 1 then
syschat("Explager: Zum Abheben bitte die dafür vorgesehen Funktion nutzen.")
return
elseif amount > pc.get_exp() then
syschat("Explager: Du hast nicht genug Exp zum einlagern.")
return
end
pc.give_exp2(-amount)
explager.addExpInStock(amount)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Du hast %d Erfahrung eingezahlt.", amount))
end
function takeExpMenu(amount)
local expInStock = explager.getExpInStock() or 0
if amount < 1 then
syschat("Explager: Zum Einzahlen bitte die dafür vorgesehen Funktion nutzen.")
return
elseif amount > expInStock then
syschat("Explager: Du hast nicht genug Exp zum einlagern.")
return
end
pc.give_exp2(amount)
explager.removeExpInStock(amount)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Du hast %d Erfahrung abgehoben.", amount))
end
function exchangeExpMenu(amount)
local expInStock = explager.getExpInStock() or 0
if amount < 1 then
syschat("Explager: Du kannst einem fremden Spieler keine Erfahrung abziehen.")
return
elseif amount > expInStock then
syschat("Explager: Du hast nicht genug Exp zum tauschen.")
return
end
local exchange_settings = explager.getSettings().EXCHANGE
local tradeGoldCost = amount * exchange_settings.RATE
say(string.format("Aktuelle Exp im Lager: %d", expInStock))
say(string.format("Zu handelnde Exp: %d", amount))
say(string.format("Neuer Kontostand: %d", expInStock - amount))
say(string.format("Yang erhalt: %d", tradeGoldCost))
say("")
say("Gib den Namen des Spielers ein, mit dem du Handeln möchtest")
local traderName = input()
local traderVID = find_pc_by_name(traderName)
local myName = pc.get_name()
local myVID = pc.get_vid()
if traderVID == 0 then
say(string.format("Der Spieler '%s' wurde nicht gefunden.", traderName))
if select("Neue Eingabe", "Abbrechen") == 2 then return end
explager.exchangeExpMenu(amount)
return
elseif not pc.is_near_vid(traderVID, exchange_settings.MAXRANGE)
say(string.format("Der Spieler '%s' muss in deiner Nähe sein.", traderName))
return
elseif traderName == myName then
say("Du kannst nicht mit dir selbst handeln.")
if select("Neue Eingabe", "Abbrechen") == 2 then return end
explager.exchangeExpMenu(amount)
return
end
if confirm(traderVID, string.format("Möchtest du %d Exp von %s für %d Yang kaufen?", amount, myName, tradeGoldCost), exchange_settings.TRADE_ACCEPT_TIME) ~= CONFIRM_OK then
syschat(string.format("Explager: %s hat den Handel abgelehnt.", traderName)
return
end
if pc.select(traderVID) ~= myVID then--pc.select returns the old player vid if executed correctly
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_3")
return
end
--trading partner
if tradeGoldCost > pc.get_gold() then
syschat("Explager: Du hast nicht genug Yang für den Handel.")
pc.select(myVID)
syschat(string.format("Explager: %s hat nicht genug Yangg für den Handel.", traderName))
return
end
pc.change_money(-tradeGoldCost)
pc.give_exp2(amount)
--executing player
pc.select(myVID)
explager.removeExpInStock(amount)
pc.change_money(tradeGoldCost)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Der Handel mit %s war erfolgreich.", traderName))
end
function getSettings()
return {
DB = {
FULL_TABLENAME = "account.account",
EXP_STOCK_COLUMN = "explager",
ID_COLUMN = "id",
ID_GETTER = function() return pc.get_account_id() end,
},
EXCHANGE = {
MAXRANGE = 10,
TRADE_ACCEPT_TIME = 30,
RATE = 1.0,--exp * rate = gold
},
QCC = {
MAIN_PARAM = "EXPSTORAGE",
SPLITCHAR = "/",
FUNCTIONS = {
RECEIVE = {
MAIN_PARAM = "QUESTCMD",
GIVE = "GIVE_EXP",
TAKE = "TAKE_EXP",
EXCHANGE = "SCHENK_EXP",
},
SEND = {
QID = "QID",
EXP_IN_STOCK = "EXPLAGER",
OPEN_GUI = "OPEN",
},
}
}
}
end
function qcc_SendQID()
local qcc_settings = explager.getSettings().QCC
cmdchat(string.format("%s %s%s%d", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.QID, qcc_settings.SPLITCHAR, q.getcurrentquestindex()))
end
function qcc_SendExpInStock()
local qcc_settings = explager.getSettings().QCC
local expInStock = explager.getExpInStock() or 0
cmdchat(string.format("%s %s%s%d", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.EXP_IN_STOCK, qcc_settings.SPLITCHAR, expInStock))
end
function qcc_OpenWindow()
local qcc_settings = explager.getSettings().QCC
cmdchat(string.format("%s %s", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.OPEN_GUI))
end
function qcc_ReceiveData()
local qcc_settings = explager.getSettings().QCC
cmdchat("getinputbegin")
cmdchat(string.format("%s %s%s", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.RECEIVE.MAIN_PARAM, qcc_settings.SPLITCHAR))
local cmd = split(input(), qcc_settings.SPLITCHAR)
cmdchat("getinputend")
return {FUNCTION = cmd[1], VALUE = tonumber(cmd[2])}
end
function getExpInStock()
local db_settings = explager.getSettings().DB
local expInStock = mysql_query(string.format("SELECT %s FROM %s WHERE %s = '%s';", db_settings.EXP_STOCK_COLUMN, db_settings.FULL_TABLENAME, db_settings.ID_COLUMN, tostring(db_settings.ID_GETTER())))
if not expInStock or table.getn(expInStock) < 1 then
return nil
end
return tonumber(expInStock[1][1])
end
function addExpInStock(amount)
local db_settings = explager.getSettings().DB
mysql_query(string.format("UPDATE %s SET %s = %s + %d WHERE %s = '%s';", db_settings.FULL_TABLENAME, db_settings.EXP_STOCK_COLUMN, db_settings.EXP_STOCK_COLUMN, amount, db_settings.ID_COLUMN, tostring(db_settings.ID_GETTER())))
end
function removeExpInStock(amount)
explager.addExpInStock(-amount)
end
end
end
Edit2:
Mir ist doch noch ein exploit aufgefallen. Es wird nicht geprüft, ob der Handelspartner die benötigte anzahl an Yang hat.
Bei meiner Version ist die Abfrage nun drin.
Captain here,
das explager läuft über den kompletten acc, man kann aber auch an andere spieler exp verkaufen (1 exp = 1 yang). Der andere spieler muss dem tausch zustimmen und darf maximal 10 einheiten vom gebenden spieler entfernt sein
*rides away on his dieded horse*
@topic
das ganze sollte so zwar funktionieren, schön geschrieben ist aber was anderes. ausserdem solltest du bei manchen sachen zur sicherheit noch prüfen, ob überhaupt etwas zurückgegeben wurde (bei querys sollte man sowas immer prüfen).
die variablennamen sind nicht immer wirklich eindeutig und auch würde ich dir empfehlen beim programmieren generell englische variablennamen zu nutzen.
im ganzen ist es aber ein nützliches release, gerade für die, die es eben nicht selbst schreiben können, weil das ganze einfach macht es machen soll und das ohne irgendwelche sicherheitslücken.
keep it up!
edit:
habe die quest mal reworked, untested
Code:
quest explager begin
state start begin
when login begin
explager.qcc_SendQID()
explager.qcc_SendExpInStock()
end
when 11000.chat."Erfahrungslager" begin
explager.qcc_OpenWindow()
setskin(NOWINDOW)
end
when button or info begin
local receiveFunctions = explager.getSettings().QCC.FUNCTIONS.RECEIVE
local receivedData = explager.qcc_ReceiveData()
if not receivedData.FUNCTION or not receivedData.VALUE then
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_1")
return
end
local method = ({
[receiveFunctions.GIVE] = explager.giveExpMenu,
[receiveFunctions.TAKE] = explager.takeExpMenu,
[receiveFunctions.EXCHANGE] = explager.exchangeExpMenu,
})[receivedData.FUNCTION]
if not method then
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_2")
return
end
method(receivedData.VALUE)
end
function giveExpMenu(amount)
if amount < 1 then
syschat("Explager: Zum Abheben bitte die dafür vorgesehen Funktion nutzen.")
return
elseif amount > pc.get_exp() then
syschat("Explager: Du hast nicht genug Exp zum einlagern.")
return
end
pc.give_exp2(-amount)
explager.addExpInStock(amount)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Du hast %d Erfahrung eingezahlt.", amount))
end
function takeExpMenu(amount)
local expInStock = explager.getExpInStock() or 0
if amount < 1 then
syschat("Explager: Zum Einzahlen bitte die dafür vorgesehen Funktion nutzen.")
return
elseif amount > expInStock then
syschat("Explager: Du hast nicht genug Exp zum einlagern.")
return
end
pc.give_exp2(amount)
explager.removeExpInStock(amount)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Du hast %d Erfahrung abgehoben.", amount))
end
function exchangeExpMenu(amount)
local expInStock = explager.getExpInStock() or 0
if amount < 1 then
syschat("Explager: Du kannst einem fremden Spieler keine Erfahrung abziehen.")
return
elseif amount > expInStock then
syschat("Explager: Du hast nicht genug Exp zum tauschen.")
return
end
local exchange_settings = explager.getSettings().EXCHANGE
local tradeGoldCost = amount * exchange_settings.RATE
say(string.format("Aktuelle Exp im Lager: %d", expInStock))
say(string.format("Zu handelnde Exp: %d", amount))
say(string.format("Neuer Kontostand: %d", expInStock - amount))
say(string.format("Yang erhalt: %d", tradeGoldCost))
say("")
say("Gib den Namen des Spielers ein, mit dem du Handeln möchtest")
local traderName = input()
local traderVID = find_pc_by_name(traderName)
local myName = pc.get_name()
local myVID = pc.get_vid()
if traderVID == 0 then
say(string.format("Der Spieler '%s' wurde nicht gefunden.", traderName))
if select("Neue Eingabe", "Abbrechen") == 2 then return end
explager.exchangeExpMenu(amount)
return
elseif not pc.is_near_vid(traderVID, exchange_settings.MAXRANGE)
say(string.format("Der Spieler '%s' muss in deiner Nähe sein.", traderName))
return
elseif traderName == myName then
say("Du kannst nicht mit dir selbst handeln.")
if select("Neue Eingabe", "Abbrechen") == 2 then return end
explager.exchangeExpMenu(amount)
return
end
if confirm(traderVID, string.format("Möchtest du %d Exp von %s für %d Yang kaufen?", amount, myName, tradeGoldCost), exchange_settings.TRADE_ACCEPT_TIME) ~= CONFIRM_OK then
syschat(string.format("Explager: %s hat den Handel abgelehnt.", traderName)
return
end
if pc.select(traderVID) ~= myVID then--pc.select returns the old player vid if executed correctly
syschat("Explager: Etwas ist schiefgelaufen. Bitte einem Teamler melden: Fehlercode: EXPLAGER_3")
return
end
--trading partner
if tradeGoldCost > pc.get_gold() then
syschat("Explager: Du hast nicht genug Yang für den Handel.")
pc.select(myVID)
syschat(string.format("Explager: %s hat nicht genug Yangg für den Handel.", traderName))
return
end
pc.change_money(-tradeGoldCost)
pc.give_exp2(amount)
--executing player
pc.select(myVID)
explager.removeExpInStock(amount)
pc.change_money(tradeGoldCost)
explager.qcc_SendExpInStock()
syschat(string.format("Explager: Der Handel mit %s war erfolgreich.", traderName))
end
function getSettings()
return {
DB = {
FULL_TABLENAME = "account.account",
EXP_STOCK_COLUMN = "explager",
ID_COLUMN = "id",
ID_GETTER = function() return pc.get_account_id() end,
},
EXCHANGE = {
MAXRANGE = 10,
TRADE_ACCEPT_TIME = 30,
RATE = 1.0,--exp * rate = gold
},
QCC = {
MAIN_PARAM = "EXPSTORAGE",
SPLITCHAR = "/",
FUNCTIONS = {
RECEIVE = {
MAIN_PARAM = "QUESTCMD",
GIVE = "GIVE_EXP",
TAKE = "TAKE_EXP",
EXCHANGE = "SCHENK_EXP",
},
SEND = {
QID = "QID",
EXP_IN_STOCK = "EXPLAGER",
OPEN_GUI = "OPEN",
},
}
}
}
end
function qcc_SendQID()
local qcc_settings = explager.getSettings().QCC
cmdchat(string.format("%s %s%s%d", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.QID, qcc_settings.SPLITCHAR, q.getcurrentquestindex()))
end
function qcc_SendExpInStock()
local qcc_settings = explager.getSettings().QCC
local expInStock = explager.getExpInStock() or 0
cmdchat(string.format("%s %s%s%d", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.EXP_IN_STOCK, qcc_settings.SPLITCHAR, expInStock))
end
function qcc_OpenWindow()
local qcc_settings = explager.getSettings().QCC
cmdchat(string.format("%s %s", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.SEND.OPEN_GUI))
end
function qcc_ReceiveData()
local qcc_settings = explager.getSettings().QCC
cmdchat("getinputbegin")
cmdchat(string.format("%s %s%s", qcc_settings.MAIN_PARAM, qcc_settings.FUNCTIONS.RECEIVE.MAIN_PARAM, qcc_settings.SPLITCHAR))
local cmd = split(input(), qcc_settings.SPLITCHAR)
cmdchat("getinputend")
return {FUNCTION = cmd[1], VALUE = tonumber(cmd[2])}
end
function getExpInStock()
local db_settings = explager.getSettings().DB
local expInStock = mysql_query(string.format("SELECT %s FROM %s WHERE %s = '%s';", db_settings.EXP_STOCK_COLUMN, db_settings.FULL_TABLENAME, db_settings.ID_COLUMN, tostring(db_settings.ID_GETTER())))
if not expInStock or table.getn(expInStock) < 1 then
return nil
end
return tonumber(expInStock[1][1])
end
function addExpInStock(amount)
local db_settings = explager.getSettings().DB
mysql_query(string.format("UPDATE %s SET %s = %s + %d WHERE %s = '%s';", db_settings.FULL_TABLENAME, db_settings.EXP_STOCK_COLUMN, db_settings.EXP_STOCK_COLUMN, amount, db_settings.ID_COLUMN, tostring(db_settings.ID_GETTER())))
end
function removeExpInStock(amount)
explager.addExpInStock(-amount)
end
end
end
Edit2:
Mir ist doch noch ein exploit aufgefallen. Es wird nicht geprüft, ob der Handelspartner die benötigte anzahl an Yang hat.
Bei meiner Version ist die Abfrage nun drin.
joa danke wie gesagt es ist schon älter und ich habs auch garnicht großartig geprüft auf lücken sondern nur auf die funktion^^
Ich editier deine quest mal rein
allerdings ist die jetzt nicht mehr so lua noob freundlich wie meine
Edit:Achja ganz vergessen ihr müsst in account.account eine Spalte ExpLager erstellen und dieser int oder am besten bigint geben
[Python]Release ? Frage 04/22/2015 - Metin2 Private Server - 4 Replies Hey Com,
ich suche sowas fürn Inventar wo man auf den Pfeil klickt und dann fährt sich ein Fenster raus, wo Buttons drin sind für Anti-expring & Warpring usw. "Wie Gürtels system Fenster" bloß mit Buttons ? Wurde so eins schon mal Releast ? Weil ich habe dazu nichts gefunden. Falls es jemand hat kann er mir des bitte geben ? Wäre sehr nett.
Habe es auch schon paar mal selber versucht zu coden, aber ohne Erfolg. Ich benutze ein 2089 Client.
MFG
[RELEASE] BeltSystem Python GUI 12/26/2013 - Metin2 PServer Guides & Strategies - 26 Replies Hello elitepvpers,
Today I want to share the clientside parts of the original belt system.
This is the original version so it contains new built-in variables and functions about the belt system.
Those built-ins available in metin2clien_r4xxxx.exe (41200).
Ehm yeah the bin_r41200 already containing the new rings method too.
I collected every touched files by belt.
################################################# #################
[HOT-RELEASE] Python GUI Beta 11/25/2012 - Metin2 Hacks, Bots, Cheats, Exploits & Macros - 13 Replies Mediafire: PGC.rar file
PASS: epvp
With this applcation you can create windows interface more easy for your server, hack, ....
This beta version is for free but in the future .... i have many ideas :D
Take it as a gift for Christmas :P
Only in ENGLISH
S: python release 08/19/2012 - Metin2 Private Server - 0 Replies suche eine release wo rechts im inventar die bonis angezeigt wird finde die nicht mehr
[Python-Release]All Pm log 04/23/2012 - Metin2 PServer Guides & Strategies - 6 Replies This is a very simple thing, maybe to be used in combination with another.I want them in a folder called "log" are written all pm that i receive.
That said, it acts in a simple, well follow the steps:
1) Create a folder "log" in the directory of the client.
2) Search: def OnRecvWhisper
3)Replace this : def OnRecvWhisper(self, mode, name, line):
if mode == chat.WHISPER_TYPE_GM:
self.interface.RegisterGameMasterName(name)
chat.AppendWhisper(mode, name,...