Red Chip Händler [Bug?]

08/01/2013 01:40 Ryunat#1
Huhu Community,
mein Problem:

Wenn ich beim Red Chip Händler etwas für 30k Chips kaufe geht es.
Jedoch stelle ich den Preis auf 40k oder 50k etc. ein zieht er nur 7233 ab und gibt mir das Item o.o

Hat jemand ne Idee warum das so ist? ._.

Hab ich da i. wo nen Flaschen Datentyp verwendet oder etwas ähnliches?
Aber ich habe schon öfters Server gesehen wo die Sachen dann 400k etc. kosten.
Kann also eigentlich nicht sein.
08/01/2013 07:08 Jopsi332#2
wird am short liegen, das du erst in einer for schleife soweit immer abziehst in größe eines shortes, bis nur noch ein wert von einem ganzen bzw kleineren Wert als 32767 hast und den rest dann nochmal abziehst
08/01/2013 07:46 Ryunat#3
Quote:
Originally Posted by Jopsi332 View Post
wird am short liegen, das du erst in einer for schleife soweit immer abziehst in größe eines shortes, bis nur noch ein wert von einem ganzen bzw kleineren Wert als 32767 hast und den rest dann nochmal abziehst
hm sowas hab ich mir auch schon gedacht, jedoch habs gerade zu nem integer geändert und jetzt zieht er 17233 ab ...
Ich verzweifel hier noch ._.

Meine Änderung:
Code:
				if(pCharacter->m_nVenderType == 1) // ĨÀ¸·Î °Å·¡ÇÏ´Â venderÀÏ °æ¿ì
				{
					if(pCharacter->m_venderItemAry2[i].GetSize())
					{
						fShop	= TRUE;
						m_ShopInventory[i]->Clear();		// m_packÀ» ´Ù ¾ø¾Ø´Ù.
						for( int j = 0; j < pCharacter->m_venderItemAry2[i].GetSize(); j++ )
						{
							pVendor	= (LPVENDOR_ITEM)pCharacter->m_venderItemAry2[i].GetAt(j);
							CItemElem itemElem;
							itemElem.m_dwItemId	= pVendor->m_dwItemId;
#ifdef __CHIPSYSTEM_FIX
							itemElem.m_nItemNum	= (int)( prj.GetItemProp( pVendor->m_dwItemId )->dwPackMax );
#else //__CHIPSYSTEM_FIX
							itemElem.m_nItemNum	= (short)( prj.GetItemProp( pVendor->m_dwItemId )->dwPackMax );
#endif //__CHIPSYSTEM_FIX
							itemElem.m_nHitPoint = prj.GetItemProp( pVendor->m_dwItemId )->dwEndurance;
							if( (int)itemElem.GetChipCost() < 1 )
								Error( "chip cost < 1 : npc = %s, item = %d", pCharacter->m_szKey, pVendor->m_dwItemId );
							else
								m_ShopInventory[i]->Add( &itemElem );
						}
					}
				}
08/01/2013 10:38 raventh1984#4
Hmm strange bug indeed. I have tested it and i have this
PHP Code:
if(pCharacter->m_nVenderType == 1// Ä¨À¸·Î °Å·¡Çϴ venderÀÏ °æ¿ì
                
{
                    if(
pCharacter->m_venderItemAry2[i].GetSize())
                    {
                        
fShop    TRUE;
                        
m_ShopInventory[i]->Clear();        // m_packÀ» ´Ù ¾ø¾Ø´Ù.
                        
for( int j 0pCharacter->m_venderItemAry2[i].GetSize(); j++ )
                        {
                            
pVendor    = (LPVENDOR_ITEM)pCharacter->m_venderItemAry2[i].GetAt(j);
                            
CItemElem itemElem;
                            
itemElem.m_dwItemId    pVendor->m_dwItemId;
                            
itemElem.m_nItemNum    = (short)( prj.GetItemProppVendor->m_dwItemId )->dwPackMax );
                            
itemElem.m_nHitPoint prj.GetItemProppVendor->m_dwItemId )->dwEndurance;
                            if( (int)
itemElem.GetChipCost() < )
                                
Error"chip cost < 1 : npc = %s, item = %d"pCharacter->m_szKeypVendor->m_dwItemId );
                            else
                                
m_ShopInventory[i]->Add( &itemElem );
                        }
                    }
                } 
I have tested it with 4 cloaks i have put the price of each on 80K RC. I have bought it also for 80K RC. So its working as it should be. Try it if its still not working then the bug is somewhere else.
08/01/2013 11:35 Мentus#5
Quote:
Originally Posted by André! View Post
hm sowas hab ich mir auch schon gedacht, jedoch habs gerade zu nem integer geändert und jetzt zieht er 17233 ab ...
Ich verzweifel hier noch ._.

Meine Änderung:
Code:
				if(pCharacter->m_nVenderType == 1) // ĨÀ¸·Î °Å·¡ÇÏ´Â venderÀÏ °æ¿ì
				{
					if(pCharacter->m_venderItemAry2[i].GetSize())
					{
						fShop	= TRUE;
						m_ShopInventory[i]->Clear();		// m_packÀ» ´Ù ¾ø¾Ø´Ù.
						for( int j = 0; j < pCharacter->m_venderItemAry2[i].GetSize(); j++ )
						{
							pVendor	= (LPVENDOR_ITEM)pCharacter->m_venderItemAry2[i].GetAt(j);
							CItemElem itemElem;
							itemElem.m_dwItemId	= pVendor->m_dwItemId;
#ifdef __CHIPSYSTEM_FIX
							itemElem.m_nItemNum	= (int)( prj.GetItemProp( pVendor->m_dwItemId )->dwPackMax );
#else //__CHIPSYSTEM_FIX
							itemElem.m_nItemNum	= (short)( prj.GetItemProp( pVendor->m_dwItemId )->dwPackMax );
#endif //__CHIPSYSTEM_FIX
							itemElem.m_nHitPoint = prj.GetItemProp( pVendor->m_dwItemId )->dwEndurance;
							if( (int)itemElem.GetChipCost() < 1 )
								Error( "chip cost < 1 : npc = %s, item = %d", pCharacter->m_szKey, pVendor->m_dwItemId );
							else
								m_ShopInventory[i]->Add( &itemElem );
						}
					}
				}
Du weißt, das dass Item dort nur zum Item Container hinzugefügt wird, ich denke nicht das es daran liegt, da du ja deine Angaben in der Spec_item machen mussst.

PHP Code:
        int dwChipCost pItemElem->GetChipCost() * nNum;
        if( 
dwChipCost 0x7fff )
        {
            for( ; 
dwChipCost 0x7fff; )
            {
                
pUser->RemoveItemAII_CHP_RED0x7fff );
                
dwChipCost -= 0x7fff;
            }
        }
        
pUser->RemoveItemAII_CHP_RED, (short)dwChipCost ); 
Hier wird's abgezogen.

Achja die zuständige Funktion ist OnBuyChipItem in der Klasse CDPSrvr.
Das zuständige Packet ist PACKETTYPE_BUYCHIPITEM.

Schaut's euch genau an, ich hab kein Problem damit.


Quote:
Originally Posted by Jopsi332 View Post
wird am short liegen, das du erst in einer for schleife soweit immer abziehst in größe eines shortes, bis nur noch ein wert von einem ganzen bzw kleineren Wert als 32767 hast und den rest dann nochmal abziehst
0x7fff ist SHRT_MAX und naja .. er ziehts halt in einer Schleife ab, also ergibt das was du sagst eig keinen Sinn.