منظمة قانون التطور - Evolution Law Organization
موضوع بعنوان :[حل] ثغرة الوون -> يانغ بأسهل طريقة
الكاتب :[Pro]Lord


السلام عليكم ورحمة الله وبركاته
أُقدم لكم اليوم موضوع بسيط عن حل ثغرة تحويل الوون الى يانغ بأسهل طريقة
شرح الثغرة: عند كتابتك رقم وون به فاصلة (مثل 1.9) ستحصل على 190,000,000 وسيأخذ منك 1 وون فقط، 900 مليون هدية.
سبق وأن قام الأخ Quest بنشر الحل ولكنه بدائي وتكويده سئ (مع كامل احترامي له)
هذا الحل سيعتمد وببساطة على دالة math.ceil
math.ceil هي دالة تقوم بتقريب اي رقم به فاصلة للرقم بعده
مثلا ان كتبت 1.9 سيتم احتسابها 2، واذا كتبت 2.4 سيتم احتسابها 3.
p_1650m0clc1
p_1650rblxp1

حل الثغرة تقوم باضافة هذا الكود للكويست:
                local won = tonumber(input())
                wonnew = math.ceil(won)

ثم تبديل won بwonnew في دالات التبديل وغيرها،
وهذا هو الكويست مضاف اليه الدالة:
quest cheque_trade begin
    state start begin
        when warehouse_keeper.chat." تبديل الوون " begin
            local wonToYang = 100000000 -- 100kk
            local s = select(" وون الي يانغ ", " يانغ الي وون ", " الغاء ")
            if s == 1 then
                say(" وون الي يانغ ")
                say(" كم الكميه التي ترغب في استبدالها ؟ ")
                say(" 1 وون = 100.000.000 يانغ ")
                say(" اقل عدد 1 واعلي عدد 99 ")
                local won = tonumber(input())
                wonnew = math.ceil(won)
                if wonnew < 1 or wonnew > 19 then
                    say(" تحقق من المعلومات ")
                    say(" اعلي قيمه للون : 99 ")
                    say(" اعلي قيمة لليانغ : 2.000.000.000 ")
                    return
                end
                local newMoney = wonToYang * wonnew
                say(" وون الي يانغ ")
                say(" هل ترغب بالفعل في تحويل  "..wonnew.." وون الي "..newMoney)
                local s2 = select(" تحويل "," الغاء ")
                if s2 == 2 then return end
                if pc.get_cheque() < wonnew then
                    say(" لا تملك ما يكفي من الوون ")
                    return 
                end
                if pc.get_gold() + newMoney > 2000000000 then --2kkk
                    say(" لديك الكثير من اليانغ . لا يمكن اتمام العمليه ")
                    return
                end
                 if wonnew > 1 or wonnew < 19 then
                    pc.change_cheque(-wonnew)
                    pc.change_gold(newMoney)
                else
                    say(" الرقم المدخل غير صحيح ! ")
                end

            elseif s == 2 then
                say(" يانغ الي وون ")
                say(" كم الكميه التي ترغب في استبدالها ؟ ")
                say(" 1 وون = 100.000.000 يانغ ")
                say(" اقل عدد 1 واعلي عدد 99 ")
                local won = tonumber(input())
                if won < 1 or won > 19 then
                    say(" تحقق من المعلومات ")
                    say(" اعلي قيمه للون : 99 ")
                    say(" اعلي قيمة لليانغ : 2.000.000.000 ")
                    return
                end
                local newMoney = (wonToYang * won) + wonToYang * won * 3 / 100
                say(" 3% ضريبه ")
                say(" يانغ الي وون ")
                say(" هل ترغب بالفعل في تحويل "..newMoney.." يانغ الي "..won.." وون ")
                local s2 = select(" تحويل "," الغاء ")
                if s2 == 2 then return end
                if pc.get_gold() < newMoney then
                    say(" لا تملك ما يكفي من اليانغ ")
                    return 
                end
                if pc.get_cheque() + won > 99 then --99 max won
                    say(" لديك الكثير من الوون . لا يمكن اتمام العمليه ")
                    return
                end
                if won > 1 or won < 19 then
                    pc.change_cheque(won)
                    pc.change_gold(-newMoney)
                else
                    say(" الرقم المدخل غير صحيح ! ")
                end
            else return end
        end
    end
end

(أنا اخذت كويست المنشور من قبل الأخ Quest واضافة الدالة له واغلاق الثغرة ولا أعلم ان كان الكويست الاصلي يحتوي على مشاكل أم لا)
تحياتي، والسلام خير الختام.