- Katılım
- 29 Ağu 2022
- Mesajlar
- 302
- Tepkime puanı
- 3,498
- Puanları
- 93
ninjanetwork
Merhabalar,
Uzun süredir sürüncemeye bıraktığım bir konu vardı. Bu konuyla ilgili internette çeşitli araştırmalar yaptıktan sonra sonunda bir sonuca ulaştım.
Bildiğiniz üzere, CTF ödüllerini değiştirmek için genellikle oyuncunun yaptığı kill veya takımın galibiyetine bağlı olarak verilen ödüller üzerinde düzenlemeler yapılıyor.
Mevcut sistemi genel olarak beğenmeme rağmen, sistem tarafından verilen itemleri doğrudan değiştirmenin bir yolunu bulamadım. Bu nedenle farklı bir çözüm arayışına girdim.
Öncelikle yapacağımız işlemlerden bahsedeyim.
Orijinal Capture the Flag Trophy bozdurma scriptini iptal edeceğiz.
Ekli dosyayı görüntüle 52015
Bunu yapmak için gameserver müdahelesi şart..
Kendinize ait bir gameserver dllniz var ise yapmanız gereken çok basit kodu direkt veriyorum.
Kod:
if (1 == 1)
{
BYTE value = 0xF9;
MEMUTIL_WRITE_VALUE(BYTE, 0x0087693F + 6, value);
printf("Event So-ok Ice Trophy Section Disabled.\n");
}
eğer kendinize ait bir guardınız yok ise yani Kguard Maxiguard gibi bir guard kullanıyorsanız guard sahiplerinden rica edip bu özelliği ekletebilirsiniz yada ollydbg ile gerekli işlemi yapabilirsiniz, detaylı bir şekilde anlatmasam da kısaca ondanda bahsedeyim.
- OllyDbg programı ile SR_GameServer dosyasını açın.
- Klavyeden CTRL + G tuşlarına basın.
- Açılan pencereye aşağıdaki adresi yazın:
- Bu adrese gittikten sonra aşağıdaki komutu bulun:
- Komuttaki 0xB048F8 değerini 0xB048F9 olarak değiştirin.
mov dword ptr ds:[esi+0x1F4], 0xB048F9
- Son olarak yaptığınız değişikliği kaydedin.
Bu işlemi tamamladıktan sonra, Event So-Ok NPC’sinde bulunan Ice Trophy kırdırma seçeneği devre dışı kalacaktır. Yöntem biraz dolaylı ve “kirli” bir çözüm olarak değerlendirilebilir; ancak sistemin genel işleyişine herhangi bir zararı bulunmamaktadır.
Bu aşamadan sonra geriye yalnızca kendi scriptimizi oluşturarak istediğimiz ödülleri tanımlamak kalıyor.
Aşağıda kullanabileceğiniz örnek LUA dosyasını paylaşıyorum:
Kod:
function QEV_CH_EVENT_KISAENG_080205()
EventID = 10184
SetEventOne(EventID, "SN_QEV_CH_EVENT_CLOWN_080723", 1, 1, 1)
SetEventTwo(2, "SN_TALK_QEV_CH_EVENT_CLOWN_080723_B", "SN_TALK_COMMON_EXIT")
NPC_COUNT = 1
LuaInsertNpc(NPC_COUNT, "NPC_CH_EVENT_KISAENG1")
InsertPayItemCodeName(20, "ITEM_ETC_E051111_WHITECHOCO_PEPERO", "ITEM_ETC_E051111_ALMOND_PEPERO", "ITEM_ETC_ALL_SPOTION_01", "ITEM_ETC_E080723_SKILL_EXP_10", "ITEM_MALL_GACHA_CARD", "ITEM_ETC_ARCHEMY_REINFORCE_RECIPE_WEAPON_B", "ITEM_ETC_ARCHEMY_MAGICSTONE_LUCK_08", "ITEM_ETC_ARCHEMY_MAGICSTONE_ASTRAL_08", "ITEM_ETC_ARCHEMY_MAGICSTONE_LUCK_08", "ITEM_ETC_ARCHEMY_MAGICSTONE_LUCK_08", "ITEM_ETC_ARCHEMY_MAGICSTONE_ASTRAL_08", "ITEM_ETC_ARCHEMY_MAGICSTONE_ATHANASIA_08", "ITEM_MALL_HP_INC_800_POTION", "ITEM_MALL_MP_INC_800_POTION", "ITEM_MALL_BALLOON_B_EDENP_INT", "ITEM_MALL_BALLOON_B_EDENP_STR", "ITEM_ETC_E080723_SKILL_EXP_15", "ITEM_ETC_E080723_SKILL_EXP_10", "ITEM_ETC_E080723_SKILL_EXP_5", "ITEM_MALL_BALLOON_A_EDENP_DMG_UP")
InsertPayItemRatio(20, 10, 10, 15, 7, 5, 15, 15, 7, 3, 2, 1, 14, 13, 0.8, 0.9, 13, 10, 6, 4, 2)
LuaInsertDropItem(1, "ITEM_ETC_E050618_TREASUREBOX", 0)
InsertMenuStringList("NPC_CH_EVENT_KISAENG1", 5, "EVENT_MENUSTRING_GREETING", "SN_NPC_CH_EVENT_KISAENG1_QS", "EVENT_MENUSTRING_REQUEST_ACCEPT_QUEST", "SN_TALK_QEV_CH_EVENT_CLOWN_080723_A", "EVENT_MENUSTRING_NOT_ACHIEVED", "SN_TALK_QEV_CH_EVENT_CLOWN_080723_E", "EVENT_MENUSTRING_INVENTORY_FULL", "SN_TALK_QEV_CH_EVENT_CLOWN_080723_D", "EVENT_MENUSTRING_ACHIEVED", "SN_TALK_QEV_CH_EVENT_CLOWN_080723_C")
CONVERSATION_SINGLE = 0
LuaInsertFunctionStringList(1, "CONVERSATION_SINGLE", "KISAENG_080205_Conversation")
end
function ItemCheckSo_ok()
if 9 < LuaEventInQuireSameItem(0, "ITEM_ETC_E080723_ICETROPHYY", INQUIRE_SAMEITEM_OP_COUNT_FIRST_ITEM, -1) then
return 0
else
return 1
end
end
function ItemDelSo_ok()
if 0 < LuaEventInQuireSameItem(0, "ITEM_ETC_E080723_ICETROPHYY", INQUIRE_SAMEITEM_OP_COUNT_ALL_SAMEITEM, 0) then
slot = LuaEventInQuireSameItem(0, "ITEM_ETC_E080723_ICETROPHYY", INQUIRE_SAMEITEM_OP_FIND_FIRST_SLOT, 0)
LuaDelItem_EXT(0, slot, 10, SYSOP_REASON_Event, 0)
end
end
function GiveEventRewardItemSo_ok()
bGiveItemNum = 0
btErrorCode = 0
SYSOP_REASON_Event = 0
EventID = 10184
RewardItemMax = 20
RewardItemCount = {1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
RewardItemRatio = {0 , 1000, 2000, 3470, 4170 , 4670 , 6140 , 7610, 8310, 8610, 8810, 8910, 8970, 9020, 9200, 9300, 9400, 9500, 9600 , 9700, 10000}
if 1 > LuaGetCountEmptyInventory(0, -1) then
return
else
nGive = LuaRanged_rand_f(1, 10000)
for i = 1, RewardItemMax do
if nGive > RewardItemRatio[i] and nGive <= RewardItemRatio[i + 1] then
LuaAddItem_EXT(EventID, 0, RewardItemCount[i], SYSOP_REASON_Event, FALSE, FALSE, i)
ItemDelSo_ok()
break
end
end
end
end
function KISAENG_080205_Conversation(EventID_Sub, CharName)
CONVERSATION_START = 0
CONVERSATION_RESPONSE = 2
EventID = 10184
EventID_Message = EventID_Sub
NpcHandlerNum = LuaNpcHandlerNum()
if CONVERSATION_START == EventID_Sub and CharName == "NPC_CH_EVENT_KISAENG1" then
CurPage = 5
SelectionList_CommonIndex = 0
Button = 2
LuaShowMenu(CurPage, EventID, SelectionList_CommonIndex, Button, NpcHandlerNum)
end
if CONVERSATION_RESPONSE == EventID_Sub then
if CurPage <= 3 and CurPage >= 1 then
LuaTerminateMenu()
return
end
MenuOffset = LuaGetEventMenuResponse()
MenuOffset = MenuOffset - TALK_RESPONSE_LIST_BASE
if MenuOffset == 0 then
if ItemCheckSo_ok() == 0 then
if 0 < LuaGetCountEmptyInventory(0, -1) then
CurPage = 3
SelectionList_CommonIndex = 1
Button = 1
LuaSetCurPage(CurPage)
LuaShowMenu(CurPage, EventID, SelectionList_CommonIndex, Button, NpcHandlerNum)
GiveEventRewardItemSo_ok()
return
else
CurPage = 2
SelectionList_CommonIndex = 1
Button = 1
LuaSetCurPage(CurPage)
LuaShowMenu(CurPage, EventID, SelectionList_CommonIndex, Button, NpcHandlerNum)
return
end
else
CurPage = 1
SelectionList_CommonIndex = 1
Button = 1
LuaSetCurPage(CurPage)
LuaShowMenu(CurPage, EventID, SelectionList_CommonIndex, Button, NpcHandlerNum)
return
end
end
if MenuOffset == 1 then
LuaTerminateMenu()
end
elseif CONVERSATION_RESPONSE == EventID_Sub and LuaGetCurPage() == 1 then
LuaTerminateMenu()
end
end
Bu dosya için @Crusade teşekkürler.
Son olarak, LUA dosyasında da görebileceğiniz üzere ben mevcut Ice Trophy eşyasını kopyaladım ve yeni oluşturduğum eşyanın kod adının sonuna bir adet “Y” harfi ekledim:
ITEM_ETC_E080723_ICETROPHYY<br>
Siz de orijinal Ice Trophy eşyasını doğrudan kullanmak yerine, bu eşyanın bir kopyasını oluşturarak farklı bir kod adı tanımlamalısınız.
Tüm bu işlemleri tamamladıktan sonra, kullandığınız guard sistemlerinde bulunan CTF ödül düzenleme bölümüne yeni oluşturduğunuz Ice Trophy eşyasını eklemeyi unutmayın.
Anlatım çok detaylı olmasa da, edit hakkında az çok bilgi sahibi olan kişiler için faydalı olacağını düşünüyorum.
Saygılarımla,
GM Purple




