From: <hei...@us...> - 2008-08-11 18:44:45
|
Revision: 2041 http://planeshift.svn.sourceforge.net/planeshift/?rev=2041&view=rev Author: heinchen Date: 2008-08-11 18:44:42 +0000 (Mon, 11 Aug 2008) Log Message: ----------- Fix for flawd combat animation Modified Paths: -------------- trunk/docs/history.txt trunk/src/client/pscelclient.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-09 17:38:19 UTC (rev 2040) +++ trunk/docs/history.txt 2008-08-11 18:44:42 UTC (rev 2041) @@ -1,3 +1,6 @@ +*** 2008-08-11 by Andreas Heinchen +- Fix for flawed combat animation by weltall + *** 2008-08-09 by Steven Patrick - Fixed FS#1336 - Middle click (inventory "take all stack") toggles MouseLook when bound to MouseLook, patch by peeg Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2008-08-09 17:38:19 UTC (rev 2040) +++ trunk/src/client/pscelclient.cpp 2008-08-11 18:44:42 UTC (rev 2041) @@ -1766,7 +1766,6 @@ case psModeMessage::COMBAT: // TODO: Get stance and set anim for that stance - cal3dstate->ClearAllAnims(); SetIdleAnimation("combat stand"); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2008-08-12 03:38:06
|
Revision: 2042 http://planeshift.svn.sourceforge.net/planeshift/?rev=2042&view=rev Author: kennygraunke Date: 2008-08-12 03:38:14 +0000 (Tue, 12 Aug 2008) Log Message: ----------- - Fix for pet summoning broken by r1908 - SetFamiliar was storing the EID, while GetFamiliar was treating it as a PID. Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/client.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-11 18:44:42 UTC (rev 2041) +++ trunk/docs/history.txt 2008-08-12 03:38:14 UTC (rev 2042) @@ -1,3 +1,7 @@ +*** 2008-08-11 by Kenny Graunke +- Fix for pet summoning broken by r1908 - SetFamiliar was storing the EID, + while GetFamiliar was treating it as a PID. + *** 2008-08-11 by Andreas Heinchen - Fix for flawed combat animation by weltall Modified: trunk/src/server/client.cpp =================================================================== --- trunk/src/server/client.cpp 2008-08-11 18:44:42 UTC (rev 2041) +++ trunk/src/server/client.cpp 2008-08-12 03:38:14 UTC (rev 2042) @@ -186,7 +186,7 @@ { if ( familiar ) { - pets[0] = familiar->GetEntityID(); + pets[0] = familiar->GetPlayerID(); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rds...@us...> - 2008-08-14 06:22:41
|
Revision: 2044 http://planeshift.svn.sourceforge.net/planeshift/?rev=2044&view=rev Author: rdschulz Date: 2008-08-14 06:22:50 +0000 (Thu, 14 Aug 2008) Log Message: ----------- - Fix for FS#800 by Vegar - the scroll wheel now correctly scrolls through inventory list if used on the item slots or the scrollbar Modified Paths: -------------- trunk/docs/history.txt trunk/src/client/gui/pawsslot.cpp trunk/src/client/gui/shortcutwindow.cpp trunk/src/client/gui/shortcutwindow.h trunk/src/common/paws/pawsbutton.cpp trunk/src/common/paws/pawscrollbar.cpp trunk/src/common/paws/pawscrollbar.h trunk/src/common/paws/pawslistbox.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/docs/history.txt 2008-08-14 06:22:50 UTC (rev 2044) @@ -1,3 +1,7 @@ +*** 2008-08-13 by Roland Schulz +- Fix for FS#800 by Vegar - the scroll wheel now correctly scrolls through + inventory list if used on the item slots or the scrollbar + *** 2008-08-11 by Kenny Graunke - Fix for pet summoning broken by r1908 - SetFamiliar was storing the EID, while GetFamiliar was treating it as a PID. Modified: trunk/src/client/gui/pawsslot.cpp =================================================================== --- trunk/src/client/gui/pawsslot.cpp 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/src/client/gui/pawsslot.cpp 2008-08-14 06:22:50 UTC (rev 2044) @@ -77,6 +77,11 @@ bool pawsSlot::OnMouseDown( int button, int modifiers, int x, int y ) { + if ( button == csmbWheelUp || button == csmbWheelDown ) + { + return parent->OnMouseDown( button, modifiers, x, y); + } + if ( !psengine->GetCelClient()->GetMainPlayer()->IsAlive() ) return true; @@ -106,13 +111,16 @@ // Grab one item if EntityDragDropOne modifiers key are used. Grab everything in the slot // if EntityDragDropAll modifiers key are used mgr->Handle( this, grabOne, grabAll ); - return true; - }else if ( parent ) - return parent->OnButtonPressed(button, modifiers, this); - else - return pawsWidget::OnMouseDown(button, modifiers, x, y ); + return true; + } + else if ( parent ) + { + return parent->OnButtonPressed(button, modifiers, this); + } + else + return pawsWidget::OnMouseDown(button, modifiers, x, y ); + } } -} void pawsSlot::SetToolTip( const char* text ) { Modified: trunk/src/client/gui/shortcutwindow.cpp =================================================================== --- trunk/src/client/gui/shortcutwindow.cpp 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/src/client/gui/shortcutwindow.cpp 2008-08-14 06:22:50 UTC (rev 2044) @@ -258,6 +258,24 @@ } } +bool pawsShortcutWindow::OnMouseDown( int button, int modifiers, int x, int y ) +{ + if ( button == csmbWheelUp ) + { + scrollBar->ScrollUp(); + return true; + } + else if ( button == csmbWheelDown ) + { + scrollBar->ScrollDown(); + return true; + } + else + { + return pawsControlledWindow::OnMouseDown(button, modifiers, x, y); + } +} + bool pawsShortcutWindow::OnButtonPressed( int mouseButton, int keyModifier, pawsWidget* widget ) { if (!subWidget) @@ -383,12 +401,10 @@ subWidget->Show(); PawsManager::GetSingleton().SetCurrentFocusedWidget(textBox); } - else if ( mouseButton == csmbWheelUp ) - scrollBar->SetCurrentValue( scrollBar->GetCurrentValue() - 1 ); - else if ( mouseButton == csmbWheelDown ) - scrollBar->SetCurrentValue( scrollBar->GetCurrentValue() + 1 ); else + { return false; + } return true; } Modified: trunk/src/client/gui/shortcutwindow.h =================================================================== --- trunk/src/client/gui/shortcutwindow.h 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/src/client/gui/shortcutwindow.h 2008-08-14 06:22:50 UTC (rev 2044) @@ -46,6 +46,7 @@ virtual bool PostSetup(); + bool OnMouseDown( int button, int modifiers, int x, int y ); bool OnButtonPressed(int mouseButton, int keyModifier, pawsWidget* reporter); bool OnScroll( int direction, pawsScrollBar* widget ); void OnResize(); Modified: trunk/src/common/paws/pawsbutton.cpp =================================================================== --- trunk/src/common/paws/pawsbutton.cpp 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/src/common/paws/pawsbutton.cpp 2008-08-14 06:22:50 UTC (rev 2044) @@ -314,8 +314,13 @@ bool pawsButton::OnMouseDown( int button, int modifiers, int x, int y ) { - if (!enabled) + if ( !enabled ) return true; + else if ( button == csmbWheelUp || button == csmbWheelDown ) + if ( parent ) + return parent->OnMouseDown(button, modifiers, x, y); + else + return false; // plays a sound PawsManager::GetSingleton().PlaySound(sound_click); Modified: trunk/src/common/paws/pawscrollbar.cpp =================================================================== --- trunk/src/common/paws/pawscrollbar.cpp 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/src/common/paws/pawscrollbar.cpp 2008-08-14 06:22:50 UTC (rev 2044) @@ -395,8 +395,19 @@ bool pawsScrollBar::OnMouseDown( int button, int modifiers, int x, int y ) { - if (WidgetAt(x, y) == thumb) + if (button == csmbWheelUp) { + ScrollUp(); + // Always return true, we don't want the scroll to go to the parent widget(s) + return true; + } + else if(button == csmbWheelDown) + { + ScrollDown(); + return true; + } + else if (WidgetAt(x, y) == thumb) + { if (horizontal) thumbDragPoint = x - thumb->ScreenFrame().xmin; else @@ -489,25 +500,11 @@ switch( widget->GetID() ) { case SCROLL_DOWN: - if ( currentValue < maxValue || !limited ) - { - currentValue += tickValue; - if ( limited ) - LimitCurrentValue(); - SetThumbLayout(); - return parent->OnScroll( widget->GetID(), this ); - } + return ScrollDown(); break; - case SCROLL_UP: - if ( currentValue > minValue || !limited ) - { - currentValue -= tickValue; - if ( limited ) - LimitCurrentValue(); - SetThumbLayout(); - return parent->OnScroll( widget->GetID(), this ); - } + case SCROLL_UP: + return ScrollUp(); break; } @@ -615,3 +612,30 @@ else return screenFrame.Height() - 3*scrollBarSize + 2*THUMB_MARGIN; } + +bool pawsScrollBar::ScrollDown() +{ + if ( currentValue < maxValue || !limited ) + { + currentValue += tickValue; + if ( limited ) + LimitCurrentValue(); + SetThumbLayout(); + return parent->OnScroll( SCROLL_DOWN, this ); + } + return false; +} + +bool pawsScrollBar::ScrollUp() +{ + if ( currentValue > minValue || !limited ) + { + currentValue -= tickValue; + if ( limited ) + LimitCurrentValue(); + SetThumbLayout(); + return parent->OnScroll( SCROLL_UP, this ); + } + return false; +} + Modified: trunk/src/common/paws/pawscrollbar.h =================================================================== --- trunk/src/common/paws/pawscrollbar.h 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/src/common/paws/pawscrollbar.h 2008-08-14 06:22:50 UTC (rev 2044) @@ -100,6 +100,15 @@ virtual bool OnMouseExit(); virtual void OnUpdateData(const char *dataname,PAWSData& data); + + /** Scrolls one step up + * @return true if the scrollbar was scrolled + */ + bool ScrollUp(); + /** Scrolls one step down + * @return true if the scrollbar was scrolled + */ + bool ScrollDown(); protected: /** Sets position and size of thumb on screen according to currentValue */ void SetThumbLayout(); Modified: trunk/src/common/paws/pawslistbox.cpp =================================================================== --- trunk/src/common/paws/pawslistbox.cpp 2008-08-14 05:36:51 UTC (rev 2043) +++ trunk/src/common/paws/pawslistbox.cpp 2008-08-14 06:22:50 UTC (rev 2044) @@ -52,7 +52,9 @@ bool OnMouseDown( int button, int modifiers, int x, int y ) { - if (listBox->GetSortedColumn() == colNum) + if (button == csmbWheelUp || button == csmbWheelDown) + return listBox->OnMouseDown( button, modifiers, x, y ); + else if (listBox->GetSortedColumn() == colNum) listBox->SetSortOrder( ! listBox->GetSortOrder() ); else listBox->SetSortedColumn(colNum); @@ -1092,14 +1094,17 @@ { return parentBox->OnMouseDown(button, modifiers, x, y); } - return parentBox->Select( this ); } -bool pawsListBoxRow::OnDoubleClick(int, int, int, int) +bool pawsListBoxRow::OnDoubleClick(int button, int modifiers, int x, int y) { pawsListBox * parentBox = (pawsListBox *)parent; - parentBox->SendOnListAction(LISTBOX_SELECTED); + + if (button != csmbWheelUp && button != csmbWheelDown) + { + parentBox->SendOnListAction(LISTBOX_SELECTED); + } return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-08-14 14:57:36
|
Revision: 2045 http://planeshift.svn.sourceforge.net/planeshift/?rev=2045&view=rev Author: mgist Date: 2008-08-14 14:57:45 +0000 (Thu, 14 Aug 2008) Log Message: ----------- - Fixed FS#2128, patch from weltall. - Patch from Kaerli to fix accounts table. Modified Paths: -------------- trunk/docs/history.txt trunk/src/common/paws/pawstextbox.cpp trunk/src/server/database/mysql/accounts.sql Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-14 06:22:50 UTC (rev 2044) +++ trunk/docs/history.txt 2008-08-14 14:57:45 UTC (rev 2045) @@ -1,3 +1,6 @@ +*** 2008-08-14 by Mike Gist +- Fixed FS#2128, patch from weltall. + *** 2008-08-13 by Roland Schulz - Fix for FS#800 by Vegar - the scroll wheel now correctly scrolls through inventory list if used on the item slots or the scrollbar Modified: trunk/src/common/paws/pawstextbox.cpp =================================================================== --- trunk/src/common/paws/pawstextbox.cpp 2008-08-14 06:22:50 UTC (rev 2044) +++ trunk/src/common/paws/pawstextbox.cpp 2008-08-14 14:57:45 UTC (rev 2045) @@ -512,7 +512,7 @@ int colour = msgColour; int size = 0; - size_t pos = messageText.Find("<f"); + size_t pos = messageText.Find("<f "); if(pos != (size_t)-1) { csString fontData = messageText.Slice(pos, messageText.FindFirst('>')+1); Modified: trunk/src/server/database/mysql/accounts.sql =================================================================== --- trunk/src/server/database/mysql/accounts.sql 2008-08-14 06:22:50 UTC (rev 2044) +++ trunk/src/server/database/mysql/accounts.sql 2008-08-14 14:57:45 UTC (rev 2045) @@ -40,7 +40,6 @@ UNIQUE KEY `username` (`username`), UNIQUE KEY `id` (`id`), KEY `indx_accounts_ip` (`last_login_ip`) - USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=latin1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-14 19:22:23
|
Revision: 2046 http://planeshift.svn.sourceforge.net/planeshift/?rev=2046&view=rev Author: heinchen Date: 2008-08-14 19:22:32 +0000 (Thu, 14 Aug 2008) Log Message: ----------- fixed issues with label visibility - see FS#1971 Modified Paths: -------------- trunk/docs/history.txt trunk/src/client/entitylabels.cpp trunk/src/client/entitylabels.h Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-14 14:57:45 UTC (rev 2045) +++ trunk/docs/history.txt 2008-08-14 19:22:32 UTC (rev 2046) @@ -1,3 +1,6 @@ +*** 2008-08-14 by Andreas Heinchen +- Fix for FS#1971, patch by peeg + *** 2008-08-14 by Mike Gist - Fixed FS#2128, patch from weltall. Modified: trunk/src/client/entitylabels.cpp =================================================================== --- trunk/src/client/entitylabels.cpp 2008-08-14 14:57:45 UTC (rev 2045) +++ trunk/src/client/entitylabels.cpp 2008-08-14 19:22:32 UTC (rev 2046) @@ -332,9 +332,9 @@ { CS_ASSERT_MSG("Effects Manager must exist before loading entity labels!", psengine->GetEffectManager() ); - if (visCreatures == LABEL_NEVER && visItems == LABEL_NEVER) - return; - + if(MatchVisibility(object->GetObjectType(), LABEL_NEVER)) + return; + if(object->GetEntityLabel()) { RepaintObjectLabel( object ); @@ -442,7 +442,7 @@ continue; // Don't show labels of stuff whose label isn't always visible - if (!ShowLabel(object->GetObjectType(), LABEL_ALWAYS)) + if (!MatchVisibility(object->GetObjectType(), LABEL_ALWAYS)) continue; // Only show labels within range @@ -463,20 +463,16 @@ // Find out the object underMouse = psengine->GetMainWidget()->FindMouseOverObject(mouse.x, mouse.y); - - if(underMouse) - { - // Don't show labels of stuff whose label isn't only visible on mouse over - if(!ShowLabel(underMouse->GetObjectType(), LABEL_ONMOUSE)) - return; - } // Is this a new object? if (underMouse != lastUnderMouse) { // Hide old - if (lastUnderMouse != NULL) + if (lastUnderMouse != NULL && MatchVisibility(lastUnderMouse->GetObjectType(), LABEL_ONMOUSE)) ShowLabelOfObject(lastUnderMouse,false); + + if (underMouse != NULL && !MatchVisibility(underMouse->GetObjectType(), LABEL_ONMOUSE)) + return; // Show new if (underMouse != NULL && underMouse != celClient->GetMainPlayer()) @@ -590,7 +586,7 @@ OnObjectArrived( entities.Get(i) ); } -bool psEntityLabels::ShowLabel(GEMOBJECT_TYPE type, psEntityLabelVisib vis) +bool psEntityLabels::MatchVisibility(GEMOBJECT_TYPE type, psEntityLabelVisib vis) { if(type == GEM_ACTOR) { Modified: trunk/src/client/entitylabels.h =================================================================== --- trunk/src/client/entitylabels.h 2008-08-14 14:57:45 UTC (rev 2045) +++ trunk/src/client/entitylabels.h 2008-08-14 19:22:32 UTC (rev 2046) @@ -153,7 +153,7 @@ void DeleteLabelOfObject( GEMClientObject* object ); - bool ShowLabel(GEMOBJECT_TYPE type, psEntityLabelVisib vis); + bool MatchVisibility(GEMOBJECT_TYPE type, psEntityLabelVisib vis); /** * Configuration options */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-14 19:55:58
|
Revision: 2047 http://planeshift.svn.sourceforge.net/planeshift/?rev=2047&view=rev Author: heinchen Date: 2008-08-14 19:56:07 +0000 (Thu, 14 Aug 2008) Log Message: ----------- fixed FS#2094 - sketching: Icons and texts jump to the mouse cursor when clicking on them. They also flicker. Modified Paths: -------------- trunk/docs/history.txt trunk/src/client/gui/pawsilluminationwindow.cpp trunk/src/client/gui/pawsilluminationwindow.h Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-14 19:22:32 UTC (rev 2046) +++ trunk/docs/history.txt 2008-08-14 19:56:07 UTC (rev 2047) @@ -1,5 +1,6 @@ *** 2008-08-14 by Andreas Heinchen - Fix for FS#1971, patch by peeg +- Fixed FS#2094, patch by Arerano *** 2008-08-14 by Mike Gist - Fixed FS#2128, patch from weltall. Modified: trunk/src/client/gui/pawsilluminationwindow.cpp =================================================================== --- trunk/src/client/gui/pawsilluminationwindow.cpp 2008-08-14 19:22:32 UTC (rev 2046) +++ trunk/src/client/gui/pawsilluminationwindow.cpp 2008-08-14 19:56:07 UTC (rev 2047) @@ -44,6 +44,8 @@ dirty = false; editMode = false; mouseDown = false; + mouseDownX = 0; + mouseDownY = 0; frame = 0; } @@ -88,7 +90,11 @@ dirty = false; ParseLimits(msg.limits); - ParseSketch(msg.Sketch); + if(!ParseSketch(msg.Sketch)) + {// Don't show a sketch which can't be parsed. + Hide(); + return; + } // if char does not have the right to edit (ie not the originator-artist)... if (!msg.rightToEdit) @@ -243,9 +249,13 @@ if (selectedIndex != SIZET_NOT_FOUND && IsMouseDown()) { psPoint pos = PawsManager::GetSingleton().GetMouse()->GetPosition(); + /* UpdatePosition requires the RELATIVE position now. Much easier, much cleaner. objlist[selectedIndex]->UpdatePosition(GetLogicalWidth(pos.x - ScreenFrame().xmin), GetLogicalHeight(pos.y - - ScreenFrame().ymin)); + - ScreenFrame().ymin));*/ + objlist[selectedIndex]->UpdatePosition(pos.x - mouseDownX, pos.y - mouseDownY); + mouseDownX = pos.x; // remember new position for the next relative update. + mouseDownY = pos.y; } for (size_t i = 0; i < objlist.GetSize(); i++) objlist[i]->Draw(); @@ -437,10 +447,17 @@ if (!strcasecmp(name,"AddText")) { + // deselect the previous object, if any + if (selectedIndex != SIZET_NOT_FOUND) + { + objlist[selectedIndex]->Select(false); + } + int x = (ScreenFrame().xmax - ScreenFrame().xmin)/2; int y = (ScreenFrame().ymax - ScreenFrame().ymin)/2; SketchText *text = new SketchText(x,y,value,this); - objlist.Push(text); + selectedIndex = objlist.Push(text); + objlist[selectedIndex]->Select(true); } else if (!strcasecmp(name,"ChangeName")) { @@ -537,8 +554,9 @@ if (selectedIndex == SIZET_NOT_FOUND) return; - objlist[selectedIndex]->UpdatePosition(objlist[selectedIndex]->x + dx, - objlist[selectedIndex]->y + dy); + /*objlist[selectedIndex]->UpdatePosition(objlist[selectedIndex]->x + dx, + objlist[selectedIndex]->y + dy);*/ + objlist[selectedIndex]->UpdatePosition(dx, dy); } void pawsSketchWindow::RemoveSelected() @@ -547,8 +565,9 @@ { objlist.DeleteIndex(selectedIndex); selectedIndex = SIZET_NOT_FOUND; - if (IsMouseDown()) //if the mouse is being used we need to restore it's shape - PawsManager::GetSingleton().GetMouse()->ChangeImage("Skins Normal Mouse Pointer"); + // We don't set the mouse pointer anymore. It flickered on setting/unsetting and made problems with the offset. (icon jumped on click) + //if (IsMouseDown()) //if the mouse is being used we need to restore it's shape + // PawsManager::GetSingleton().GetMouse()->ChangeImage("Skins Normal Mouse Pointer"); } } @@ -609,7 +628,8 @@ return pawsWidget::OnMouseDown(button, modifiers,x,y); mouseDown = true; - + mouseDownX = x; + mouseDownY = y; for (size_t i=0; i<objlist.GetSize(); i++) { if (objlist[i]->IsHit(x,y)) @@ -626,7 +646,8 @@ objlist[i]->Select(true); // printf("Select object %d.\n", selectedIndex); - PawsManager::GetSingleton().GetMouse()->ChangeImage( objlist[i]->GetStr() ); + // flickers and makes the icon jump + //PawsManager::GetSingleton().GetMouse()->ChangeImage( objlist[i]->GetStr() ); return true; } } @@ -651,7 +672,8 @@ if (selectedIndex != SIZET_NOT_FOUND) { - PawsManager::GetSingleton().GetMouse()->ChangeImage("Skins Normal Mouse Pointer"); + // flickers and makes the icon jump + //PawsManager::GetSingleton().GetMouse()->ChangeImage("Skins Normal Mouse Pointer"); dirty = true; return true; } @@ -773,6 +795,9 @@ else { Error2("Illegal sketch op <%s>. Sketch cannot display.",type.GetDataSafe() ); + // The user has to be aware of that without looking into the "Error log". + psSystemMessage sysMsg( 0, MSG_ERROR, PawsManager::GetSingleton().Translate("Illegal sketch op. Sketch cannot display.") ); + sysMsg.FireEvent(); return false; } @@ -844,9 +869,10 @@ void pawsSketchWindow::SketchIcon::Draw() { - if (!selected || frame > 15) + if (!selected || parent->IsMouseDown() || frame > 15) // blink icon only if it isn't dragged. { - if (!parent->IsMouseDown() || !selected) + // replacing the mouse cursor with the icon flickers and makes the icon jump. + //if (!parent->IsMouseDown() || !selected) iconImage->Draw(parent->GetActualWidth(x) + parent->ScreenFrame().xmin, parent->GetActualHeight(y) + parent->ScreenFrame().ymin, parent->GetActualWidth(iconImage->GetWidth()), @@ -1079,20 +1105,9 @@ rect.Normalize(); - if(parent->IsMouseDown()) //if we are using the mouse to move this thing in real time we must do some changes from when the keyboard is used - { - _x -= offsetX; // This backs off the cursor from where it was - _y -= offsetY; - - //if we are taking the second point we must check it's position - dx = _x - (dragMode == 2 ? x2 : x); - dy = _y - (dragMode == 2 ? y2 : y); - } - else //the keyboard is being used - { - dx = _x - x; - dy = _y - y; - } + // _x, _y are already expected to be RELATIVE! + dx = _x; + dy = _y; switch (dragMode) { @@ -1151,8 +1166,9 @@ rect.Normalize(); - dx = _x - x; - dy = _y - y; + // _x, _y are expected to be RELATIVE! + dx = _x; + dy = _y; x2Updated = x + iconImage->GetWidth() + dx; y2Updated = y + iconImage->GetHeight() + dy; @@ -1187,8 +1203,9 @@ rectText = parent->GetWidgetTextRect(str, x, y); - dx = _x - x; - dy = _y - y; + // _x, _y are expected to be RELATIVE! + dx = _x; + dy = _y; x2Updated = rectText.xmax + dx; y2Updated = rectText.ymax + dy; Modified: trunk/src/client/gui/pawsilluminationwindow.h =================================================================== --- trunk/src/client/gui/pawsilluminationwindow.h 2008-08-14 19:22:32 UTC (rev 2046) +++ trunk/src/client/gui/pawsilluminationwindow.h 2008-08-14 19:56:07 UTC (rev 2047) @@ -47,6 +47,7 @@ virtual void Draw()=0; virtual bool IsHit(int mouseX, int mouseY)=0; virtual void Select(bool _selected) { selected=_selected; frame=0; } + // update the RELATIVE position virtual void UpdatePosition(int _x, int _y) { x = _x; y = _y; } }; struct SketchIcon : public SketchObject @@ -61,6 +62,7 @@ virtual void Draw(); virtual bool IsHit(int mouseX, int mouseY); virtual void SetStr(const char *s); + // update the RELATIVE position virtual void UpdatePosition(int _x, int _y); }; struct SketchText : public SketchObject @@ -80,6 +82,7 @@ virtual void WriteXml(csString& xml); virtual void Draw(); virtual bool IsHit(int mouseX, int mouseY); + // update the RELATIVE position virtual void UpdatePosition(int _x, int _y); }; struct SketchLine : public SketchObject @@ -100,6 +103,7 @@ virtual void WriteXml(csString& xml); virtual void Draw(); virtual bool IsHit(int mouseX, int mouseY); + // update the RELATIVE position virtual void UpdatePosition(int _x, int _y); }; @@ -111,6 +115,8 @@ csRef<iPAWSDrawable> blackBox; bool editMode; bool mouseDown; + int mouseDownX; // used to calculate the updatePosition diff. this value is updated OnMouseDown + int mouseDownY; csStringArray iconList; int primCount; bool readOnly; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-14 20:26:52
|
Revision: 2048 http://planeshift.svn.sourceforge.net/planeshift/?rev=2048&view=rev Author: heinchen Date: 2008-08-14 20:26:59 +0000 (Thu, 14 Aug 2008) Log Message: ----------- fixed FS#2094 - Sketching: It IS very nice to have some kind of Bezier Curves for sketching Modified Paths: -------------- trunk/data/gui/illumination.xml trunk/docs/history.txt trunk/src/client/gui/pawsilluminationwindow.cpp trunk/src/client/gui/pawsilluminationwindow.h Modified: trunk/data/gui/illumination.xml =================================================================== --- trunk/data/gui/illumination.xml 2008-08-14 19:56:07 UTC (rev 2047) +++ trunk/data/gui/illumination.xml 2008-08-14 20:26:59 UTC (rev 2048) @@ -62,6 +62,11 @@ <bgimage resource="TextTool" /> <eventMouseDown>Ret = SketchWindow:ClickNameTool()</eventMouseDown> </widget> + <widget name="BezierTool" factory="pawsButton" id="113" tooltip="Add Bezier Curve (b)"> + <frame x="158" y="0" width="16" height="16" /> + <bgimage resource="BezierTool" /> + <eventMouseDown>Ret = SketchWindow:ClickBezierTool()</eventMouseDown> + </widget> <widget name="SaveButton" factory="pawsButton" id="111" tooltip="Save (s)"> <frame x="180" y="0" width="16" height="16" /> <bgimage resource="FeatherTool" /> Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-14 19:56:07 UTC (rev 2047) +++ trunk/docs/history.txt 2008-08-14 20:26:59 UTC (rev 2048) @@ -1,6 +1,7 @@ *** 2008-08-14 by Andreas Heinchen - Fix for FS#1971, patch by peeg - Fixed FS#2094, patch by Arerano +- Fixed FS#2095, patches by Arerano and ThomPhoenix *** 2008-08-14 by Mike Gist - Fixed FS#2128, patch from weltall. Modified: trunk/src/client/gui/pawsilluminationwindow.cpp =================================================================== --- trunk/src/client/gui/pawsilluminationwindow.cpp 2008-08-14 19:56:07 UTC (rev 2047) +++ trunk/src/client/gui/pawsilluminationwindow.cpp 2008-08-14 20:26:59 UTC (rev 2048) @@ -61,6 +61,7 @@ FeatherTool = dynamic_cast<pawsWidget*> (FindWidget("FeatherTool")); TextTool = dynamic_cast<pawsWidget*> (FindWidget("TextTool")); LineTool = dynamic_cast<pawsWidget*> (FindWidget("LineTool")); + BezierTool = dynamic_cast<pawsWidget*> (FindWidget("BezierTool")); PlusTool = dynamic_cast<pawsWidget*> (FindWidget("PlusTool")); LeftArrowTool = dynamic_cast<pawsWidget*> (FindWidget("LeftArrowTool")); RightArrowTool = dynamic_cast<pawsWidget*> (FindWidget("RightArrowTool")); @@ -110,6 +111,8 @@ TextTool->Hide(); if(LineTool) LineTool->Hide(); + if(BezierTool) + BezierTool->Hide(); if(PlusTool) PlusTool->Hide(); if(LeftArrowTool) @@ -133,6 +136,8 @@ TextTool->Show(); if(LineTool) LineTool->Show(); + if(BezierTool) + BezierTool->Show(); if(PlusTool) PlusTool->Show(); if(LeftArrowTool) @@ -285,6 +290,11 @@ OnKeyDown(0,'\\',0); return 0.0; } + else if (!strcasecmp(functionName,"ClickBezierTool")) + { + OnKeyDown(0,'b',0); + return 0.0; + } else if (!strcasecmp(functionName,"ClickIconTool")) { OnKeyDown(0,'+',0); @@ -380,6 +390,11 @@ AddSketchLine(); return true; } + else if (key == 'b') + { + AddSketchBezier(); + return true; + } else if (key == 't') { AddSketchText(); @@ -502,6 +517,28 @@ objlist.Push(line); } +void pawsSketchWindow::AddSketchBezier() +{ + if ((int)objlist.GetSize() >= primCount) + { + psSystemMessage sysMsg( 0, MSG_ERROR, PawsManager::GetSingleton().Translate("Your sketch is too complex for you to add more.") ); + sysMsg.FireEvent(); + return; + } + int x = (ScreenFrame().xmax - ScreenFrame().xmin)/2 -50; + int y = (ScreenFrame().ymax - ScreenFrame().ymin)/2 -50; + + // deselect the previous object, if any + if (selectedIndex != SIZET_NOT_FOUND) + { + objlist[selectedIndex]->Select(false); + } + + SketchBezier *bezier = new SketchBezier(x,y, x, y+50, x+50,y+50 , x+50, y,this); + selectedIndex = objlist.Push(bezier); + objlist[selectedIndex]->Select(true); +} + void pawsSketchWindow::AddSketchIcon() { if (iconList.GetSize() == 0) @@ -792,6 +829,8 @@ ; // do nothing else if (type == "ln") obj = new SketchLine; + else if (type == "bc") // bezier curve + obj = new SketchBezier; else { Error2("Illegal sketch op <%s>. Sketch cannot display.",type.GetDataSafe() ); @@ -1093,6 +1132,226 @@ return true; } +bool pawsSketchWindow::SketchBezier::Load(iDocumentNode *node, pawsSketchWindow *parent) +{ + psString pts = node->GetAttributeValue("pts"); + psString num; + + int x0, y0, x1, y1, x2, y2, x3, y3; + pts.GetWordNumber(1,num); + x0 = atoi(num.GetDataSafe()); + pts.GetWordNumber(2,num); + y0 = atoi(num.GetDataSafe()); + pts.GetWordNumber(3,num); + x1 = atoi(num.GetDataSafe()); + pts.GetWordNumber(4,num); + y1 = atoi(num.GetDataSafe()); + pts.GetWordNumber(5,num); + x2 = atoi(num.GetDataSafe()); + pts.GetWordNumber(6,num); + y2 = atoi(num.GetDataSafe()); + pts.GetWordNumber(7,num); + x3 = atoi(num.GetDataSafe()); + pts.GetWordNumber(8,num); + y3 = atoi(num.GetDataSafe()); + + this->parent = parent; + p0p1.parent = parent; + p0p1.x = x0; // point 0 (also start point) + p0p1.y = y0; + p0p1.x2 = x1; // point 1 (control point 1) + p0p1.y2 = y1; + + p0p3.parent = parent; + p0p3.x = x0; // point 0 + p0p3.y = y0; + p0p3.x2 = x3; // point 3 (also end point) + p0p3.y2 = y3; + + p3p2.parent = parent; + p3p2.x2 = x2; // point 3 (also end point) + p3p2.y2 = y2; + p3p2.x = x3; // point 2 (control point 2) + p3p2.y = y3; + + return true; +} + +void pawsSketchWindow::SketchBezier::WriteXml(csString& xml) +{ + csString add; + //x0 y0 x1 y1 x2 y2 x3 y3 + add.Format("<bc pts=\"%d %d %d %d %d %d %d %d\"/>", p0p1.x, p0p1.y, p0p1.x2, p0p1.y2, + p3p2.x2, p3p2.y2, p3p2.x, p3p2.y); + xml += add; +} + +void pawsSketchWindow::SketchBezier::Draw() +{ + iGraphics2D *graphics2D = parent->GetG2D(); + int black = graphics2D->FindRGB( 0,0,0 ); + + if(parent->editMode) + { + if(!this->selected) + { // update selection of lines in case this got delelected; + p0p3.Select(false); + p0p1.Select(false); + p3p2.Select(false); + } + else // we are selected, make sure that the "base control line" is selected, if none other is + { + if(!p0p1.selected && !p0p3.selected && !p3p2.selected) + { + p0p3.Select(true); + } + } + // use nice colours (for easier understanding) for the control lines. + int blue = graphics2D->FindRGB( 0,0,150 ); + int green = graphics2D->FindRGB( 0,150,0 ); + // draws lines and boxes and makes them blink dependant on their selection state + p0p3.Draw(); + p0p1.Draw(); + p3p2.Draw(); + + // draw those "handle lines" which aren't selected in another colour + // main line: blue + if(!p0p3.selected) + { + graphics2D->DrawLine( parent->GetActualWidth(p0p3.x)+parent->ScreenFrame().xmin, + parent->GetActualHeight(p0p3.y)+parent->ScreenFrame().ymin, + parent->GetActualWidth(p0p3.x2)+parent->ScreenFrame().xmin, + parent->GetActualHeight(p0p3.y2)+parent->ScreenFrame().ymin, + blue ); + } + + // Handle 1: green + if(!p0p1.selected) + { + graphics2D->DrawLine( parent->GetActualWidth(p0p1.x)+parent->ScreenFrame().xmin, + parent->GetActualHeight(p0p1.y)+parent->ScreenFrame().ymin, + parent->GetActualWidth(p0p1.x2)+parent->ScreenFrame().xmin, + parent->GetActualHeight(p0p1.y2)+parent->ScreenFrame().ymin, + green ); + } + + // Handle 2: green + if(!p3p2.selected) + { + graphics2D->DrawLine( parent->GetActualWidth(p3p2.x)+parent->ScreenFrame().xmin, + parent->GetActualHeight(p3p2.y)+parent->ScreenFrame().ymin, + parent->GetActualWidth(p3p2.x2)+parent->ScreenFrame().xmin, + parent->GetActualHeight(p3p2.y2)+parent->ScreenFrame().ymin, + green ); + } + } + + // The actual bezier line drawing + int segX, segY, segX1, segY1; + + // no need to compute the first point. + segX = p0p1.x; + segY = p0p1.y; + // skip 0,1,2,3 we use the total array offset, thus *4; +4 + for(int i = 4; i < SKETCHBEZIER_SEGMENTS*4 /*resolution*/; i+=4) + { + // This is how the unoptimized code would look (alike - if we have Math.Pow) + // P(t) = (1-t)^3P0 + 3(1-t)^2tP1 + 3(1-t)t^2P2 + t^3P3 with t running from 0 to 1. + //float t = ((float)i/(float)20); + /*float fsegX = Math.Pow((1-t), 3) *p0p1.x + + 3* t * Math.Pow((1-t), 2) *p0p1.x2 + + 3* Math.Pow(t, 2)*(1-t)*p3p2.x2 + + Math.Pow(t, 3)*p3p2.x; + float fsegY = Math.Pow((1-t), 3) *p0p1.y + + 3* t * Math.Pow((1-t), 2) *p0p1.y2 + + 3* Math.Pow(t, 2)*(1-t)*p3p2.y2 + + Math.Pow(t, 3)*p3p2.y;*/ + + float fsegX = parent->bezierWeights.Get(i) * p0p1.x + + parent->bezierWeights.Get(i+1) * p0p1.x2 + + parent->bezierWeights.Get(i+2) * p3p2.x2 + + parent->bezierWeights.Get(i+3) * p3p2.x; + + float fsegY = parent->bezierWeights.Get(i) * p0p1.y + + parent->bezierWeights.Get(i+1) * p0p1.y2 + + parent->bezierWeights.Get(i+2) * p3p2.y2 + + parent->bezierWeights.Get(i+3) * p3p2.y; + + // this makes sure that we always draw a line from the "previous" calculated point to the newly calculated point + if(i&4) + { + segX1 = (int)(fsegX + 0.5); + segY1 = (int)(fsegY + 0.5); + } + else + { + segX = (int)(fsegX + 0.5); + segY = (int)(fsegY + 0.5); + } + + graphics2D->DrawLine( parent->GetActualWidth(segX)+parent->ScreenFrame().xmin, + parent->GetActualHeight(segY)+parent->ScreenFrame().ymin, + parent->GetActualWidth(segX1)+parent->ScreenFrame().xmin, + parent->GetActualHeight(segY1)+parent->ScreenFrame().ymin, + black ); + } + + // no need to calculate the last point either + if(SKETCHBEZIER_SEGMENTS&1) + { + segX1 = p3p2.x; + segY1 = p3p2.y; + } + else + { + segX = p3p2.x; + segY = p3p2.y; + } + graphics2D->DrawLine( parent->GetActualWidth(segX)+parent->ScreenFrame().xmin, + parent->GetActualHeight(segY)+parent->ScreenFrame().ymin, + parent->GetActualWidth(segX1)+parent->ScreenFrame().xmin, + parent->GetActualHeight(segY1)+parent->ScreenFrame().ymin, + black ); +} + +bool pawsSketchWindow::SketchBezier::IsHit(int mouseX, int mouseY) +{ + p0p3.Select(false); + p0p1.Select(false); + p3p2.Select(false); + + if(p0p3.IsHit(mouseX, mouseY)) + { + p0p3.Select(true); + //p0p3.selected = true; + // this is needed to have the boxes blink. We MUST keep the right order in Draw and UpdatePosition!! + //p0p1.selected = true; + //p0p1.dragMode = 1; + //p3p2.selected = true; + //p3p2.dragMode = 1; + return true; + } + if(p0p1.IsHit(mouseX, mouseY)) + { + p0p1.Select(true); + //p0p1.selected = true; + // for blinking box + //p0p3.selected = true; + //p0p3.dragMode = 1; + return true; + } + if(p3p2.IsHit(mouseX, mouseY)) + { + p3p2.Select(true); + //p3p2.selected = true; + // for blinking box + //p0p3.selected = true; + //p0p3.dragMode = 2; + return true; + } + return false; +} + void pawsSketchWindow::SketchLine::UpdatePosition(int _x, int _y) { int dx, dy, newX, newY, newX2, newY2; @@ -1156,6 +1415,49 @@ } } +void pawsSketchWindow::SketchBezier::UpdatePosition(int _x, int _y) +{ + int xDiff; + int yDiff; + // Error3("SB Update: %d, %d", _x, _y); + if(p0p3.selected) + { + xDiff = p0p3.x; + yDiff = p0p3.y; + p0p3.UpdatePosition(_x, _y); + xDiff -= p0p3.x; + yDiff -= p0p3.y; + p0p1.x = p0p3.x; + p0p1.y = p0p3.y; + p3p2.x = p0p3.x2; + p3p2.y = p0p3.y2; + if(p0p3.dragMode == 0) + { + //p3p2.x2 += xDiff; // interesting rot + //p3p2.y2 += yDiff; + //p0p1.x2 += xDiff; + //p0p1.y2 += yDiff; + + p3p2.x2 -= xDiff; + p3p2.y2 -= yDiff; + p0p1.x2 -= xDiff; + p0p1.y2 -= yDiff; + } + } + else if(p0p1.selected) + { + p0p1.UpdatePosition(_x, _y); + p0p3.x = p0p1.x; + p0p3.y = p0p1.y; + } + else if(p3p2.selected) + { + p3p2.UpdatePosition( _x, _y); + p0p3.x2 = p3p2.x; + p0p3.y2 = p3p2.y; + } +} + void pawsSketchWindow::SketchIcon::UpdatePosition (int _x, int _y){ int dx, dy, newX, newY, newX2, newY2, x2Updated, y2Updated; csRect rect = parent->ScreenFrame(); @@ -1246,3 +1548,33 @@ } return safe; } + + +pawsSketchWindow::BezierWeights::BezierWeights() +{ + // using a single dimensional array to save memory and accelerate the access + precomputedBezierWeights = new float[(SKETCHBEZIER_SEGMENTS+1) * 4]; + for(int i = 0; i <= (SKETCHBEZIER_SEGMENTS * 4); i+=4) + { + // t is a number from 0.0 to 1.0 + // t is used to calculate any given point of a cubic bezier curve, 0.0 gives the start point, 1.0 the end point + // to calculate a point of a bezier curve, you have to use following formula + // Pt is the point of position t, P0 - P3 are the 4 control points. + // Pt = (1-t)^3*P0 + 3*t*((1-t)^2)*P1 + 3*(t^2)*(t-1)*P2 + (t^3)*P3 + // here we calculate everything (but the multiplication with the point) in advance for a given "Bezier Curve" resolution. + // 0 will be the start point, SKETCHBEZIER_SEGMENTS+1 is the end point. (+1 because a line consists of two points. 21 Points = 20 Line segments) + + // t = i / numofSegments + float t = ((float)(i/4) * (float)(1.0f/SKETCHBEZIER_SEGMENTS)); + + precomputedBezierWeights[i] = (1-t)*(1-t)*(1-t); //Math.Pow((1-t), 3); + precomputedBezierWeights[i+1] = 3 * t * ((1-t)*(1-t)); //3* t * Math.Pow((1-t), 2); + precomputedBezierWeights[i+2] = 3 * (t*t) * (1-t); //3* Math.Pow(t, 2)*(1-t); + precomputedBezierWeights[i+3] = t*t*t; //Math.Pow(t, 3); + } +} + +pawsSketchWindow::BezierWeights::~BezierWeights() +{ + delete [] precomputedBezierWeights; +} \ No newline at end of file Modified: trunk/src/client/gui/pawsilluminationwindow.h =================================================================== --- trunk/src/client/gui/pawsilluminationwindow.h 2008-08-14 19:56:07 UTC (rev 2047) +++ trunk/src/client/gui/pawsilluminationwindow.h 2008-08-14 20:26:59 UTC (rev 2048) @@ -23,11 +23,35 @@ #include "paws/pawswidget.h" #include "paws/pawsstringpromptwindow.h" +#define SKETCHBEZIER_SEGMENTS 20 /** * A window that shows a map or picture. */ class pawsSketchWindow : public pawsWidget, public psClientNetSubscriber,public iOnStringEnteredAction { + class BezierWeights + { + private: + float *precomputedBezierWeights; //[SKETCHBEZIER_SEGMENTS+1][4]; + public: + BezierWeights(); + ~BezierWeights(); + + // this is SLOWER than Get(int offset) + inline float Get(int segmentIndex, int controlpointNum) + { + //CS_ASSERT(segmentIndex <= SKETCHBEZIER_SEGMENTS && segmentIndex >= 0); + //CS_ASSERT(controlpointNum >= 0 && controlpointNum <= 3); + return precomputedBezierWeights[segmentIndex * SKETCHBEZIER_SEGMENTS + controlpointNum]; + } + + // returns the precomputed value of "segmentIndex*SKETCHBEZIER_SEGMENTS + controlpointNum" + inline float Get(int offset) + { + //CS_ASSERT(offset <= (SKETCHBEZIER_SEGMENTS+1)*4 && offset >= 0); + return precomputedBezierWeights[offset]; + } + }; struct SketchObject { bool selected; @@ -106,7 +130,57 @@ // update the RELATIVE position virtual void UpdatePosition(int _x, int _y); }; + struct SketchBezier : public SketchObject + { + /* Cubic Bézier Curve + p1 p2 (control points) + / \_ + p0-----------------p3 + 2 lines would actually be enough to handle the bezier curve. + Connecting p0-p1 and p3-p2: However, the usability would suffer since we can't move the "whole line" then. + Connecting p1-p2 and p0-p3: Displaying this doesn't look good and usability suffers. + */ + + //BezierHelper *bezierHelper; + + SketchLine p0p1; + SketchLine p0p3; + SketchLine p3p2; + + SketchBezier(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3, pawsSketchWindow *_parent) + { + this->parent = _parent; + //this->bezierHelper = &_parent->bezierHelper; + + p0p1.parent = _parent; + p0p1.x = x; // point 0 (also start point) + p0p1.y = y; + p0p1.x2 = x1; // point 1 (control point 1) + p0p1.y2 = y1; + + p0p3.parent = _parent; + p0p3.x = x; // point 0 + p0p3.y = y; + p0p3.x2 = x3; // point 3 (also end point) + p0p3.y2 = y3; + + p3p2.parent = _parent; + p3p2.x2 = x2; // point 3 (also end point) + p3p2.y2 = y2; + p3p2.x = x3; // point 2 (control point 2) + p3p2.y = y3; + } + SketchBezier() {}; + virtual ~SketchBezier() {}; + virtual bool Load(iDocumentNode *node, pawsSketchWindow *parent); + virtual void WriteXml(csString& xml); + virtual void Draw(); + virtual bool IsHit(int mouseX, int mouseY); + // update the RELATIVE position + virtual void UpdatePosition(int _x, int _y); + }; + protected: csPDelArray<SketchObject> objlist; size_t selectedIndex; @@ -121,12 +195,14 @@ int primCount; bool readOnly; bool stringPending; + BezierWeights bezierWeights; int frame; // incremented each frame till 10 (to update selection without clicking) pawsWidget* FeatherTool; pawsWidget* TextTool; pawsWidget* LineTool; + pawsWidget* BezierTool; pawsWidget* PlusTool; pawsWidget* LeftArrowTool; pawsWidget* RightArrowTool; @@ -142,6 +218,7 @@ void AddSketchText(); void AddSketchIcon(); void AddSketchLine(); + void AddSketchBezier(); void RemoveSelected(); void NextPrevIcon(int delta); void MoveObject(int dx, int dy); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-14 20:29:14
|
Revision: 2049 http://planeshift.svn.sourceforge.net/planeshift/?rev=2049&view=rev Author: heinchen Date: 2008-08-14 20:29:21 +0000 (Thu, 14 Aug 2008) Log Message: ----------- fixed FS#2140 - exchange window missing scrollbar Modified Paths: -------------- trunk/data/gui/exchange.xml trunk/docs/history.txt Modified: trunk/data/gui/exchange.xml =================================================================== --- trunk/data/gui/exchange.xml 2008-08-14 20:26:59 UTC (rev 2048) +++ trunk/data/gui/exchange.xml 2008-08-14 20:29:21 UTC (rev 2049) @@ -36,7 +36,7 @@ <!-- BULK --> <widget name="OfferingList" factory="pawsListBox" selectable="0"> - <frame x="2" y="5" width="130" height="100" border="no"/> + <frame x="5" y="5" width="130" height="100" border="no"/> <columns height="48" headings="no" > <column width="48" > <widget name="offering_Bulk0" factory="pawsSlot"> @@ -80,7 +80,7 @@ <!-- BULK --> <widget name="ReceivingList" factory="pawsListBox" selectable="0"> - <frame x="32" y="5" width="130" height="100" border="no"/> + <frame x="5" y="5" width="130" height="100" border="no"/> <columns height="48" headings="no" > <column width="48" > <widget name="receiving_Bulk0" factory="pawsSlot"> @@ -98,7 +98,7 @@ </widget> <widget name="ReceivingMoney" factory="pawsMoney" border="yes"> - <frame x="35" y="120" width="100" height="100"/> + <frame x="5" y="120" width="100" height="100"/> <bgimage resource="Standard Background" alpha="255" /> </widget> Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-14 20:26:59 UTC (rev 2048) +++ trunk/docs/history.txt 2008-08-14 20:29:21 UTC (rev 2049) @@ -1,5 +1,5 @@ *** 2008-08-14 by Andreas Heinchen -- Fix for FS#1971, patch by peeg +- Fix for FS#1971, FS#2140 patch by peeg - Fixed FS#2094, patch by Arerano - Fixed FS#2095, patches by Arerano and ThomPhoenix This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <are...@us...> - 2008-08-15 00:54:55
|
Revision: 2050 http://planeshift.svn.sourceforge.net/planeshift/?rev=2050&view=rev Author: aresilek Date: 2008-08-15 00:55:04 +0000 (Fri, 15 Aug 2008) Log Message: ----------- - Added /changeguildleader for GM2+. - DB VER BUMP to 1193 Modified Paths: -------------- trunk/data/help.xml trunk/docs/history.txt trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h trunk/src/server/database/mysql/command_access.sql trunk/src/server/database/mysql/server_options.sql trunk/src/server/database/mysql/upgrade_schema.sql trunk/src/server/psserver.cpp Modified: trunk/data/help.xml =================================================================== --- trunk/data/help.xml 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/data/help.xml 2008-08-15 00:55:04 UTC (rev 2050) @@ -399,6 +399,9 @@ <topic name="/banname">/banname name Bans a name from use in character creation</topic> + <topic name="/changeguildleader">/changeguildleader [new leader] [guildname] + +Change the guilds leader.</topic> <topic name="/changeguildname">/changeguildname Change the selected guilds name.</topic> Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/docs/history.txt 2008-08-15 00:55:04 UTC (rev 2050) @@ -1,3 +1,7 @@ +*** 2008-08-15 by Steven Patrick +- Added /changeguildleader command for GM2+. +- DB VER BUMP to 1193 + *** 2008-08-14 by Andreas Heinchen - Fix for FS#1971, FS#2140 patch by peeg - Fixed FS#2094, patch by Arerano Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/src/server/adminmanager.cpp 2008-08-15 00:55:04 UTC (rev 2050) @@ -401,6 +401,12 @@ newName = words.GetTail(2); return true; } + else if (command == "/changeguildleader") + { + player = words[1]; + target = words.GetTail(2); + return true; + } else if (command == "/petition") { petition = words.GetTail(1); @@ -1224,6 +1230,10 @@ { RenameGuild( me, msg, data, client ); } + else if (data.command == "/changeguildleader") + { + ChangeGuildLeader( me, msg, data, client ); + } else if (data.command == "/banname" ) { BanName( me, msg, data, client ); @@ -6420,6 +6430,61 @@ psserver->GetEventManager()->Broadcast(newNameMsg.msg,NetBase::BC_EVERYONE); } +void AdminManager::ChangeGuildLeader(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client* client) +{ + if (data.target.IsEmpty() || data.player.IsEmpty()) + { + psserver->SendSystemError(me->clientnum, "Syntax: /changeguildleader <new leader> guildname"); + return; + } + + psGuildInfo* guild = CacheManager::GetSingleton().FindGuild(data.target); + if (!guild) + { + psserver->SendSystemError(me->clientnum, "No guild with that name."); + return; + } + + psGuildMember* member = guild->FindMember(data.player.GetData()); + if (!member) + { + psserver->SendSystemError(me->clientnum, "Can't find member %s.", data.player.GetData()); + return; + } + + // Is the leader the target player? + psGuildMember* gleader = guild->FindLeader(); + if (member == gleader) + { + psserver->SendSystemError(me->clientnum, "%s is already the guild leader.", data.player.GetData()); + return; + } + + // Change the leader + // Promote player to leader + if (!guild->UpdateMemberLevel(member, MAX_GUILD_LEVEL)) + { + psserver->SendSystemError(me->clientnum, "SQL Error: %s", db->GetLastError()); + return; + } + // Demote old leader + if (!guild->UpdateMemberLevel(gleader, MAX_GUILD_LEVEL - 1)) + { + psserver->SendSystemError(me->clientnum, "SQL Error: %s", db->GetLastError()); + return; + } + + psserver->GetGuildManager()->ResendGuildData(guild->id); + + psserver->SendSystemOK(me->clientnum,"Guild leader changed to '%s'.", data.player.GetData()); + + csString text; + text.Format("%s has been promoted to '%s' by a GM.", data.player.GetData(), member->guildlevel->title.GetData() ); + psChatMessage guildmsg(me->clientnum,"System",0,text,CHAT_GUILD, false); + if (guildmsg.valid) + psserver->GetChatManager()->SendGuild("server", guild, guildmsg); +} + void AdminManager::Thunder(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client *client) { // Find the sector Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/src/server/adminmanager.h 2008-08-15 00:55:04 UTC (rev 2050) @@ -286,6 +286,7 @@ void SpawnItemInv( MsgEntry* me, psGMSpawnItem& msg, Client *client); bool GetAccount(csString useroracc,Result& resultre); void RenameGuild( MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client* client); + void ChangeGuildLeader( MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client* client); /** Awards experience to a player, by a GM */ void AwardExperience(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData& data, Client* client, Client* target); Modified: trunk/src/server/database/mysql/command_access.sql =================================================================== --- trunk/src/server/database/mysql/command_access.sql 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/src/server/database/mysql/command_access.sql 2008-08-15 00:55:04 UTC (rev 2050) @@ -179,6 +179,11 @@ INSERT INTO command_group_assignment VALUES( "/changeguildname", 24 ); INSERT INTO command_group_assignment VALUES( "/changeguildname", 23 ); INSERT INTO command_group_assignment VALUES( "/changeguildname", 22 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 30 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 25 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 24 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 23 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 22 ); INSERT INTO command_group_assignment VALUES( "/banname", 30 ); INSERT INTO command_group_assignment VALUES( "/banname", 25 ); INSERT INTO command_group_assignment VALUES( "/banname", 24 ); Modified: trunk/src/server/database/mysql/server_options.sql =================================================================== --- trunk/src/server/database/mysql/server_options.sql 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/src/server/database/mysql/server_options.sql 2008-08-15 00:55:04 UTC (rev 2050) @@ -28,7 +28,7 @@ # Dumping data for table server_options # -INSERT INTO `server_options` VALUES ('db_version','1192'); +INSERT INTO `server_options` VALUES ('db_version','1193'); INSERT INTO `server_options` VALUES ('game_time','15:00'); INSERT INTO `server_options` VALUES ('game_date','100-1-1'); INSERT INTO `server_options` VALUES ('standard_motd','This is the message of the day from server_options table.'); Modified: trunk/src/server/database/mysql/upgrade_schema.sql =================================================================== --- trunk/src/server/database/mysql/upgrade_schema.sql 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/src/server/database/mysql/upgrade_schema.sql 2008-08-15 00:55:04 UTC (rev 2050) @@ -948,6 +948,14 @@ INSERT INTO command_group_assignment VALUES( "changenameall", 23 ); UPDATE `server_options` SET `option_value`='1192' WHERE `option_name`='db_version'; +#### 1193 - Steven Patrick - Adding /changeguildleader GM command +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 30 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 25 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 24 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 23 ); +INSERT INTO command_group_assignment VALUES( "/changeguildleader", 22 ); +UPDATE `server_options` SET `option_value`='1193' WHERE `option_name`='db_version'; + # Insert your upgrade before this line. Remember when you set a new db_version # to update the server_options.sql file and update psserver.cpp as well. # This to ensure that everything is working if you use the create_all.sql to Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2008-08-14 20:29:21 UTC (rev 2049) +++ trunk/src/server/psserver.cpp 2008-08-15 00:55:04 UTC (rev 2050) @@ -90,7 +90,7 @@ #include "introductionmanager.h" // Remember to bump this in server_options.sql and add to upgrade_schema.sql! -#define DATABASE_VERSION_STR "1192" +#define DATABASE_VERSION_STR "1193" psCharacterLoader psServer::CharacterLoader; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <are...@us...> - 2008-08-15 02:29:43
|
Revision: 2052 http://planeshift.svn.sourceforge.net/planeshift/?rev=2052&view=rev Author: aresilek Date: 2008-08-15 02:29:53 +0000 (Fri, 15 Aug 2008) Log Message: ----------- - Fixed FS#2142 - possible to change instance of player or npc using slide The target is now slid in their own instance, not the GMs. The target is now informed that he was moved be a GM. Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/adminmanager.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-15 01:08:27 UTC (rev 2051) +++ trunk/docs/history.txt 2008-08-15 02:29:53 UTC (rev 2052) @@ -1,6 +1,9 @@ *** 2008-08-15 by Steven Patrick - Added /changeguildleader command for GM2+. - DB VER BUMP to 1193 +- Fixed FS#2142 - possible to change instance of player or npc using slide + The target is now slid in their own instance, not the GMs. + The target is now informed that he was moved be a GM. *** 2008-08-14 by Andreas Heinchen - Fix for FS#1971, FS#2140 patch by peeg Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-08-15 01:08:27 UTC (rev 2051) +++ trunk/src/server/adminmanager.cpp 2008-08-15 02:29:53 UTC (rev 2052) @@ -3592,13 +3592,16 @@ } // Update the object - if ( !MoveObject(client,target,pos,yrot,sector,client->GetActor()->GetInstance()) ) + if ( !MoveObject(client,target,pos,yrot,sector,target->GetInstance()) ) return; target->UpdateProxList(false); // Update ProxList if needed if (target->GetActorPtr() && client->GetActor() != target->GetActorPtr()) + { psserver->SendSystemInfo(me->clientnum, "Sliding %s...", target->GetName()); + psserver->SendSystemInfo(target->GetClientID(), "You were moved by a GM."); + } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <are...@us...> - 2008-08-15 02:44:52
|
Revision: 2053 http://planeshift.svn.sourceforge.net/planeshift/?rev=2053&view=rev Author: aresilek Date: 2008-08-15 02:45:02 +0000 (Fri, 15 Aug 2008) Log Message: ----------- - Reverted message to target in r2052. Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/adminmanager.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-15 02:29:53 UTC (rev 2052) +++ trunk/docs/history.txt 2008-08-15 02:45:02 UTC (rev 2053) @@ -3,7 +3,6 @@ - DB VER BUMP to 1193 - Fixed FS#2142 - possible to change instance of player or npc using slide The target is now slid in their own instance, not the GMs. - The target is now informed that he was moved be a GM. *** 2008-08-14 by Andreas Heinchen - Fix for FS#1971, FS#2140 patch by peeg Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2008-08-15 02:29:53 UTC (rev 2052) +++ trunk/src/server/adminmanager.cpp 2008-08-15 02:45:02 UTC (rev 2053) @@ -3598,10 +3598,7 @@ target->UpdateProxList(false); // Update ProxList if needed if (target->GetActorPtr() && client->GetActor() != target->GetActorPtr()) - { psserver->SendSystemInfo(me->clientnum, "Sliding %s...", target->GetName()); - psserver->SendSystemInfo(target->GetClientID(), "You were moved by a GM."); - } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-08-15 15:27:42
|
Revision: 2063 http://planeshift.svn.sourceforge.net/planeshift/?rev=2063&view=rev Author: mgist Date: 2008-08-15 15:27:50 +0000 (Fri, 15 Aug 2008) Log Message: ----------- - Small optimisation to the entity labels. Modified Paths: -------------- trunk/src/common/effects/pseffectobjlabel.cpp trunk/src/common/effects/pseffectobjlabel.h Property Changed: ---------------- trunk/ Property changes on: trunk ___________________________________________________________________ Modified: svn:mergeinfo - /personal/Xordan:1745,1812,1894 /trunk:1-1744 + /personal/Xordan:1745,1812,1894,2062 /trunk:1-1744 Modified: trunk/src/common/effects/pseffectobjlabel.cpp =================================================================== --- trunk/src/common/effects/pseffectobjlabel.cpp 2008-08-15 15:24:50 UTC (rev 2062) +++ trunk/src/common/effects/pseffectobjlabel.cpp 2008-08-15 15:27:50 UTC (rev 2063) @@ -104,6 +104,14 @@ csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Attempting to create an effect obj with no material.\n"); return false; } + + material = effectsCollection->FindMaterial(materialName); + if (!material.IsValid()) + { + csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "No material for label mesh: %s\n", materialName.GetData()); + return false; + } + if (!sizeFileName.IsEmpty()) { LoadGlyphs(sizeFileName); @@ -185,13 +193,12 @@ } // setup the material - csRef<iMaterialWrapper> mat = effectsCollection->FindMaterial(materialName); - if (mat) + if(!material) { - fact->SetMaterialWrapper(mat); - } else { - csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "No material for label mesh: %s\n", materialName.GetData()); + return false; } + + fact->SetMaterialWrapper(material); #if 0 facState->SetVertexCount(4); Modified: trunk/src/common/effects/pseffectobjlabel.h =================================================================== --- trunk/src/common/effects/pseffectobjlabel.h 2008-08-15 15:24:50 UTC (rev 2062) +++ trunk/src/common/effects/pseffectobjlabel.h 2008-08-15 15:27:50 UTC (rev 2063) @@ -41,6 +41,8 @@ csRef<iGeneralFactoryState> facState; csRef<iGeneralMeshState> genState; + csRef<iMaterialWrapper> material; + // font csString sizeFileName; float labelwidth; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-15 15:43:49
|
Revision: 2066 http://planeshift.svn.sourceforge.net/planeshift/?rev=2066&view=rev Author: heinchen Date: 2008-08-15 15:43:56 +0000 (Fri, 15 Aug 2008) Log Message: ----------- fixed bug in destruction of gemActors Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/gem.cpp trunk/src/server/gem.h Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-15 15:39:05 UTC (rev 2065) +++ trunk/docs/history.txt 2008-08-15 15:43:56 UTC (rev 2066) @@ -1,3 +1,6 @@ +*** 2008-08-15 by Andreas Heinchen +- fixed bug in destruction of gemActors + *** 2008-08-15 by Steven Patrick - Added /changeguildleader command for GM2+. - DB VER BUMP to 1193 Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-08-15 15:39:05 UTC (rev 2065) +++ trunk/src/server/gem.cpp 2008-08-15 15:43:56 UTC (rev 2066) @@ -222,6 +222,12 @@ Debug3(LOG_CELPERSIST,0,"Actor added to supervisor with EID:%u and PID:%u.\n", actor->GetEntityID(), actor->GetPlayerID()); } +void GEMSupervisor::RemoveActorEntity(gemActor *actor) +{ + actors_by_pid.Delete(actor->GetPlayerID(), actor); + Debug3(LOG_CELPERSIST,0,"Actor removed from supervisor with EID:%u and PID:%u.\n", actor->GetEntityID(), actor->GetPlayerID()); +} + void GEMSupervisor::AddItemEntity(gemItem *item) { items_by_uid.Put(item->GetItem()->GetUID(), item); @@ -236,12 +242,8 @@ entities_by_eid.Delete(which->GetEntityID(), which); Debug3(LOG_CELPERSIST,0,"Entity <%s> removed from supervisor with ID: %d\n", which->GetName(), which->GetEntityID()); - if (which->GetPlayerID()) + if (which->GetItem()) { - actors_by_pid.Delete(which->GetPlayerID(), (gemActor*) which); - } - else if (which->GetItem()) - { items_by_uid.Delete(which->GetItem()->GetUID(), (gemItem*) which); } } @@ -1695,6 +1697,8 @@ // Disconnect while pointers are still valid Disconnect(); + cel->RemoveActorEntity(this); + if (factions) { delete factions; Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-08-15 15:39:05 UTC (rev 2065) +++ trunk/src/server/gem.h 2008-08-15 15:43:56 UTC (rev 2066) @@ -148,6 +148,7 @@ PS_ID CreateEntity(gemObject *obj); void RemoveEntity(gemObject *which); void AddActorEntity(gemActor *actor); + void RemoveActorEntity(gemActor *actor); void AddItemEntity(gemItem *item); void RemoveClientFromLootables(int cnum); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-08-15 17:15:48
|
Revision: 2067 http://planeshift.svn.sourceforge.net/planeshift/?rev=2067&view=rev Author: mgist Date: 2008-08-15 17:15:56 +0000 (Fri, 15 Aug 2008) Log Message: ----------- - Reverted r2063, it doesn't work for some reason. Modified Paths: -------------- trunk/src/common/effects/pseffectobjlabel.cpp trunk/src/common/effects/pseffectobjlabel.h Property Changed: ---------------- trunk/ Property changes on: trunk ___________________________________________________________________ Modified: svn:mergeinfo - /personal/Xordan:1745,1812,1894,2062 /trunk:1-1744 + /personal/Xordan:1745,1812,1894 Modified: trunk/src/common/effects/pseffectobjlabel.cpp =================================================================== --- trunk/src/common/effects/pseffectobjlabel.cpp 2008-08-15 15:43:56 UTC (rev 2066) +++ trunk/src/common/effects/pseffectobjlabel.cpp 2008-08-15 17:15:56 UTC (rev 2067) @@ -104,14 +104,6 @@ csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "Attempting to create an effect obj with no material.\n"); return false; } - - material = effectsCollection->FindMaterial(materialName); - if (!material.IsValid()) - { - csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "No material for label mesh: %s\n", materialName.GetData()); - return false; - } - if (!sizeFileName.IsEmpty()) { LoadGlyphs(sizeFileName); @@ -193,12 +185,13 @@ } // setup the material - if(!material) + csRef<iMaterialWrapper> mat = effectsCollection->FindMaterial(materialName); + if (mat) { - return false; + fact->SetMaterialWrapper(mat); + } else { + csReport(psCSSetup::object_reg, CS_REPORTER_SEVERITY_ERROR, "planeshift_effects", "No material for label mesh: %s\n", materialName.GetData()); } - - fact->SetMaterialWrapper(material); #if 0 facState->SetVertexCount(4); Modified: trunk/src/common/effects/pseffectobjlabel.h =================================================================== --- trunk/src/common/effects/pseffectobjlabel.h 2008-08-15 15:43:56 UTC (rev 2066) +++ trunk/src/common/effects/pseffectobjlabel.h 2008-08-15 17:15:56 UTC (rev 2067) @@ -41,8 +41,6 @@ csRef<iGeneralFactoryState> facState; csRef<iGeneralMeshState> genState; - csRef<iMaterialWrapper> material; - // font csString sizeFileName; float labelwidth; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-15 17:17:14
|
Revision: 2068 http://planeshift.svn.sourceforge.net/planeshift/?rev=2068&view=rev Author: heinchen Date: 2008-08-15 17:17:19 +0000 (Fri, 15 Aug 2008) Log Message: ----------- fixed bug in destruction of gemItems Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/gem.cpp trunk/src/server/gem.h Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-15 17:15:56 UTC (rev 2067) +++ trunk/docs/history.txt 2008-08-15 17:17:19 UTC (rev 2068) @@ -1,5 +1,5 @@ *** 2008-08-15 by Andreas Heinchen -- fixed bug in destruction of gemActors +- fixed bug in destruction of gemActors and gemItems *** 2008-08-15 by Steven Patrick - Added /changeguildleader command for GM2+. Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2008-08-15 17:15:56 UTC (rev 2067) +++ trunk/src/server/gem.cpp 2008-08-15 17:17:19 UTC (rev 2068) @@ -234,6 +234,12 @@ Debug3(LOG_CELPERSIST,0,"Item added to supervisor with EID:%u and UID:%u.\n", item->GetEntityID(), item->GetItem()->GetUID()); } +void GEMSupervisor::RemoveItemEntity(gemItem *item) +{ + items_by_uid.Delete(item->GetItem()->GetUID(), item); + Debug3(LOG_CELPERSIST,0,"Item removed from supervisor with EID:%u and UID:%u.\n", item->GetEntityID(), item->GetItem()->GetUID()); +} + void GEMSupervisor::RemoveEntity(gemObject *which) { if (!which) @@ -242,10 +248,6 @@ entities_by_eid.Delete(which->GetEntityID(), which); Debug3(LOG_CELPERSIST,0,"Entity <%s> removed from supervisor with ID: %d\n", which->GetName(), which->GetEntityID()); - if (which->GetItem()) - { - items_by_uid.Delete(which->GetItem()->GetUID(), (gemItem*) which); - } } void GEMSupervisor::RemoveClientFromLootables(int cnum) @@ -1427,7 +1429,7 @@ ); mesg.Multicast(GetMulticastClients(),clientnum,PROX_LIST_ANY_RANGE); - + cel->RemoveItemEntity(this); } void gemItem::SetPosition(const csVector3& pos,float angle, iSector* sector, INSTANCE_ID instance) Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2008-08-15 17:15:56 UTC (rev 2067) +++ trunk/src/server/gem.h 2008-08-15 17:17:19 UTC (rev 2068) @@ -150,6 +150,7 @@ void AddActorEntity(gemActor *actor); void RemoveActorEntity(gemActor *actor); void AddItemEntity(gemItem *item); + void RemoveItemEntity(gemItem *item); void RemoveClientFromLootables(int cnum); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <are...@us...> - 2008-08-17 04:18:46
|
Revision: 2075 http://planeshift.svn.sourceforge.net/planeshift/?rev=2075&view=rev Author: aresilek Date: 2008-08-17 04:18:56 +0000 (Sun, 17 Aug 2008) Log Message: ----------- - Changed white labels (invisible) to override guild and group colour labels. Modified Paths: -------------- trunk/docs/history.txt trunk/src/client/entitylabels.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-16 16:58:34 UTC (rev 2074) +++ trunk/docs/history.txt 2008-08-17 04:18:56 UTC (rev 2075) @@ -1,3 +1,6 @@ +*** 2008-08-17 by Steven Patrick +- Changed white labels (invisible) to override guild and group colour labels. + *** 2008-08-15 by Andreas Heinchen - fixed bug in destruction of gemActors and gemItems Modified: trunk/src/client/entitylabels.cpp =================================================================== --- trunk/src/client/entitylabels.cpp 2008-08-16 16:58:34 UTC (rev 2074) +++ trunk/src/client/entitylabels.cpp 2008-08-17 04:18:56 UTC (rev 2075) @@ -162,46 +162,36 @@ int colour = 0xff0000; // Default color, on inanimate objects if ( object->IsAlive() ) { - int flags = object->Flags(); - bool invisible = flags & psPersistActor::INVISIBLE; - - if ( invisible ) + int type = object->GetMasqueradeType(); + if (type > 26) + type = 26; + + switch ( type ) { - colour = 0xffffff; - } - else - { - int type = object->GetMasqueradeType(); - if (type > 26) - type = 26; + case 0: // player + colour = 0x00ff00; + break; - switch ( type ) - { - case 0: // player - colour = 0x00ff00; - break; + case -1: // NPC + colour = 0x00ffff; + break; - case -1: // NPC - colour = 0x00ffff; - break; + default: + case 21: // GM1 or unknown group + colour = 0x008000; + break; - default: - case 21: // GM1 or unknown group - colour = 0x008000; - break; + case 22: + case 23: + case 24: + case 25: // GM2-5 + colour = 0xffff80; + break; - case 22: - case 23: - case 24: - case 25: // GM2-5 - colour = 0xffff80; - break; - - case 26: // dev char - colour = 0xff8080; - break; - } - } + case 26: // dev char + colour = 0xff8080; + break; + } } // Is our object an actor? @@ -211,6 +201,15 @@ if (actor && actor->IsGroupedWith(celClient->GetMainPlayer())) colour = 0x0080ff; + // White colour labels for invisible objects should overide all + int flags = object->Flags(); + bool invisible = flags & psPersistActor::INVISIBLE; + + if ( invisible ) + { + colour = 0xffffff; + } + psEffectTextRow nameRow; psEffectTextRow guildRow; @@ -229,7 +228,7 @@ if ( guild.Length() ) { // If same guild, indicate with color - if (guild == guild2) + if (guild == guild2 && !invisible) colour = 0xf6dfa6; guildRow.text = "<" + guild + ">"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-18 11:08:12
|
Revision: 2077 http://planeshift.svn.sourceforge.net/planeshift/?rev=2077&view=rev Author: heinchen Date: 2008-08-18 11:08:21 +0000 (Mon, 18 Aug 2008) Log Message: ----------- fixed FS#2123 - [pawstextwrap] cursor placement upon selecting with the mouse slightly off Modified Paths: -------------- trunk/docs/history.txt trunk/src/common/paws/pawstextwrap.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-17 14:15:11 UTC (rev 2076) +++ trunk/docs/history.txt 2008-08-18 11:08:21 UTC (rev 2077) @@ -1,3 +1,6 @@ +*** 2008-08-15 by Andreas Heinchen +- Fixed FS#2123, patch by weltall + *** 2008-08-17 by Steven Patrick - Changed white labels (invisible) to override guild and group colour labels. Modified: trunk/src/common/paws/pawstextwrap.cpp =================================================================== --- trunk/src/common/paws/pawstextwrap.cpp 2008-08-17 14:15:11 UTC (rev 2076) +++ trunk/src/common/paws/pawstextwrap.cpp 2008-08-18 11:08:21 UTC (rev 2077) @@ -309,7 +309,7 @@ void pawsMultilineEditTextBox::CalcMouseClick( int x, int y, size_t &cursorLine, size_t &cursorChar) { // Adjust x to be relative to the text box - x -= (screenFrame.xmin+4); + x -= screenFrame.xmin; //Force the cursor to blink blink = true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-18 12:46:09
|
Revision: 2078 http://planeshift.svn.sourceforge.net/planeshift/?rev=2078&view=rev Author: heinchen Date: 2008-08-18 12:46:18 +0000 (Mon, 18 Aug 2008) Log Message: ----------- more messages when attacks are stopped Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/combatmanager.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-18 11:08:21 UTC (rev 2077) +++ trunk/docs/history.txt 2008-08-18 12:46:18 UTC (rev 2078) @@ -1,5 +1,6 @@ *** 2008-08-15 by Andreas Heinchen - Fixed FS#2123, patch by weltall +- Added messages in combat manager to see why attacks are stopped *** 2008-08-17 by Steven Patrick - Changed white labels (invisible) to override guild and group colour labels. Modified: trunk/src/server/combatmanager.cpp =================================================================== --- trunk/src/server/combatmanager.cpp 2008-08-18 11:08:21 UTC (rev 2077) +++ trunk/src/server/combatmanager.cpp 2008-08-18 12:46:18 UTC (rev 2078) @@ -734,7 +734,10 @@ bool skipThisRound = false; if (!event->GetAttacker() || !event->GetTarget()) // disconnected and deleted + { + psserver->SendSystemError(event->AttackerCID, "Combat stopped as one participant logged of."); return; + } gemActor *gemAttacker = dynamic_cast<gemActor*> ((gemObject *) event->attacker); gemActor *gemTarget = dynamic_cast<gemActor*> ((gemObject *) event->target); @@ -742,18 +745,35 @@ attacker_data=event->GetAttackerData(); target_data=event->GetTargetData(); - // If the attacker is no longer in attack mode or target is dead, abort. - if (attacker_data->GetMode() != PSCHARACTER_MODE_COMBAT || !gemTarget->IsAlive() ) + // If the attacker is no longer in attack mode abort. + if (attacker_data->GetMode() != PSCHARACTER_MODE_COMBAT) + { + psserver->SendSystemError(event->AttackerCID, + "Combat stopped as you left combat mode."); return; - + } + + // If target is dead, abort. + if (!gemTarget->IsAlive() ) + { + psserver->SendSystemResult(event->AttackerCID, "Combat stopped as one participant logged of."); + return; + } + // If the slot is no longer attackable, abort if (!attacker_data->Inventory().CanItemAttack(event->GetWeaponSlot())) + { + psserver->SendSystemError(event->AttackerCID, "Combat stopped as you have no longer an attackable item equipped."); return; - + } + // If the slot next attack time is not yet up, abort (another event sequence should have been started) if (attacker_data->GetSlotNextAttackTime(event->GetWeaponSlot()) > csGetTicks()) + { + psserver->SendSystemError(event->AttackerCID, "Combat stopped as you have no longer an item to attack equipped."); return; - + } + psItem* weapon = attacker_data->Inventory().GetEffectiveWeaponInSlot(event->GetWeaponSlot()); // weapon became unwieldable @@ -798,14 +818,20 @@ // If the target has changed, abort (assume another combat event has started since we are still in attack mode) if (gemTarget != attacker_client->GetTargetObject()) + { + psserver->SendSystemError(event->AttackerCID, "Target changed."); return; + } } else { // Check if the npc's target has changed (if it has, then assume another combat event has started.) gemNPC* npcAttacker = dynamic_cast<gemNPC*>(gemAttacker); if (npcAttacker && npcAttacker->GetTarget() != gemTarget) + { + psserver->SendSystemError(event->AttackerCID, "NPC's target changed."); return; + } } if (attacker_data->IsSpellCasting()) @@ -907,6 +933,10 @@ // CPrintf(CON_DEBUG, "Queueing Slot %d for %s's next combat event.\n",event->GetWeaponSlot(), event->attacker->GetName() ); QueueNextEvent(event); } + else + { + psserver->SendSystemError(event->AttackerCID, "Item %s is not a auto attack item.",attacker_data->Inventory().GetEffectiveWeaponInSlot(event->GetWeaponSlot())->GetName()); + } // else // CPrintf(CON_DEBUG, "Slot %d for %s not an auto-attack slot.\n",event->GetWeaponSlot(), event->attacker->GetName() ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-18 23:09:01
|
Revision: 2082 http://planeshift.svn.sourceforge.net/planeshift/?rev=2082&view=rev Author: heinchen Date: 2008-08-18 23:09:09 +0000 (Mon, 18 Aug 2008) Log Message: ----------- Added check against overflow for quit command Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/command.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-18 13:11:14 UTC (rev 2081) +++ trunk/docs/history.txt 2008-08-18 23:09:09 UTC (rev 2082) @@ -1,6 +1,7 @@ -*** 2008-08-15 by Andreas Heinchen +*** 2008-08-19 by Andreas Heinchen - Fixed FS#2123, patch by weltall - Added messages in combat manager to see why attacks are stopped +- Added check against overlows in quit command, patch by weltall *** 2008-08-17 by Steven Patrick - Changed white labels (invisible) to override guild and group colour labels. Modified: trunk/src/server/command.cpp =================================================================== --- trunk/src/server/command.cpp 2008-08-18 13:11:14 UTC (rev 2081) +++ trunk/src/server/command.cpp 2008-08-18 23:09:09 UTC (rev 2082) @@ -158,6 +158,12 @@ uint quit_delay = atoi(arg); //if the user passed a number we will read it if (quit_delay) //we have an argument > 0 so let's put an event for server shut down { + if(quit_delay > pow(256,sizeof(csTicks))/60/1000) + { //input value is too high for the event manager so we have to avoid it + //This value is about 71500 minutes commonly and it's calculated from the csticks size + CPrintf(CON_CMDOUTPUT, "The specified quit time is too high. Try with a lower value.\n"); + return 0; + } if(quit_delay < 5) com_lock(NULL); //we got less than 5 minutes for shut down so let's lock the server //immediately This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-19 15:48:56
|
Revision: 2085 http://planeshift.svn.sourceforge.net/planeshift/?rev=2085&view=rev Author: heinchen Date: 2008-08-19 15:49:06 +0000 (Tue, 19 Aug 2008) Log Message: ----------- removing unused var Modified Paths: -------------- trunk/docs/history.txt trunk/src/common/util/eventmanager.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-19 15:30:54 UTC (rev 2084) +++ trunk/docs/history.txt 2008-08-19 15:49:06 UTC (rev 2085) @@ -1,4 +1,7 @@ *** 2008-08-19 by Andreas Heinchen +- removed unused var + +*** 2008-08-18 by Andreas Heinchen - Fixed FS#2123, patch by weltall - Added messages in combat manager to see why attacks are stopped - Added check against overlows in quit command, patch by weltall Modified: trunk/src/common/util/eventmanager.cpp =================================================================== --- trunk/src/common/util/eventmanager.cpp 2008-08-19 15:30:54 UTC (rev 2084) +++ trunk/src/common/util/eventmanager.cpp 2008-08-19 15:49:06 UTC (rev 2085) @@ -65,7 +65,6 @@ { csTicks now = csGetTicks(); - static int lastticks; static int lastid; psGameEvent *event = NULL; @@ -111,7 +110,6 @@ CPrintf(CON_DEBUG, "Event %d is being processed more than once at time %d!\n",event->id,event->triggerticks); } lastid = event->id; - lastticks = event->triggerticks; delete event; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-19 17:12:05
|
Revision: 2086 http://planeshift.svn.sourceforge.net/planeshift/?rev=2086&view=rev Author: heinchen Date: 2008-08-19 17:12:13 +0000 (Tue, 19 Aug 2008) Log Message: ----------- additional sanity checks for event manager Modified Paths: -------------- trunk/docs/history.txt trunk/src/common/util/eventmanager.cpp trunk/src/common/util/eventmanager.h Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-19 15:49:06 UTC (rev 2085) +++ trunk/docs/history.txt 2008-08-19 17:12:13 UTC (rev 2086) @@ -1,5 +1,6 @@ *** 2008-08-19 by Andreas Heinchen - removed unused var +- added some sanity checks to event manager *** 2008-08-18 by Andreas Heinchen - Fixed FS#2123, patch by weltall Modified: trunk/src/common/util/eventmanager.cpp =================================================================== --- trunk/src/common/util/eventmanager.cpp 2008-08-19 15:49:06 UTC (rev 2085) +++ trunk/src/common/util/eventmanager.cpp 2008-08-19 17:12:13 UTC (rev 2086) @@ -38,6 +38,7 @@ // Setting up the static pointer in psGameEvent. Used so // that an event can be fired without needing to look up // the event manager first. + lastTick = 0; psGameEvent::eventmanager = this; } @@ -56,6 +57,17 @@ // This inserts the event into the priority queue, sorted by timestamp eventqueue.Insert(event); + + /*check if events are inserted late*/ + if (event->triggerticks < lastTick) + { + // yelp and adjust lastTick to avoid wrong warning + CPrintf( + CON_DEBUG, + "Event %d scheduled at %d is being inserted late. Last processed event was scheduled for %d.\n", + event->id, event->triggerticks, lastTick); + lastTick = event->triggerticks; + } } // Process events at least every 250 tick @@ -84,7 +96,23 @@ break; } eventqueue.DeleteMin(); + + /*check if events arrive in order*/ + if (event->triggerticks < lastTick) + { + /* this should not happen at all */ + CPrintf( + CON_DEBUG, + "Event %d scheduled at %d is being processed out of order at time %d! Last processed event was scheduled for %d.\n", + event->id, event->triggerticks, now, lastTick); + } + else + { + lastTick = event->triggerticks; + } + } + csTicks start = csGetTicks(); Modified: trunk/src/common/util/eventmanager.h =================================================================== --- trunk/src/common/util/eventmanager.h 2008-08-19 15:49:06 UTC (rev 2085) +++ trunk/src/common/util/eventmanager.h 2008-08-19 17:12:13 UTC (rev 2086) @@ -42,6 +42,8 @@ /** thread main loop */ virtual void Run (); + csTicks lastTick; + public: EventManager(); virtual ~EventManager(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-20 16:38:26
|
Revision: 2090 http://planeshift.svn.sourceforge.net/planeshift/?rev=2090&view=rev Author: heinchen Date: 2008-08-20 16:38:34 +0000 (Wed, 20 Aug 2008) Log Message: ----------- FS#1630 - Sacks container viewable without buying from NPC Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/psserverchar.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-20 16:16:28 UTC (rev 2089) +++ trunk/docs/history.txt 2008-08-20 16:38:34 UTC (rev 2090) @@ -1,3 +1,6 @@ +*** 2008-08-20 by Andreas Heinchen +- fixed FS#1630, patch by peeg + *** 2008-08-19 by Andreas Heinchen - removed unused var - added some sanity checks to event manager Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2008-08-20 16:16:28 UTC (rev 2089) +++ trunk/src/server/bulkobjects/psitem.cpp 2008-08-20 16:38:34 UTC (rev 2090) @@ -2506,6 +2506,12 @@ itemInfo += armor_type; } + // Item is a container + if(GetIsContainer()) + { + itemInfo += csString().Format("\nCapacity: %d", GetContainerMaxSize()); + } + if (strcmp(GetDescription(),"0") != 0) { itemInfo += "\n\nDescription: "; Modified: trunk/src/server/psserverchar.cpp =================================================================== --- trunk/src/server/psserverchar.cpp 2008-08-20 16:16:28 UTC (rev 2089) +++ trunk/src/server/psserverchar.cpp 2008-08-20 16:38:34 UTC (rev 2090) @@ -1044,19 +1044,7 @@ return; } - // check for container items - if (item->GetIsContainer()) - { - // FIXME: I don't think you want to open the container window - // when buying an empty container. We also don't want - // to allow selling non-empty containers...they probaly - // shouldn't even appear in the list... - item->SendContainerContents(client); - } - else - { - item->SendItemDescription(client); - } + item->SendItemDescription(client); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-21 09:21:34
|
Revision: 2091 http://planeshift.svn.sourceforge.net/planeshift/?rev=2091&view=rev Author: heinchen Date: 2008-08-21 09:21:43 +0000 (Thu, 21 Aug 2008) Log Message: ----------- fixed FS#2125(Client crash with petition management buttons) and FS#2133(Can't use /show_gm if your label resembles an NPC) Modified Paths: -------------- trunk/docs/history.txt trunk/src/client/gui/pawspetitiongmwindow.cpp trunk/src/client/pscelclient.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-20 16:38:34 UTC (rev 2090) +++ trunk/docs/history.txt 2008-08-21 09:21:43 UTC (rev 2091) @@ -1,3 +1,7 @@ +*** 2008-08-21 by Andreas Heinchen +- fixed FS#2125, patch by weltall +- fixed FS#2133 + *** 2008-08-20 by Andreas Heinchen - fixed FS#1630, patch by peeg Modified: trunk/src/client/gui/pawspetitiongmwindow.cpp =================================================================== --- trunk/src/client/gui/pawspetitiongmwindow.cpp 2008-08-20 16:38:34 UTC (rev 2090) +++ trunk/src/client/gui/pawspetitiongmwindow.cpp 2008-08-21 09:21:43 UTC (rev 2091) @@ -567,7 +567,7 @@ selectedPet.status = petitionList->GetTextCellValue(selRow, PGMCOL_STATUS); selectedPet.created = petitionList->GetTextCellValue(selRow, PGMCOL_CREATED); selectedPet.petition = petitionList->GetTextCellValue(selRow, PGMCOL_PETITION); - selectedPet.online = petitionList->GetTextCellValue(selRow, PGMCOL_ONLINE) != 0; + selectedPet.online = petitionList->GetTextCellValue(selRow, PGMCOL_ONLINE) == "yes"; } else { Modified: trunk/src/client/pscelclient.cpp =================================================================== --- trunk/src/client/pscelclient.cpp 2008-08-20 16:38:34 UTC (rev 2090) +++ trunk/src/client/pscelclient.cpp 2008-08-21 09:21:43 UTC (rev 2091) @@ -312,7 +312,7 @@ // Update equipment list local_player->equipment = mesg.equipment; - local_player->type = mesg.masqueradeType; + local_player->type = mesg.type; if (mesg.factname != local_player->GetFactName()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-21 16:21:46
|
Revision: 2093 http://planeshift.svn.sourceforge.net/planeshift/?rev=2093&view=rev Author: heinchen Date: 2008-08-21 15:42:04 +0000 (Thu, 21 Aug 2008) Log Message: ----------- changed initialization to get less false positives Modified Paths: -------------- trunk/docs/history.txt trunk/src/server/netmanager.cpp trunk/src/server/netmanager.h trunk/src/server/psserver.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-21 11:44:37 UTC (rev 2092) +++ trunk/docs/history.txt 2008-08-21 15:42:04 UTC (rev 2093) @@ -1,6 +1,7 @@ *** 2008-08-21 by Andreas Heinchen - fixed FS#2125, patch by weltall - fixed FS#2133 +- moved construction of netmanager into the netmanaging thread to avoid false positives in valgrind's helgrind *** 2008-08-20 by Andreas Heinchen - fixed FS#1630, patch by peeg Modified: trunk/src/server/netmanager.cpp =================================================================== --- trunk/src/server/netmanager.cpp 2008-08-21 11:44:37 UTC (rev 2092) +++ trunk/src/server/netmanager.cpp 2008-08-21 15:42:04 UTC (rev 2093) @@ -54,9 +54,10 @@ // Redisplay network server stats every 60 seconds #define STATDISPLAYCHECK 60000 -NetManager::NetManager() +NetManager::NetManager(csRef<CS::Threading::Thread> _thread) : NetBase (1000),stop_network(false) { + thread=_thread; port=0; } @@ -80,15 +81,74 @@ if (!clients.Initialize()) return false; - thread.AttachNew( new CS::Threading::Thread(this, true) ); - if (!thread->IsRunning()) - return false; - SetMsgStrings(CacheManager::GetSingleton().GetMsgStrings()); return true; } +class ServerStarter : public CS::Threading::Runnable +{ +public: + csRef<NetManager> netManager; + csRef<CS::Threading::Thread> thread; + CS::Threading::Mutex doneMutex; + CS::Threading::Condition initDone; + int client_firstmsg; + int npcclient_firstmsg; + int timeout; + + + ServerStarter(int _client_firstmsg, int _npcclient_firstmsg, int _timeout) + { + client_firstmsg = _client_firstmsg; + npcclient_firstmsg = _npcclient_firstmsg; + timeout = _timeout; + } + + void Run() + { + { + CS::Threading::MutexScopedLock lock (doneMutex); + // construct the netManager is its own thread to avoid wrong warnings of dynamic thread checking via valgrind + netManager.AttachNew(new NetManager(thread)); + if (!netManager->Initialize(client_firstmsg, npcclient_firstmsg, + timeout)) + { + Error1 ("Network thread initialization failed!\nIs there already a server running?"); + delete netManager; + netManager = NULL; + initDone.NotifyAll(); + return; + } + initDone.NotifyAll(); + } + + /* run the network loop */ + netManager->Run(); + } +}; + +NetManager* NetManager::Create(int client_firstmsg, int npcclient_firstmsg, int timeout) +{ + csRef<ServerStarter> serverStarter; + serverStarter.AttachNew (new ServerStarter(client_firstmsg, npcclient_firstmsg, timeout)); + csRef<CS::Threading::Thread> thread; + thread.AttachNew (new CS::Threading::Thread (serverStarter)); + serverStarter->thread = thread; + thread->Start(); + + if (!thread->IsRunning()) { + return NULL; + } + + // wait for initialization to be finished + { + CS::Threading::MutexScopedLock lock (serverStarter->doneMutex); + serverStarter->initDone.Wait(serverStarter->doneMutex); + } + return serverStarter->netManager; +} + bool NetManager::HandleUnknownClient (LPSOCKADDR_IN addr, MsgEntry* me) { psMessageBytes* msg = me->bytes; Modified: trunk/src/server/netmanager.h =================================================================== --- trunk/src/server/netmanager.h 2008-08-21 11:44:37 UTC (rev 2092) +++ trunk/src/server/netmanager.h 2008-08-21 15:42:04 UTC (rev 2093) @@ -45,7 +45,7 @@ class NetManager : public NetBase, public CS::Threading::Runnable { public: - NetManager(); + NetManager(csRef<CS::Threading::Thread> _thread); ~NetManager(); /** Initialize the network thread. @@ -62,6 +62,8 @@ * @return Returns success or faliure for initializing. */ bool Initialize(int client_firstmsg, int npcclient_firstmsg, int timeout=15000); + + static NetManager* Create(int client_firstmsg, int npcclient_firstmsg, int timeout=15000); /** This broadcasts the same msg out to a bunch of Clients. * Which clients recieve this message, depend on the scope.DON'T use this @@ -133,6 +135,14 @@ */ virtual bool SendMessage (MsgEntry* me); + /** This is the main thread function. + * If it hasn't been initialized it waits until the server is ready to go + * (i.e. is initialized) if so then it sits in a loop where it calls + * NetBase::ProcessNetwork() and also checks all the dead links. This + * method also calculates the data transfer rate. + */ + void Run (); + protected: /** Returns a NetManager::Connection from the given IP address. @@ -173,23 +183,6 @@ */ void CheckResendPkts(void); - /** This is the main thread function. - * If it hasn't been initialized it waits until the server is ready to go - * (i.e. is initialized) if so then it sits in a loop where it calls - * NetBase::ProcessNetwork() and also checks all the dead links. This - * method also calculates the data transfer rate. - */ - void Run (); - - - // These 2 are stupid defs in csRunnable which aren't used anyway - virtual void IncRef () - { } - virtual void DecRef () - { } - - virtual int GetRefCount() { return 1; } - csRef<CS::Threading::Thread> thread; /// list of connected clients Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2008-08-21 11:44:37 UTC (rev 2092) +++ trunk/src/server/psserver.cpp 2008-08-21 15:42:04 UTC (rev 2093) @@ -348,13 +348,9 @@ // Start Network Thread - serverthread=new NetManager; - if (!serverthread->Initialize(MSGTYPE_PREAUTHENTICATE,MSGTYPE_NPCAUTHENT)) + serverthread=NetManager::Create(MSGTYPE_PREAUTHENTICATE,MSGTYPE_NPCAUTHENT); + if (!serverthread) { - Error1 ("Network thread initialization failed!\n"); - Error1 ("Is there already a server running?\n"); - delete serverthread; - serverthread = NULL; return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hei...@us...> - 2008-08-21 19:52:47
|
Revision: 2095 http://planeshift.svn.sourceforge.net/planeshift/?rev=2095&view=rev Author: heinchen Date: 2008-08-21 19:52:56 +0000 (Thu, 21 Aug 2008) Log Message: ----------- changed initialization of event manager to get less false positives Modified Paths: -------------- trunk/docs/history.txt trunk/src/common/util/eventmanager.cpp trunk/src/common/util/eventmanager.h trunk/src/server/netmanager.cpp trunk/src/server/psserver.cpp Modified: trunk/docs/history.txt =================================================================== --- trunk/docs/history.txt 2008-08-21 18:54:04 UTC (rev 2094) +++ trunk/docs/history.txt 2008-08-21 19:52:56 UTC (rev 2095) @@ -1,7 +1,7 @@ *** 2008-08-21 by Andreas Heinchen - fixed FS#2125, patch by weltall - fixed FS#2133 -- moved construction of netmanager into the netmanaging thread to avoid false positives in valgrind's helgrind +- moved construction of netmanager/eventmanager into the respective thread to avoid false positives in valgrind's helgrind *** 2008-08-20 by Andreas Heinchen - fixed FS#1630, patch by peeg Modified: trunk/src/common/util/eventmanager.cpp =================================================================== --- trunk/src/common/util/eventmanager.cpp 2008-08-21 18:54:04 UTC (rev 2094) +++ trunk/src/common/util/eventmanager.cpp 2008-08-21 19:52:56 UTC (rev 2095) @@ -33,6 +33,16 @@ /*---------------------------------------------------------------------------*/ +EventManager::EventManager(csRef<CS::Threading::Thread> _thread) { + // Setting up the static pointer in psGameEvent. Used so + // that an event can be fired without needing to look up + // the event manager first. + lastTick = 0; + psGameEvent::eventmanager = this; + + thread = _thread; +} + EventManager::EventManager() { // Setting up the static pointer in psGameEvent. Used so @@ -51,6 +61,68 @@ } } + +class ServerStarter : public CS::Threading::Runnable +{ +public: + csRef<EventManager> eventManager; + csRef<CS::Threading::Thread> thread; + NetBase* netBase; + CS::Threading::Mutex doneMutex; + CS::Threading::Condition initDone; + + int queuelen; + + bool success; + + ServerStarter(NetBase* _netBase, int _queuelen) + { + netBase = _netBase; + queuelen = _queuelen; + } + + void Run() + { + { + CS::Threading::MutexScopedLock lock (doneMutex); + // construct the netManager is its own thread to avoid wrong warnings of dynamic thread checking via valgrind + eventManager.AttachNew(new EventManager(thread)); + if (!eventManager->Initialize(netBase, queuelen)) + { + success = false; + initDone.NotifyAll(); + return; + } + success = true; + initDone.NotifyAll(); + } + + /* run the network loop */ + eventManager->Run(); + } +}; + + + +csRef<EventManager> EventManager::Create(NetBase* netBase, int queuelen) +{ + csRef<ServerStarter> serverStarter; + serverStarter.AttachNew (new ServerStarter(netBase, queuelen)); + csRef<CS::Threading::Thread> thread; + thread.AttachNew (new CS::Threading::Thread (serverStarter)); + serverStarter->thread = thread; + // wait for initialization to be finished + { + CS::Threading::MutexScopedLock lock (serverStarter->doneMutex); + thread->Start(); + if (!thread->IsRunning()) { + return NULL; + } + serverStarter->initDone.Wait(serverStarter->doneMutex); + } + return serverStarter->eventManager; +} + void EventManager::Push(psGameEvent *event) { CS::Threading::RecursiveMutexScopedLock lock(mutex); Modified: trunk/src/common/util/eventmanager.h =================================================================== --- trunk/src/common/util/eventmanager.h 2008-08-21 18:54:04 UTC (rev 2094) +++ trunk/src/common/util/eventmanager.h 2008-08-21 19:52:56 UTC (rev 2095) @@ -39,15 +39,18 @@ CS::Threading::Mutex runmutex; int runstate; - /** thread main loop */ - virtual void Run (); - csTicks lastTick; public: + EventManager(csRef<CS::Threading::Thread> _thread); EventManager(); virtual ~EventManager(); + /** thread main loop */ + virtual void Run (); + + static csRef<EventManager> Create(NetBase* netBase, int queuelen); + /// Add new event to scheduler queue. void Push(psGameEvent *event); Modified: trunk/src/server/netmanager.cpp =================================================================== --- trunk/src/server/netmanager.cpp 2008-08-21 18:54:04 UTC (rev 2094) +++ trunk/src/server/netmanager.cpp 2008-08-21 19:52:56 UTC (rev 2095) @@ -86,7 +86,7 @@ return true; } -class ServerStarter : public CS::Threading::Runnable +class NetManagerStarter : public CS::Threading::Runnable { public: csRef<NetManager> netManager; @@ -98,7 +98,7 @@ int timeout; - ServerStarter(int _client_firstmsg, int _npcclient_firstmsg, int _timeout) + NetManagerStarter(int _client_firstmsg, int _npcclient_firstmsg, int _timeout) { client_firstmsg = _client_firstmsg; npcclient_firstmsg = _npcclient_firstmsg; @@ -130,24 +130,24 @@ NetManager* NetManager::Create(int client_firstmsg, int npcclient_firstmsg, int timeout) { - csRef<ServerStarter> serverStarter; - serverStarter.AttachNew (new ServerStarter(client_firstmsg, npcclient_firstmsg, timeout)); + csRef<NetManagerStarter> netManagerStarter; + netManagerStarter.AttachNew (new NetManagerStarter(client_firstmsg, npcclient_firstmsg, timeout)); csRef<CS::Threading::Thread> thread; - thread.AttachNew (new CS::Threading::Thread (serverStarter)); - serverStarter->thread = thread; + thread.AttachNew (new CS::Threading::Thread (netManagerStarter)); + netManagerStarter->thread = thread; // wait for initialization to be finished { - CS::Threading::MutexScopedLock lock (serverStarter->doneMutex); + CS::Threading::MutexScopedLock lock (netManagerStarter->doneMutex); thread->Start(); if (!thread->IsRunning()) { return NULL; } - serverStarter->initDone.Wait(serverStarter->doneMutex); + netManagerStarter->initDone.Wait(netManagerStarter->doneMutex); } - return serverStarter->netManager; + return netManagerStarter->netManager; } bool NetManager::HandleUnknownClient (LPSOCKADDR_IN addr, MsgEntry* me) Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2008-08-21 18:54:04 UTC (rev 2094) +++ trunk/src/server/psserver.cpp 2008-08-21 19:52:56 UTC (rev 2095) @@ -375,16 +375,13 @@ // both messages and events. For backward compablility // we still store two points. But they are one object // and one thread. - eventmanager = csPtr<EventManager>( new EventManager ); + eventmanager = EventManager::Create(serverthread, 1000); + if (!eventmanager) + return false; // This gives access to msghandler to all message types psMessageCracker::msghandler = eventmanager; - if (!eventmanager->Initialize(serverthread, 1000)) - return false; // Attach to incoming messages. - if (!eventmanager->StartThread() ) - return false; - Debug1(LOG_STARTUP,0,"Started Event Manager Thread\n"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |