我正在练习针对ipad的游戏王国时代(v2.0)的移动设备。
我只是想赚大钱,但我无处可去。播放器在类CCP中定义,有时也会检查服务器。
所以我试图在CCGameInformation类中找到数据的核心。函数 - (id)activePlayer很多是callet(比如每秒30次)所以我认为这是一个不错的起点。
CCPlayer(在包含文件中)被定义为
@interface CCPlayer : FZPlayer <NSCoding>
{
NSString *townName;
NSString *rawLastUpdateEnergyTime;
NSString *rawLastUpdateStaminaTime;
NSString *rawExpansionTimeStarted;
NSString *rawBankUpgradeTimeStarted;
...
int gold;
int level;
int attack;
...
@end
我在Tweaks.xm中将其声明为:
@interface CCPlayer:NSObject
{
NSString *townName;
NSString *rawLastUpdateEnergyTime;
NSString *rawLastUpdateStaminaTime;
NSString *rawExpansionTimeStarted;
NSString *rawBankUpgradeTimeStarted;
...
int gold;
int level;
int attack;
...
@end
我实际上包含了整个事情,只更改了基类。
CCGameInformation定义为:
@interface CCGameInformation : _ACFacebookAppIdKey
{
CCPlayer *user_;
CCLevel *userLevel_;
....
}
我在Tweaks.xm中将其定义为
@interface CCGameInformation : NSObject
{
CCPlayer *user_;
}
@end
我的钩子看起来像:
%hook CCGameInformation
- (id)activePlayer
{
CCPlayer* player = (CCPlayer*)%orig;
MSHookIvar<int>(player, "energy") = 10;
NSLog(@"Energy:%d\n",MSHookIvar<int>(player, "energy"));
return player;
}
但它根本不起作用。它按照预期打印出“能量:10”,但游戏中的能量不会改变。
我是否正确使用了挂钩过程和减速,或者游戏是否比我预期的更受保护?
感谢。
答案 0 :(得分:0)
游戏实际上可以将所有用户数据存储在服务器上。这在以应用内购买为特色的游戏中更为突出。不幸的是,在这种情况下几乎无法做到。如果您想测试它,请进一步考虑此方法,例如:
%hook CCPlayer
-(int)gold
{
return 1000; //amount of gold.
}
%end