|
楼主 |
发表于 2013-3-16 02:30
|
显示全部楼层
本帖最后由 btxdex 于 2013-3-16 02:32 编辑
继续,写了全新的结构和setting.ini之后发现在lua里面还要写很麻烦,修改也麻烦,于是就自己用C++(控制台水平)写了一个读取r数据修改器设置转换lua代码。然后还是有一些东西需要自己处理:1.有无符
2.CC.MyThingNum,CC.MyTeamNum,这种其他部分需要的常量
3.原版ini里面的5个“出招动画帧数”都叫一个名字。任何相同名字的数据,lua无法区别。
然后还有自己代码的缺陷,读取多个数组成员时中间不能有空行。
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <vector>
- #include <cctype>
- #include <sstream>
- using namespace std;
- #define printSize 1
- ifstream fin("setting.txt");
- ofstream fout("lua.txt");
- struct line{
- int a,b,c,d,e,f;
- string g;
- };
- int getInt(const string &a,int &idx){ //returns the first int after idx (idx,len-1]
- int n=0;
- int sign=1;
- int firstDig=0;
- for (int i=idx+1;i<a.size();i++){
- idx=i;
- if (!n&&a[i]=='-'){
- sign=-1;
- continue;
- }
- if (isdigit(a[i])){
- n=n*10+(a[i]-'0');
- firstDig=1;
- }
- else
- if (firstDig)
- break;
- }
- return n*sign;
- }
- string getString(const string &a,int &idx){
- int strSize=0;
- for (int i=idx+1;i<a.size();i++){
- if (a[i]==' ')
- break;
- strSize++;
- }
- return a.substr(idx+1,strSize);
- }
- void readArgs(line &l,const string &tmp,int idx){
- l.a=getInt(tmp,idx);
- l.b=getInt(tmp,idx);l.c=getInt(tmp,idx);l.d=getInt(tmp,idx);
- l.e=getInt(tmp,idx);l.f=getInt(tmp,idx);l.g=getString(tmp,idx);
- }
- int isData(string a){
- stringstream ss;
- ss<<a;
- string f;
- ss>>f;
- string ts=f.substr(0,4);
- if (ts!="data"&&ts!="Data")
- return 0;
- return 1;
- }
- int main(){
- string tmp;
- int typeNumber=-1;
- while(getline(fin,tmp)){
- if (tmp[0]==';')
- continue;
- if (typeNumber==-1&&tmp.find("TypeNumber")!=string::npos){
- int idx = tmp.find('=');
- typeNumber=getInt(tmp,idx);
- //cout<<typeNumber;
- }
- else
- continue;
-
- for (int i=0;i<typeNumber;i++){
- string varName;
- int getVarName=0;
- int curIdx=0;
- int curByte=0;
- int dataItem=-1;
- while(getline(fin,tmp)&&(dataItem==-1||curIdx<dataItem)){
- if (tmp.size()==0)
- continue;
- if (!getVarName&&tmp.find("TypeName")!=string::npos){
- int idx = tmp.find('=');
- cout<<"请输入 "<<tmp.substr(idx+1)<<" 的变量名"<<endl;
- cin>>varName;
- varName+="_S";
- getVarName=1;
- fout<<varName<<"={};"<<endl;
- continue;
- }
- if (dataItem==-1&&(tmp.find("TypeDataItem")!=string::npos||tmp.find("TypedataItem")!=string::npos)){
- int idx = tmp.find('=');
- dataItem=getInt(tmp,idx);
- //cout<<"dataItem "<<dataItem<<endl;
- continue;
- }
- if (!isData(tmp))
- continue;
- curIdx++;
- int idx = tmp.find('=');
- /*
- int arrayLen,memberNum,byteSize,isString;
- int tmpInt1,tmpInt2;
- string para;
- */
- vector<line> vl;
- line l;
- readArgs(l,tmp,idx);
- if (l.a>1){ //假设数组个数为1的数据都没有成员
- vl.push_back(l);
- int sumOfByte=l.c;
- for (int j=1;j<l.b;j++){ //读取成员数据
- //假设之间没有空行等
- getline(fin,tmp);
- line ll;
- int idx = tmp.find('=');
- readArgs(ll,tmp,idx);
- vl.push_back(ll);
- sumOfByte+=ll.c;
- curIdx++;
- }
- /*
- for i=1,CC.MyThingNum do
- CC.Base_S["物品" .. i]={36+4*(i-1),0,2};
- CC.Base_S["物品数量" .. i]={36+4*(i-1)+2,0,2};
- end
- */
- fout<<"for i=1,"<<l.a<<" do"<<endl;
- int cbyte=0;
- for (int j=0;j<vl.size();j++){
- if (vl[j].d)
- vl[j].d=2;
- fout<<'\t'<<varName<<"[""<<vl[j].g<<"" .. i]={"<<curByte<<'+'<<sumOfByte<<"*(i-1)+"
- <<cbyte<<','<<vl[j].d<<','<<vl[j].c<<"};"<<endl;
- cbyte+=vl[j].c;
- }
- fout<<"end"<<endl;
- curByte+=sumOfByte*l.a;
- }
- else{
复制代码
|
|