游戏辅助程序

· · 个人记录

game_ex.cpp

#include<bits/stdc++.h>
#define LL long long
using namespace std;

int code_search(string s);
void init();
void setnum(string s,int number);

map<string,int>code_data;
vector<int>code_pos;
vector<int>data_base;
int code_size;

struct single_plus{
    string pos;
    int plus;
    single_plus(string pos,int plus){
        this->pos=pos;
        this->plus=plus;
    }
};
struct object{
    string name;
    int code;
    vector<single_plus>effect;

    bool operator <(const object b)const{
        return code<b.code;
    }
    void regist(string _name){
        name=_name;
        code=code_search(_name);
    }
    void add_effect(string s,int p){
        single_plus ps(s,p);
        effect.push_back(ps);
    }
    bool use(int times){
        if(data_base[code]-times<0)return 0;
        for(int i=0;i<effect.size();i++)
            data_base[code_search(effect[i].pos)]+=effect[i].plus*times;
        data_base[code]-=times;
        return 1;
    }
};
struct quality{
    string name;
    int code;
    void regist(string _name,int prenum){
        name=_name;
        code=code_search(_name);
        setnum(_name,prenum);
    }
};
vector<object>ob_base;
vector<quality>ql_base;

int code_search(string s){
    if(code_data[s]==0){
        code_size++;
        code_data[s]=code_size;
        data_base.push_back(0);
    }
    return code_data[s];
}
void init(){
    code_size=-1;
    object ober;
    ober.regist("empty_object");
    ob_base.push_back(ober);
    code_pos.push_back(0);
}
void setnum(string s,int number){
    data_base[code_search(s)]=number;
}
void plusnum(string s,int number){
    data_base[code_search(s)]+=number;
}
int getnum(string s){
    return data_base[code_search(s)];
}
bool useob(string s,int _times){
    return ob_base[code_pos[code_search(s)]].use(_times);
}
void ql_register(string s,int x){
    quality ql;
    ql.regist(s,x);
    ql_base.push_back(ql);
    code_pos.push_back(ql_base.size()-1);
}
void ob_register(string s){
    object ober;
    ober.regist(s);
    ob_base.push_back(ober);
    code_pos.push_back(ob_base.size()-1);
}
void add_effect(string ms,string s,int p){
    ob_base[code_pos[code_search(ms)]].add_effect(s,p);
}
int main(){
    //test lines
    init();
    int n;
    cin>>n;
    while(1){
        switch(n){
            case 1:{
                for(int i=0;i<data_base.size();i++)
                    cout<<i<<' '<<data_base[i]<<endl;
                break;
            }
            case 2:{
                map<string,int>::iterator it;
                for(it=code_data.begin();it!=code_data.end();it++)
                    cout<<it->first<<' '<<it->second<<endl;
                break;
            }
            case 3:{
                for(int i=0;i<ql_base.size();i++){
                    cout<<ql_base[i].name<<' '<<ql_base[i].code<<endl;
                }
                break;
            }
            case 4:{
                for(int i=0;i<ob_base.size();i++){
                    cout<<ob_base[i].name<<' '<<ob_base[i].code<<endl;
                    for(int j=0;j<ob_base[i].effect.size();j++){
                        cout<<"   ";
                        cout<<ob_base[i].effect[j].pos<<' ';
                        cout<<ob_base[i].effect[j].plus<<endl;
                    }
                }
                break;
            }
            case 5:{
                int x,y;
                string s,ms;
                cin>>ms;
                ob_register(ms);
                cin>>s>>x;
                while(s!="none"){
                    add_effect(ms,s,x);
                    cin>>s>>x;
                }
                break;
            }
            case 6:{
                int x,y;
                string s;
                cin>>s>>x;
                ql_register(s,x);
                break;
            }
            case 7:{
                string s;
                int x;
                cin>>s>>x;
                setnum(s,x);
                break;
            }
            case 8:{
                string s;
                int x;
                cin>>s>>x;
                plusnum(s,x);
                break;
            }
            case 9:{
                string s;
                int x;
                cin>>s>>x;
                if(!useob(s,x))puts("failed!");
                break;
            }
        }
        cin>>n;
    }
    return 0;
}

background_runner.cpp

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;

int key_click[300],key_down[300];
bool CapsLocken;
HWND hWnd;
POINT ps,lps;

void bakcground_runner();
bool click(int key);

inline bool click(int key){
    bool f=key_click[key];
    key_click[key]=0;
    return f;
}
inline void background_runner(){

    lps=ps;
    RECT B_wd;
    POINT B_ps;
    GetCursorPos(&B_ps);
    B_ps.x-=B_wd.top+8;
    B_ps.y-=B_wd.left+32;
    ps.x=B_ps.x/16;
    ps.y=B_ps.y/16;
//  if(ps.x<0||ps.x>=50||ps.y<0||ps.y>=30)ps.x=-1,ps.y=-1;

    for(int i=0;i<=255;i++){
        if(GetAsyncKeyState(i)){
            if(!key_down[i])key_click[i]=1;
            key_down[i]=1;
        }
        else key_down[i]=0;
    }
    if(click(20))CapsLocken=!CapsLocken;

//  while(B_wd.right-B_wd.left!=820||B_wd.bottom-B_wd.top!=522)
        GetWindowRect(hWnd,&B_wd);
}

openfile.cpp

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;

void FileRead(FILE *fname);

inline void open(string _fname,string s){
    FILE *wt=fopen("path","w");
    fclose(wt);
    system("cd>path");
    FILE *pth=fopen("path","r");
    char c[205];
    fscanf(pth,"%s\n",c);
    fclose(pth);
    system("del path");
    FILE *fb=fopen("run.bat","w");
    s=s+".data";
    fprintf(fb,"@[echo](/user/15285) off\ncd %s\ncopy %s %s >nul",_fname.c_str(),s.c_str(),c);
    fclose(fb);
    system("run.bat");
    system("del run.bat");
    FILE *fl=fopen(s.c_str(),"r");
    FileRead(fl);
    fclose(fl);
    system(("del "+s).c_str());
}

basis.cpp

#define LL long long

#include "background_runner.cpp"
#include "openfile.cpp"
#include "screen_putter.cpp"