-
Notifications
You must be signed in to change notification settings - Fork 0
/
WetU_Hotkey.lua
244 lines (207 loc) · 11 KB
/
WetU_Hotkey.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
local Constants = _G.require("Constants.Constants");
local math_min = Constants.lua.math_min;
local sdk = Constants.sdk;
local type_definitions = Constants.type_definitions;
local TRUE_POINTER = Constants.TRUE_POINTER;
local checkKeyTrg = Constants.checkKeyTrg;
local getVillagePoint = Constants.getVillagePoint;
local subVillagePoint = Constants.subVillagePoint;
local create_managed_array = sdk.create_managed_array;
local find_type_definition = sdk.find_type_definition;
local hook = sdk.hook;
local hook_vtable = sdk.hook_vtable;
-- in Village hotkeys
local VillageAreaManager_type_def = type_definitions.VillageAreaManager_type_def;
local fastTravel_method = VillageAreaManager_type_def:get_method("fastTravel(snow.stage.StageDef.VillageFastTravelType)");
--
local get_MealFunc_method = type_definitions.KitchenFacility_type_def:get_method("get_MealFunc");
local MealFunc_type_def = get_MealFunc_method:get_return_type();
local setWaitTimer_method = MealFunc_type_def:get_method("setWaitTimer");
local checkAvailableMealSystem_method = MealFunc_type_def:get_method("checkAvailableMealSystem");
local checkHandMoney_method = MealFunc_type_def:get_method("checkHandMoney");
local checkVillagePoint_method = MealFunc_type_def:get_method("checkVillagePoint");
local setMealTicketFlag_method = MealFunc_type_def:get_method("setMealTicketFlag(System.Boolean)");
local getMealTicketNum_method = MealFunc_type_def:get_method("getMealTicketNum");
local get_FacilityLv_method = MealFunc_type_def:get_method("get_FacilityLv");
local getVitalBuff_method = MealFunc_type_def:get_method("getVitalBuff(System.UInt32)");
local getStaminaBuff_method = MealFunc_type_def:get_method("getStaminaBuff(System.UInt32)");
local addBuff_method = MealFunc_type_def:get_method("addBuff(System.UInt32)");
local order_method = MealFunc_type_def:get_method("order(snow.facility.MealOrderData, snow.facility.kitchen.MealFunc.PaymentTypes, System.UInt32)");
local get_MySetDataList_method = MealFunc_type_def:get_method("get_MySetDataList");
local get_DailyDango_method = MealFunc_type_def:get_method("get_DailyDango");
local resetDailyDango_method = MealFunc_type_def:get_method("resetDailyDango");
--
local BbqFunc_type_def = type_definitions.BbqFunc_type_def;
local get_CanUseFunc_method = BbqFunc_type_def:get_method("get_CanUseFunc");
local get_MealConvertDataList_method = BbqFunc_type_def:get_method("get_MealConvertDataList");
local orderBbq_method = BbqFunc_type_def:get_method("orderBbq(snow.facility.kitchen.BbqConvertData, System.UInt32)");
local isExistOutputTicket_method = BbqFunc_type_def:get_method("isExistOutputTicket");
local MealConvertDataList_mItems_field = get_MealConvertDataList_method:get_return_type():get_field("mItems");
local BbqConvertData_type_def = find_type_definition("snow.facility.kitchen.BbqConvertData");
local get_MoneyCost_method = BbqConvertData_type_def:get_method("get_MoneyCost");
local get_PointCost_method = BbqConvertData_type_def:get_method("get_PointCost");
--
local DataShortcut_type_def = type_definitions.DataShortcut_type_def;
local get_HandMoney_method = DataShortcut_type_def:get_method("get_HandMoney"); -- static
local getMoneyVal_method = DataShortcut_type_def:get_method("getMoneyVal"); -- static
local addItemToBox_method = DataShortcut_type_def:get_method("addItemToBox(snow.data.ContentsIdSystem.ItemId, System.UInt32)"); -- static
--
local reqDangoLogStart_method = type_definitions.GuiManager_type_def:get_method("reqDangoLogStart(snow.gui.GuiDangoLog.DangoLogParam, System.Single)");
--
local DangoLogParam_type_def = find_type_definition("snow.gui.GuiDangoLog.DangoLogParam");
local setStatusParam_method = DangoLogParam_type_def:get_method("setStatusParam(snow.gui.GuiDangoLog.DangoLogParam.DangoLogStatusItemType, System.UInt32)");
--
local Lobby_setKitchenData_method = type_definitions.PlayerLobbyBase_type_def:get_method("setKitchenData");
--
local getMasterPlayerQuestBase_method = type_definitions.EnemyUtility_type_def:get_method("getMasterPlayer"); -- static
local Quest_setKitchenData_method = type_definitions.PlayerQuestBase_type_def:get_method("setKitchenData");
--
local OtomoManager_type_def = find_type_definition("snow.otomo.OtomoManager");
local getMasterFirstOtomo_method = OtomoManager_type_def:get_method("getMasterFirstOtomo");
local getMasterSecondOtomo_method = OtomoManager_type_def:get_method("getMasterSecondOtomo");
local Otomo_setKitchenData_method = getMasterFirstOtomo_method:get_return_type():get_method("setKitchenData");
--
local get_AcitvePlKitchenSkillList_method = find_type_definition("snow.data.SkillDataManager"):get_method("get_AcitvePlKitchenSkillList");
local ActivePlKitchenSkillList_type_def = get_AcitvePlKitchenSkillList_method:get_return_type();
local AcitvePlKitchenSkillList_mItems_field = ActivePlKitchenSkillList_type_def:get_field("mItems");
local AcitvePlKitchenSkillList_mSize_field = ActivePlKitchenSkillList_type_def:get_field("mSize");
local PlayerKitchenSkillData_type_def = find_type_definition("snow.player.PlayerKitchenSkillData");
--
local DailyDango = {
[35] = true, -- 보수금 보험
[41] = true, -- 환산술
[42] = true, -- 금전운
[43] = true, -- 해체술[소]
[44] = true, -- 해체술[대]
[45] = true, -- 행운술
[46] = true -- 격운술
};
--
local function orderBbq()
local meatCount = Constants:getCountOfAll(68157562);
if meatCount == nil or meatCount <= 0 then
Constants:SendMessage("요리: 날고기가 없습니다!");
return;
end
local BbqFunc = Constants:get_BbqFunc();
if get_CanUseFunc_method:call(BbqFunc) == true then
local orderCount = math_min(meatCount, 99);
local BbqConvertData = MealConvertDataList_mItems_field:get_data(get_MealConvertDataList_method:call(BbqFunc)):get_element(0);
local PointCost = get_PointCost_method:call(BbqConvertData) * orderCount;
local MoneyCost = get_MoneyCost_method:call(BbqConvertData) * orderCount;
local MoneyVal = getMoneyVal_method:call(nil);
local paymentType = nil;
if getVillagePoint() >= PointCost then
paymentType = 1;
subVillagePoint(PointCost);
elseif MoneyVal >= MoneyCost then
paymentType = 2;
get_HandMoney_method:call(nil):set_field("_Value", MoneyVal - MoneyCost);
Constants:SendMessage("요리: 포인트가 부족합니다!\n소지금을 사용합니다");
else
Constants:SendMessage("요리: 소지금과 포인트가 부족합니다!");
return;
end
orderBbq_method:call(BbqFunc, BbqConvertData, orderCount);
addItemToBox_method:call(nil, 68157448, orderCount);
if isExistOutputTicket_method:call(BbqFunc) == true then
Constants:outputMealTicket();
end
end
end
--
local function applyKitchenBuff(kitchenType)
if kitchenType == 1 then
local MasterPlayerLobbyBase = Constants:get_MasterPlayerLobbyBase();
if MasterPlayerLobbyBase ~= nil then
Lobby_setKitchenData_method:call(MasterPlayerLobbyBase);
end
else
local MasterPlayerQuestBase = getMasterPlayerQuestBase_method:call(nil);
if MasterPlayerQuestBase ~= nil then
Quest_setKitchenData_method:call(MasterPlayerQuestBase);
end
end
local OtomoManager = Constants:get_OtomoManager();
local MasterFirstOtomo = getMasterFirstOtomo_method:call(OtomoManager);
if MasterFirstOtomo ~= nil then
Otomo_setKitchenData_method:call(MasterFirstOtomo);
end
local MasterSecondOtomo = getMasterSecondOtomo_method:call(OtomoManager);
if MasterSecondOtomo ~= nil then
Otomo_setKitchenData_method:call(MasterSecondOtomo);
end
end
local function makeDangoLogParam(vitalBuff, staminaBuff)
local DangoLogParam = DangoLogParam_type_def:create_instance();
local AcitvePlKitchenSkillList = get_AcitvePlKitchenSkillList_method:call(Constants:get_SkillDataManager());
local ActivePlKitchenSkillList_Array = AcitvePlKitchenSkillList_mItems_field:get_data(AcitvePlKitchenSkillList);
local AcitvePlKitchenSkill_Array_size = AcitvePlKitchenSkillList_mSize_field:get_data(AcitvePlKitchenSkillList);
local AcitvePlKitchenSkillArray = create_managed_array(PlayerKitchenSkillData_type_def, AcitvePlKitchenSkill_Array_size);
setStatusParam_method:call(DangoLogParam, 0, vitalBuff);
setStatusParam_method:call(DangoLogParam, 1, staminaBuff);
for i = 0, AcitvePlKitchenSkill_Array_size - 1, 1 do
AcitvePlKitchenSkillArray[i] = ActivePlKitchenSkillList_Array:get_element(i);
end
DangoLogParam:set_field("_SkillDataList", AcitvePlKitchenSkillArray);
return DangoLogParam;
end
local isOrdering = false;
local function orderDango(kitchenType)
local MealFunc = get_MealFunc_method:call(Constants:get_KitchenFacility());
if checkAvailableMealSystem_method:call(MealFunc) == true then
local MealTicketNum = getMealTicketNum_method:call(MealFunc);
if MealTicketNum == nil or MealTicketNum <= 0 then
Constants:SendMessage("식사: 식사권이 없습니다!");
return;
end
local paymentType = nil;
if checkHandMoney_method:call(MealFunc) == true then
paymentType = 0;
elseif checkVillagePoint_method:call(MealFunc) == true then
paymentType = 1;
Constants:SendMessage("식사: 소지금이 부족합니다!\n포인트를 사용합니다");
else
Constants:SendMessage("식사: 소지금과 포인트가 부족합니다!");
return;
end
local FacilityLv = get_FacilityLv_method:call(MealFunc);
isOrdering = true;
resetDailyDango_method:call(MealFunc);
setMealTicketFlag_method:call(MealFunc, true);
order_method:call(MealFunc, get_MySetDataList_method:call(MealFunc):get_element((kitchenType == 1 and DailyDango[get_DailyDango_method:call(MealFunc)] == true) and 0 or 1), paymentType, FacilityLv);
isOrdering = false;
addBuff_method:call(MealFunc, FacilityLv);
applyKitchenBuff(kitchenType);
setWaitTimer_method:call(MealFunc);
reqDangoLogStart_method:call(Constants:get_GuiManager(), makeDangoLogParam(getVitalBuff_method:call(MealFunc, FacilityLv), getStaminaBuff_method:call(MealFunc, FacilityLv)), 5.0);
end
end
--
local function PostHook_villageUpdate()
if checkKeyTrg(116) == true then
fastTravel_method:call(Constants:get_VillageAreaManager(), 8);
elseif checkKeyTrg(117) == true then
fastTravel_method:call(Constants:get_VillageAreaManager(), 9);
elseif checkKeyTrg(118) == true then
orderBbq();
elseif checkKeyTrg(119) == true then
orderDango(1);
end
end
hook(VillageAreaManager_type_def:get_method("update"), nil, PostHook_villageUpdate);
local function PostHook_canOrder(retval)
return isOrdering == true and TRUE_POINTER or retval;
end
hook(find_type_definition("snow.facility.MealOrderData"):get_method("canOrder"), nil, PostHook_canOrder);
-- Reset Quest hotkey
local QuestManager_type_def = type_definitions.QuestManager_type_def;
local notifyReset_method = QuestManager_type_def:get_method("notifyReset");
local function PostHook_updateNormalQuest()
if checkKeyTrg(116) == true then
notifyReset_method:call(Constants:get_QuestManager());
elseif checkKeyTrg(119) == true then
orderDango(2);
end
end
hook(QuestManager_type_def:get_method("updateNormalQuest"), nil, PostHook_updateNormalQuest);