From: Andrew C. <ac...@us...> - 2004-09-10 22:22:13
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19559/src/server Modified Files: cachemanager.cpp combatmanager.cpp command.cpp events.cpp events.h progressionmanager.cpp psserverchar.cpp spellmanager.cpp workmanager.cpp Log Message: Skill Progression system in place Index: cachemanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/cachemanager.cpp,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** cachemanager.cpp 10 Sep 2004 20:44:37 -0000 1.61 --- cachemanager.cpp 10 Sep 2004 22:21:13 -0000 1.62 *************** *** 140,144 **** newskill->practice_factor = result[currentrow].GetInt("practice_factor"); newskill->price = psMoney(result[currentrow].GetInt("price")); ! skillinfolist.Push(newskill); } --- 140,144 ---- newskill->practice_factor = result[currentrow].GetInt("practice_factor"); newskill->price = psMoney(result[currentrow].GetInt("price")); ! newskill->baseCost = result[currentrow].GetInt("base_rank_cost"); skillinfolist.Push(newskill); } Index: combatmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/combatmanager.cpp,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** combatmanager.cpp 26 Aug 2004 10:43:29 -0000 1.59 --- combatmanager.cpp 10 Sep 2004 22:21:13 -0000 1.60 *************** *** 503,506 **** --- 503,507 ---- // Successful attack, train skill. + CPrintf(CON_DEBUG, "Training Weapon Skills On Attack\n"); event->attacker->GetCharacterData()->PracticeWeaponSkills(weapon,1); } *************** *** 520,523 **** --- 521,525 ---- // Successful dodged by target, train skill. + CPrintf(CON_DEBUG, "Training Armour Skills On Dodge\n"); event->target->GetCharacterData()->PracticeArmorSkills(1); *************** *** 537,540 **** --- 539,543 ---- // Successful blocked by target, train skill. + CPrintf(CON_DEBUG, "Training Weapon Skills On Block\n"); event->target->GetCharacterData()->PracticeWeaponSkills(1); Index: command.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/command.cpp,v retrieving revision 1.132 retrieving revision 1.133 diff -C2 -d -r1.132 -r1.133 *** command.cpp 3 Sep 2004 11:18:36 -0000 1.132 --- command.cpp 10 Sep 2004 22:21:13 -0000 1.133 *************** *** 1511,1515 **** CPrintf(CON_CMDOUTPUT ,"Experience points(W) %7d\n",charData->GetExperiencePoints()); CPrintf(CON_CMDOUTPUT ,"Progression points(X) %7d\n",charData->GetProgressionPoints()); ! CPrintf(CON_CMDOUTPUT ,"Skill Skill(Z) Base(Z) Cap(Y) Prac(P) P->Z++\n"); for (int skillID = 0; skillID < (int)PSSKILL_COUNT; skillID++) { --- 1511,1515 ---- CPrintf(CON_CMDOUTPUT ,"Experience points(W) %7d\n",charData->GetExperiencePoints()); CPrintf(CON_CMDOUTPUT ,"Progression points(X) %7d\n",charData->GetProgressionPoints()); ! CPrintf(CON_CMDOUTPUT ,"Skill Practice(Z) Knowledge(Y) Rank(R) \n"); for (int skillID = 0; skillID < (int)PSSKILL_COUNT; skillID++) { *************** *** 1521,1533 **** } ! if (charData->GetSkill(info->id) == 0 && ! charData->GetBaseSkillMax(info->id) == 0) continue; ! CPrintf(CON_CMDOUTPUT ,"%-20s %7u %7u %7u %7u %7u\n",info->name.GetData(), ! charData->GetSkill(info->id), ! charData->GetBaseSkill(info->id), ! charData->GetBaseSkillMax(info->id), ! charData->GetBaseSkillPractice(info->id), ! charData->GetSkillPracticeNextRank(info->id)); } return 0; --- 1521,1533 ---- } ! int z = charData->GetSkillPractice(info->id); ! int y = charData->GetSkillKnowledge(info->id); ! int rank = charData->GetSkillRank(info->id); ! ! if ( z == 0 && y == 0 && rank == 0 ) ! continue; ! CPrintf(CON_CMDOUTPUT ,"%-20s %7u %7u %7u \n",info->name.GetData(), ! z, y, rank ); } return 0; Index: events.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/events.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** events.cpp 25 Aug 2004 05:44:01 -0000 1.6 --- events.cpp 10 Sep 2004 22:21:13 -0000 1.7 *************** *** 108,109 **** --- 108,138 ---- target = (gemObject*)event->GetUInt32(); } + + + //------------------------------------------------------------------------------ + + psZPointsGainedEvent::psZPointsGainedEvent( gemActor* actor, csString& name, int gained, bool rankup ) + { + msg = new MsgEntry(sizeof(gemActor*) + + sizeof(int) + + sizeof(bool) + + name.Length()+1, PRIORITY_LOW); + + msg->SetType(MSGTYPE_ZPOINT_EVENT); + msg->clientnum = 0; + msg->Add( name ); + msg->Add( (uint32_t)actor ); + msg->Add( (uint32_t)gained ); + msg->Add( rankup ); + } + + psZPointsGainedEvent::psZPointsGainedEvent( MsgEntry* event ) + { + if ( !event ) + return; + + skillName = event->GetStr(); + actor = (gemActor*)event->GetUInt32(); + amountGained = event->GetUInt32(); + rankUp = event->GetBool(); + } \ No newline at end of file Index: events.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/events.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** events.h 8 Aug 2004 05:22:57 -0000 1.5 --- events.h 10 Sep 2004 22:21:13 -0000 1.6 *************** *** 62,64 **** --- 62,78 ---- }; + /** Event when a player gains some Z points. + */ + class psZPointsGainedEvent : public psMessageCracker + { + public: + psZPointsGainedEvent( gemActor* actor, csString& name, int gained, bool rankup ); + psZPointsGainedEvent( MsgEntry *event ); + + public: + gemActor* actor; /// The player that gained the points. + int amountGained; /// The amount that was gained. + bool rankUp; /// True if the amount gained caused a rank up + csString skillName; /// The name of the skill points gained in. + }; #endif Index: progressionmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/progressionmanager.cpp,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -d -r1.76 -r1.77 *** progressionmanager.cpp 3 Sep 2004 01:34:12 -0000 1.76 --- progressionmanager.cpp 10 Sep 2004 22:21:13 -0000 1.77 *************** *** 1096,1102 **** int adjustValue = (int)value->Run(actor,target,mgr); ! unsigned int result = (unsigned int)(adjustValue + (int)(setValue?0:character->GetSkill(skill))); ! character->SetSkill(skill,result); return result; --- 1096,1102 ---- int adjustValue = (int)value->Run(actor,target,mgr); ! unsigned int result = (unsigned int)(adjustValue + (int)(setValue?0:character->GetSkillRank(skill))); ! character->SetBaseSkillRank(skill,result); return result; *************** *** 1544,1548 **** --- 1544,1550 ---- eventmanager->Subscribe(this,MSGTYPEGUISKILL); + eventmanager->Subscribe(this,MSGTYPE_DEATH_EVENT); + eventmanager->Subscribe(this,MSGTYPE_ZPOINT_EVENT); Initialize(); // Load from db. *************** *** 1554,1557 **** --- 1556,1560 ---- eventmanager->Unsubscribe(this,MSGTYPEGUISKILL); eventmanager->Unsubscribe(this,MSGTYPE_DEATH_EVENT); + eventmanager->Subscribe(this,MSGTYPE_ZPOINT_EVENT); } *************** *** 1630,1633 **** --- 1633,1650 ---- break; } + + case MSGTYPE_ZPOINT_EVENT: + { + psZPointsGainedEvent evt(me); + csString string; + string.Format("You've gained some practice points in %s. ", evt.skillName.GetData() ); + if ( evt.rankUp ) + { + string.Append("You've also Ranked up!"); + } + psserver->SendSystemInfo(evt.actor->GetClientID(), string); + break; + } + } } *************** *** 1722,1725 **** --- 1739,1743 ---- case psGUISkillMessage::BUY_SKILL: { + CPrintf(CON_DEBUG, "---------------Buying Skill-------------\n"); csRef<iDocumentSystem> xml = csPtr<iDocumentSystem>(new csTinyDocumentSystem); *************** *** 1732,1735 **** --- 1750,1754 ---- { Error2("Error in XML: %s", error ); + CPrintf(CON_DEBUG, " Error in XML\n"); return; } *************** *** 1741,1747 **** --- 1760,1769 ---- psSkillInfo * info = psServer::cachemanager.GetSkillByName(skillName); + CPrintf(CON_DEBUG, " Looking for: %s\n", (const char*)skillName); + if (!info) { Error2("No skill with name %s found!",skillName.GetData()); + CPrintf(CON_DEBUG, " No Skill Found\n"); return; } *************** *** 1756,1759 **** --- 1778,1783 ---- } + CPrintf(CON_DEBUG, " PP available: %d\n", character->GetProgressionPoints() ); + // Test for progression points if (character->GetProgressionPoints() <= 0) *************** *** 1765,1768 **** --- 1789,1793 ---- // Test for money + if (info->price > character->GetMoney()) { *************** *** 1771,1780 **** return; } character->UseProgressionPoints(1); ! character->SetMoney(character->GetMoney()-info->price); ! character->AddBaseSkillMax(info->id,1); ! SendSkillList(client); break; } --- 1796,1813 ---- return; } + if ( !character->CanTrain( info->id ) ) + { + psserver->SendSystemInfo(client->GetClientNum(), + "You cannot train this skill any higher yet!"); + return; + } + character->UseProgressionPoints(1); ! character->SetMoney(character->GetMoney()-info->price); ! character->Train(info->id,1); SendSkillList(client); + psserver->SendSystemInfo(client->GetClientNum(), "You've received some %s training", skillName.GetData()); + break; } *************** *** 1811,1837 **** } ! int Z = (int)character->GetBaseSkill((PSSKILL)skillID); ! float P = 100.0*character->GetBaseSkillPractice((PSSKILL)skillID)/ ! character->GetSkillPracticeNextRank((PSSKILL)skillID); ! int Y = (int)character->GetBaseSkillMax((PSSKILL)skillID); ! int price = info->price.GetTotal(); ! if (trainerInfo) { // Only send skills that the trainer is providing education in if (!trainerInfo->TrainingInSkill((PSSKILL)skillID, ! character->GetBaseSkillMax((PSSKILL)skillID), faction)) continue; } else { // Don't send not trained skills when just viewing. ! if (Z == 0 && Y == 0) continue; } csString tmp; ! tmp.Format("<SKILL NAME=\"%s\" PRICE=\"%d\" P=\"%.2f\" Z=\"%.d\" Y=\"%d\" />", ! EscpXML(info->name).GetData(),price,P,Z,Y); buff.Append(tmp); } --- 1844,1870 ---- } ! int Z = (int)character->GetBaseSkillPractice( (PSSKILL)skillID ); ! int Y = (int)character->GetBaseSkillKnowledge( (PSSKILL)skillID ); ! int rank = character->GetSkillRank( (PSSKILL)skillID ); ! if (trainerInfo) { // Only send skills that the trainer is providing education in if (!trainerInfo->TrainingInSkill((PSSKILL)skillID, ! character->GetSkillRank((PSSKILL)skillID), faction)) + { continue; + } } else { // Don't send not trained skills when just viewing. ! if (Z == 0 && Y == 0 && rank == 0) continue; } csString tmp; ! tmp.Format("<SKILL NAME=\"%s\" Z=\"%.d\" Y=\"%d\" R=\"%d\" />", ! EscpXML(info->name).GetData(),Z,Y,rank); buff.Append(tmp); } Index: psserverchar.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/psserverchar.cpp,v retrieving revision 1.205 retrieving revision 1.206 diff -C2 -d -r1.205 -r1.206 *** psserverchar.cpp 28 Aug 2004 03:14:10 -0000 1.205 --- psserverchar.cpp 10 Sep 2004 22:21:13 -0000 1.206 *************** *** 669,673 **** { sprintf(tempBuffer, "<SKILL NAME=\"%s\" VALUE=\"%5.2f\" />", ! EscpXML(skillinfo->name).GetData(), chardata->GetSkill((PSSKILL)i)); outData.Append(tempBuffer); } --- 669,673 ---- { sprintf(tempBuffer, "<SKILL NAME=\"%s\" VALUE=\"%5.2f\" />", ! EscpXML(skillinfo->name).GetData(), chardata->GetSkillRank((PSSKILL)i)); outData.Append(tempBuffer); } Index: spellmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/spellmanager.cpp,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** spellmanager.cpp 25 Aug 2004 05:44:01 -0000 1.65 --- spellmanager.cpp 10 Sep 2004 22:21:13 -0000 1.66 *************** *** 201,205 **** if ( spell ) { ! int skill = client->GetCharacterData()->GetBaseSkill( spell->GetWay()->skill ); int maxRealm = 1 + skill/20; --- 201,205 ---- if ( spell ) { ! int skill = client->GetCharacterData()->GetSkillRank( spell->GetWay()->skill ); int maxRealm = 1 + skill/20; Index: workmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/workmanager.cpp,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** workmanager.cpp 26 Aug 2004 10:43:31 -0000 1.54 --- workmanager.cpp 10 Sep 2004 22:21:14 -0000 1.55 *************** *** 300,304 **** // Calculate factor for skill ! float f1 = event->dependency->GetCharacterData()->GetBaseSkill((PSSKILL)event->nr->skill->id); f1 /= event->nr->skill_level; --- 300,304 ---- // Calculate factor for skill ! float f1 = event->dependency->GetCharacterData()->GetSkillRank((PSSKILL)event->nr->skill->id); f1 /= event->nr->skill_level; *************** *** 1101,1105 **** { int minPriSkill = trans->GetMinPrimarySkill(); ! int basePriSkill = owner->GetBaseSkill((PSSKILL)priSkill); if ( minPriSkill > basePriSkill ) { --- 1101,1105 ---- { int minPriSkill = trans->GetMinPrimarySkill(); ! int basePriSkill = owner->GetSkillRank((PSSKILL)priSkill); if ( minPriSkill > basePriSkill ) { *************** *** 1113,1117 **** { int minSecSkill = trans->GetMinSecondarySkill(); ! int baseSecSkill = owner->GetBaseSkill((PSSKILL)secSkill); if ( minSecSkill > baseSecSkill ) { --- 1113,1117 ---- { int minSecSkill = trans->GetMinSecondarySkill(); ! int baseSecSkill = owner->GetSkillRank((PSSKILL)secSkill); if ( minSecSkill > baseSecSkill ) { *************** *** 1605,1609 **** if ( priSkill != 0) { ! int basePriSkill = owner->GetBaseSkill((PSSKILL)priSkill); int maxPriSkill = trans->GetMaxPrimarySkill(); --- 1605,1609 ---- if ( priSkill != 0) { ! int basePriSkill = owner->GetSkillRank((PSSKILL)priSkill); int maxPriSkill = trans->GetMaxPrimarySkill(); *************** *** 1643,1647 **** if ( secSkill != 0) { ! int baseSecSkill = owner->GetBaseSkill((PSSKILL)secSkill); int maxSecSkill = trans->GetMaxSecondarySkill(); --- 1643,1647 ---- if ( secSkill != 0) { ! int baseSecSkill = owner->GetSkillRank((PSSKILL)secSkill); int maxSecSkill = trans->GetMaxSecondarySkill(); *************** *** 1730,1734 **** // Check if the user has the right skills ! if(character->GetSkill(skill) >= event->object->GetLockStrength()) { bool value = event->object->GetIsLocked(); --- 1730,1734 ---- // Check if the user has the right skills ! if(character->GetSkillRank(skill) >= event->object->GetLockStrength()) { bool value = event->object->GetIsLocked(); |