- struct CSkills {
- UINT id;
find:
Add after:
- UINT skillid;
File: startup.cpp
Find:
- newskill->id=i;
Add after:
- newskill->skillid = STB_SKILL.rows[i][1]; // Skills id
File: playerdata.cpp
find and replace similar function with these:
- //LMA: Find a skill offset for cskills...
- int CPlayer::FindSkillOffset(int family)
- {
- if (family>4)
- {
- Log(MSG_WARNING,"Bad family in FindSkillOffset (%i)",family);
- return -1;
- }
- int begin[5];
- int end[5];
- begin[0]=0;
- begin[1]=168;
- begin[2]=504;
- begin[3]=252;
- begin[4]=420;
- end[0]=168;
- end[1]=252;
- end[2]=546;
- end[3]=420;
- end[4]=504;
- int res=cur_max_skills[family];
- if (res<end[family])
- {
- cur_max_skills[family]++;
- return res;
- }
- return -1;
- }
- //LMA: Find a skill in cskills...
- bool CPlayer::FindSkill(int family,UINT skill)
- {
- if (family>4)
- {
- Log(MSG_WARNING,"Bad family in FindSkill (%i) for skill %i",family, skill);
- return true;
- }
- int begin[5];
- int end[5];
- begin[0]=0;
- begin[1]=168;
- begin[2]=504;
- begin[3]=252;
- begin[4]=420;
- end[0]=168;
- end[1]=252;
- end[2]=546;
- end[3]=420;
- end[4]=504;
- for (int k=begin[family];k<end[family];k++)
- {
- if (cskills[k].thisskill==NULL)
- {
- continue;
- }
- if(cskills[k].id==skill)
- {
- return true;
- }
- }
- return false;
- }
- //LMA: reset skill offsets.
- void CPlayer::ResetSkillOffset()
- {
- int begin[5];
- begin[0]=0;
- begin[1]=168;
- begin[2]=504;
- begin[3]=252;
- begin[4]=420;
- for (int k=0;k<4;k++)
- {
- //We don't reset the basic skills.
- if(k==2)
- continue;
- cur_max_skills[k]=begin[k];
- }
- return;
- }
File: gmcmds.cpp
find & replace this function:
- /GM: All Skills {By CrAshInSiDe} - Skills and levels updated by rl2171 & Devilking
- //LMA: Mysql now.
- //PY: Rewritten to use SkillList so we don't need the SQL table. UNTESTED
- bool CWorldServer::pakGMAllSkill(CPlayer* thisclient, char* name)
- {
- bool is_ok=false;
- int nb_skills=0;
- CPlayer* otherclient = GetClientByCharName( name );
- if(otherclient==NULL)
- return true;
- int classid = otherclient->CharInfo->Job;
- //PY Let's do it from the existing SkillList that we already loaded from STB
- //Borrowed some of this code from lmame. see original code.
- for (int k = 0;k < MAX_ALL_SKILL;k++)
- {
- //if(otherclient->GoodSkill(otherclient->cskills[k].id)==2) continue;
- otherclient->cskills[k].id = 0;
- otherclient->cskills[k].level = 0;
- otherclient->cskills[k].thisskill=NULL;
- }
- int cur_cskills[5];
- int end[5];
- cur_cskills[0]=0;
- cur_cskills[1]=168;
- cur_cskills[2]=504;
- cur_cskills[3]=252;
- cur_cskills[4]=420;
- end[0]=168;
- end[1]=252;
- end[2]=546;
- end[3]=420;
- end[4]=504;
- for (int i=0;i<5;i++)
- {
- //if(i==2) continue;
- otherclient->cur_max_skills[i]=cur_cskills[i];
- }
- int jobid;
- bool skill_ok;
- UINT oldSkill=0;
- int oldOffset=-1;
- for(int i = 0;i < SkillList.size();i++)
- {
- if(SkillList.at(i)->skillid==0) continue;
- if (oldSkill==SkillList.at(i)->skillid){
- otherclient->cskills[oldOffset].level = SkillList.at(i)->level;
- skill_ok = false;
- }else{
- jobid = SkillList.at(i)->c_class[0];
- skill_ok = false; //start out false as default
- if (jobid == 0) {skill_ok = true;} //always true if no job is specified
- else
- {
- if (jobid == 41 && (classid == 111 || classid == 121 || classid == 122)) skill_ok = true;
- if (classid == 121 && jobid == 61) skill_ok = true;
- if (classid == 122 && jobid == 62) skill_ok = true;
- if (jobid == 42 && (classid == 211 || classid == 221 || classid == 222)) skill_ok = true;
- if (classid == 221 && jobid == 63) skill_ok = true;
- if (classid == 222 && jobid == 64) skill_ok = true;
- if (jobid = 43 && (classid == 311 || classid == 321 || classid == 322)) skill_ok = true;
- if (classid == 321 && jobid == 65) skill_ok = true;
- if (classid == 322 && jobid == 66) skill_ok = true;
- if (jobid = 44 && (classid == 411 || classid == 421 || classid == 422)) skill_ok = true;
- if (classid == 421 && jobid == 67) skill_ok = true;
- if (classid == 422 && jobid == 68) skill_ok = true;
- }
- }
- if (skill_ok == false) continue; //don't give them the skill
- int family=otherclient->GoodSkill(SkillList.at(i)->skillid);
- if (family == -1) continue;
- int offset = otherclient->FindSkillOffset(family);
- if (offset == -1) continue;
- if (otherclient->FindSkill(family,SkillList.at(i)->skillid)==true) continue;
- otherclient->cskills[offset].id = SkillList.at(i)->skillid;
- otherclient->cskills[offset].level = SkillList.at(i)->level;
- oldSkill=SkillList.at(i)->skillid;
- oldOffset=offset;
- nb_skills++;
- if(nb_skills>=MAX_ALL_SKILL)
- {
- Log(MSG_WARNING,"Too many skills, aborting Row: %i SkillID: %i", SkillList.at(i)->id, SkillList.at(i)->skillid);
- SendPM(thisclient,"Too many skills, aborting");
- break;
- }
- }
- // PY End
- SendPM (otherclient, "Relogin to get all skills");
- otherclient->AttrAllSkills();
- otherclient->saveskills();
- otherclient->ResetSkillOffset();
- return true;
- }