From: <to...@us...> - 2008-03-16 00:26:07
|
Revision: 1181 http://planeshift.svn.sourceforge.net/planeshift/?rev=1181&view=rev Author: tomtt Date: 2008-03-15 17:26:07 -0700 (Sat, 15 Mar 2008) Log Message: ----------- Reverted back to before INSTANCE_ID changes and patched in trade constraint and transform in hand without container fixes. Modified Paths: -------------- stable/src/server/workmanager.cpp Modified: stable/src/server/workmanager.cpp =================================================================== --- stable/src/server/workmanager.cpp 2008-03-15 21:36:45 UTC (rev 1180) +++ stable/src/server/workmanager.cpp 2008-03-16 00:26:07 UTC (rev 1181) @@ -272,8 +272,8 @@ psActionLocation *action = gemAction->GetAction(); // Check if the actionlocation is linked to real item - INSTANCE_ID instance_id = action->GetInstanceID(); - if( instance_id!= INSTANCE_ALL ) + uint32 instance_id = action->GetInstanceID(); + if (instance_id!=(uint32)-1) { target = GEMSupervisor::GetSingleton().FindItemEntity( instance_id ); } @@ -356,7 +356,7 @@ else { psserver->SendSystemError(client->GetClientNum(),"The Slot %s is empty.", msg.repairSlotName.GetData() ); - } + } return; } if (repairTarget->GetItemQuality() >= repairTarget->GetMaxItemQuality() ) @@ -850,10 +850,10 @@ } else { - Debug1(LOG_TRADE, 0 ,debug.GetData()); + Debug1(LOG_TRADE, 0 ,debug.GetData()); } - + psCharacter *worke = workEvent->worker->GetCharacterData(); if (roll < total) // successful! { @@ -1013,7 +1013,7 @@ * If the transformation is caused by an auto-transform container then IsTransformable() is called again to * see if a second transformation needs to be started. * -* Practice points are awarded only if skills are indicated in the transformation processes. Experience +* Practice points are awarded only if skills are indicated in the transformation processes. Experience * is awarded based on the difference of the original quality of the item and the resulting item's quality. * * Entry Points: @@ -1024,7 +1024,7 @@ * HandleCombine - Client issues /combine command from buttons: gemActiveObject::SendBehaviorMessage() * - Workmanager gets /combine message: psWorkManager::HandleMessage() * HandleWorkEvent - Work event triggers: psWorkGameEvent::Trigger() -* StopWork - Items removed from containers: SlotManager::MoveFromWorldContainer(); +* StopWork - Items removed from containers: SlotManager::MoveFromWorldContainer(); * StartScriptWork - Progression scripts pass pattern information: CraftOp::Run() * */ @@ -1549,14 +1549,14 @@ // Check for actor target gemActor* gemAct = dynamic_cast <gemActor*> (target); - if(gemAct) + if(gemAct) { return ScriptActor(gemAct); } // Check if target is action location gemActionLocation* gemAction = dynamic_cast<gemActionLocation*>(target); - if(gemAction) + if(gemAction) { return ScriptAction(gemAction); } @@ -1752,8 +1752,8 @@ psActionLocation *action = gemAction->GetAction(); // check if the actionlocation is linked to real item - INSTANCE_ID instance_id = action->GetInstanceID(); - if (instance_id==INSTANCE_ALL) + uint32 instance_id = action->GetInstanceID(); + if (instance_id==(uint32)-1) { instance_id = action->GetGemObject()->GetEntity()->GetID(); } @@ -1788,7 +1788,7 @@ psItem* item = it.Next(); if ((item->GetGuardingCharacterID() == owner->GetCharacterID()) || (item->GetGuardingCharacterID() == 0)) - { + { itemArray.Push(item); // While we are here find the item with the least quality @@ -1916,7 +1916,7 @@ resultQty = 0; // Get all unknow item transforms for this pattern - csPDelArray<psTradeTransformations>* transArray = + csPDelArray<psTradeTransformations>* transArray = CacheManager::GetSingleton().FindTransformationsList(activePattern, 0); if (transArray == NULL) { @@ -1979,7 +1979,7 @@ } else { - if (secure) + if (secure) { psserver->SendSystemInfo(clientNum,"Combination match fail."); psserver->SendSystemInfo(clientNum,"Items left unmatched:"); @@ -2036,8 +2036,8 @@ return TRANSFORM_GARBAGE; // If no other non-garbage/unknown failures then check for pattern-less any item transforms - if ((singleMatch == TRANSFORM_GARBAGE || singleMatch == TRANSFORM_UNKNOWN_ITEM) - && (groupMatch == TRANSFORM_GARBAGE || groupMatch == TRANSFORM_UNKNOWN_ITEM) + if ((singleMatch == TRANSFORM_GARBAGE || singleMatch == TRANSFORM_UNKNOWN_ITEM) + && (groupMatch == TRANSFORM_GARBAGE || groupMatch == TRANSFORM_UNKNOWN_ITEM) && (lessMatch == TRANSFORM_GARBAGE || lessMatch == TRANSFORM_UNKNOWN_ITEM)) { if (secure) psserver->SendSystemInfo(clientNum,"Checking patternless any item tranforms for pattern id %u, target id %u, and target qty %u.", 0, 0, 0); @@ -2213,7 +2213,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // Do transformation // This is called once all the transformation requirements have been verified. -void psWorkManager::StartTransformationEvent(int transType, INVENTORY_SLOT_NUMBER transSlot, int resultQty, +void psWorkManager::StartTransformationEvent(int transType, INVENTORY_SLOT_NUMBER transSlot, int resultQty, float resultQuality, psItem* item) { // Get transformation delay @@ -2396,8 +2396,8 @@ psActionLocation *action = gemAction->GetAction(); // check if the actionlocation is linked to real item - INSTANCE_ID instance_id = action->GetInstanceID(); - if (instance_id==INSTANCE_ALL) + uint32 instance_id = action->GetInstanceID(); + if (instance_id==(uint32)-1) { instance_id = action->GetGemObject()->GetEntityID(); } @@ -2470,7 +2470,7 @@ // check stamina if ( (client->GetActor()->GetCharacterData()->GetStamina(true) <= ( client->GetActor()->GetCharacterData()->GetStaminaMax(true)*.1 ) ) - || (client->GetActor()->GetCharacterData()->GetStamina(false) <= + || (client->GetActor()->GetCharacterData()->GetStamina(false) <= ( client->GetActor()->GetCharacterData()->GetStaminaMax(false)*.1 )) ) { SendTransformError( clientNum, TRANSFORM_NO_STAMINA ); @@ -2714,32 +2714,29 @@ return NULL; } - newItem->SetOwningCharacter(owner); - // this is done by AddToContainer, as long as SetOwningCharacter is set _before_ - // newItem->SetGuardingCharacterID(owner->GetCharacterID()); - // Locate item in container and save container if (!container->AddToContainer(newItem,owner->GetActor()->GetClient())) { Error3("Bad container slot %i when trying to add item instance #%u.", PSCHARACTER_SLOT_NONE, newItem->GetUID()); return NULL; } + newItem->SetOwningCharacter(owner); workItem->Save(true); // Zero out x,y,z location because it is in container float xpos,ypos,zpos,yrot; psSectorInfo* sectorinfo; - INSTANCE_ID instance; + int instance; workItem->GetLocationInWorld(instance, §orinfo, xpos, ypos, zpos, yrot ); newItem->SetLocationInWorld(instance,sectorinfo, 0.00, 0.00, 0.00, 0.00 ); newItem->SetLoaded(); // Item is fully created // Check for conditions that would cause assert on newItem->Save(true) - if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) + if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) { Error6("Problem on item: item UID=%i crafterID=%i guildID=%i name=%s owner=%p", - newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), + newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), worker->GetGuildID(), owner->GetCharName(), owner); if (workItem && workItem->GetBaseStats()) { @@ -2773,8 +2770,6 @@ return NULL; } - INVENTORY_SLOT_NUMBER oldslot = oldItem->GetLocInParent(false); - // Remove items from container and destroy it container->RemoveFromContainer(oldItem,owner->GetActor()->GetClient() ); if (!oldItem->Destroy()) @@ -2796,32 +2791,30 @@ return NULL; } - newItem->SetOwningCharacter(owner); - // this is done by AddToContainer, as long as SetOwningCharacter is set _before_ - // newItem->SetGuardingCharacterID(owner->GetCharacterID()); - // Locate item in container and save container - if (!container->AddToContainer(newItem,owner->GetActor()->GetClient(),oldslot)) + if (!container->AddToContainer(newItem,owner->GetActor()->GetClient())) { Error3("Bad container slot %i when trying to add item instance #%u.", PSCHARACTER_SLOT_NONE, newItem->GetUID()); return NULL; } + newItem->SetOwningCharacter(owner); + newItem->SetGuardingCharacterID(owner->GetCharacterID()); workItem->Save(true); // Zero out x,y,z location because it is in container float xpos,ypos,zpos,yrot; psSectorInfo* sectorinfo; - INSTANCE_ID instance; + int instance; workItem->GetLocationInWorld(instance, §orinfo, xpos, ypos, zpos, yrot ); newItem->SetLocationInWorld(instance,sectorinfo, 0.00, 0.00, 0.00, 0.00 ); newItem->SetLoaded(); // Item is fully created // Check for conditions that would cause assert on newItem->Save(true) - if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) + if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) { Error6("Problem on item: item UID=%i crafterID=%i guildID=%i name=%s owner=%p", - newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), + newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), worker->GetGuildID(), owner->GetCharName(), owner); if (workItem && workItem->GetBaseStats()) { @@ -2886,10 +2879,10 @@ newItem->SetLoaded(); // Item is fully created // Check for conditions that would cause assert on newItem->Save(true) - if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) + if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) { Error6("Problem on item: item UID=%i crafterID=%i guildID=%i name=%s owner=%p", - newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), + newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), worker->GetGuildID(), owner->GetCharName(), owner); if (workItem && workItem->GetBaseStats()) { @@ -2963,10 +2956,10 @@ newItem->SetLoaded(); // Item is fully created // Check for conditions that would cause assert on newItem->Save(true) - if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) + if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) { Error6("Problem on item: item UID=%i crafterID=%i guildID=%i name=%s owner=%p", - newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), + newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), worker->GetGuildID(), gemTarget->GetCharacterData()->GetCharName(), gemTarget->GetCharacterData()); if (workItem && workItem->GetBaseStats()) { @@ -3000,7 +2993,7 @@ #endif // Get the location of what will be replaced - INSTANCE_ID instance; + int instance; psSectorInfo* sectorinfo; float xpos,ypos,zpos,yrot; oldItem->GetLocationInWorld(instance, §orinfo, xpos, ypos, zpos, yrot ); @@ -3038,10 +3031,10 @@ // Check for conditions that would cause assert on newItem->Save(true) - if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) + if (newItem->GetLocInParent(false) == -1 && newItem->GetOwningCharacter() && newItem->GetContainerID()==0) { Error6("Problem on item: item UID=%i crafterID=%i guildID=%i name=%s owner=%p", - newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), + newItem->GetBaseStats()->GetUID(),worker->GetPlayerID(), worker->GetGuildID(), owner->GetCharName(), owner); if (workItem && workItem->GetBaseStats()) { @@ -3302,7 +3295,7 @@ #ifdef DEBUG_WORKMANAGER CPrintf(CON_DEBUG, "handling work event...\n"); #endif - // Load vars + // Load vars if ( !LoadLocalVars(workEvent->client,workEvent->gemTarget) ) { Error1("Could not load local variables in HandleWorkEvent().\n"); @@ -3420,7 +3413,7 @@ } } - // Check for 0 quantity transformations + // Check for 0 quantity transformations if ( itemQty == 0 ) { resultQty = workEvent->GetResultQuantity(); @@ -3512,7 +3505,7 @@ Debug2(LOG_TRADE, clientNum, "Giving experience points %i.\n",(2*(int)(currentQuality-startQuality))); if (secure) psserver->SendSystemInfo(clientNum,"Giving experience points %i.",(2*(int)(currentQuality-startQuality))); } - + // Let the user know the we have done something if (result <= 0 ) { @@ -4061,7 +4054,7 @@ if(category == REPAIR && client->GetActor() && (client->GetActor()->GetMode() == PSCHARACTER_MODE_WORK)) { client->GetActor()->SetMode(PSCHARACTER_MODE_PEACE); - + psItem *repairTarget = client->GetCharacterData()->Inventory().GetInventoryItem(PSCHARACTER_SLOT_RIGHTHAND); if (repairTarget) repairTarget->SetInUse(false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |