Waffen Lvl Frage!?

04/04/2013 20:20 Yaysh#1
Aus purer Verzweiflung frag ich euch bzw bitte ich euch um Hilfe ,da mir so langsam die Ideen ausgehen.
Ich arbeite derzeit an dem Waffen Lvl System, das auf irgendeinerweise einfach nicht funktionieren will und bin am Ende meines Wissens angekommen.
Áls kleines Bsp:
Du erstellst dir einen Char & loggst dich ein.
Man sieht alles eiwandfrei.. Exp alles funktioniert auch!.
Nachdem der Server neugestartet wird und man sich einloggt dann das:
[Only registered and activated users can see links. Click Here To Register...]
Ich will diesen Bugg nicht verstehen bin schon X mal über den Code aber bis jetz keine Lösung gefunden...
Wie man auf dem Screen erkennen kann buggen die Models total, das Waffen Lvl ist manchmal sogar auf 1mio und man hat ebenfalls soviel stats.
Speicherung ist korrekt da %d und die WeaponExp &Lvl eig sourcetechnisch korrekt abgespeichert werden.
Ich vermute iwelche komplikationen mit dem Model-Change oder what ever, wobei beim auskommentieren des Waffen Lvl Systems ja alles wieder funktioniert. Bitte um jegliche Hilfe :o
04/04/2013 20:23 ThoughtfulDev#2
ja das blinkwing problem :P

evtl mal versucht das model bem ausloggen des chars zum "debuggen" als id in nh txt zu loggen lassen? um zu sehen ob es bereits beim ausloggen gechanget wird oder es beim db server einbauen zumindestens so dass du immer weißt welches model er als id hat also hätte er die richtige id aber zeigt das falsche an hätte man einen anhaltspunkt.


ODER

hast du mal das item also das blinkwing aus der specitem/defineitem.h zu entfernen?


Ich hoffe ich konnte dir Helfen mein Schatzii <3 ;)
04/04/2013 20:28 Yaysh#3
Debugg bringt mich leider nicht wirklich weiter, hab zwar die ID aber das is ja überall bei jedem X beliebigen Set/Waffe. Nach einem Relogg passiert nichts, nur nach einem Server neustart(warum ka).
Dazu kommt das dann die Waffe ein X beliebiges Lvl & auch beliebige stats hat..
Bitte weiter um Hilfe :/
04/04/2013 20:47 Mognakor#4
Würde das ganze mal mit %i statt %d versuchen.

%d interpretiert alles als Dezimalzahl z.B. wird aus 0x10 die Zahl 10.
%i interpretiert das gleiche als Zahl 16, was dann auch richtig ist.
(D.h. %d interpretiert hexadezimale und oktale (Basis 8) falsch)

Das ganze sollte nur einen Unterschied machen wenn feste Werte und keine Variablen eingelesen werden, aber es währe trotzdem einen Versuch wert.


Noch ein Schuss ins Blaue: Kann es sein das du ein Modelchange hast? Vielleicht wird die Datenbank-Prozedur falsch aufgerufen, d.h.: Das Waffenlevel etc. wird in die Spalte für das Model gespeichert, das Model in die Spalte des Waffenlevels und im Nu hast du die größte Schweinerei in der Datenbank.

Auf jedenfall scheint es an der Schnittstelle zur Datenbank zu liegen, soweit ich weiß werden beim Serverstart alle Charaktäre, Waffen etc. geladen und liegen dann im Arbeitsspeicher. In einem festgelegten Intervall werden die gespeicherten Daten auf die Datenbank übertragen, die Werte werden jedoch nur durch die aus der Datenbank 'ersetzt' wenn der Server startet.
04/04/2013 20:55 ThoughtfulDev#5
Soweit ich weiß hat er für das ModelChange und für das WaffenLevel keine DB einträge , da er das model auch so abspeichert ;)
04/04/2013 21:14 Yaysh#6
@Mognakor
Ja ich benutze Modelchange , jedoch musst du für beide Systeme keinerlei Db Einträge
tätigen. Ich kann ja hier mal ausschnitte vom Source code der speziell für die Db ist posten:
DBManagerSave.cpp
Quote:
void CDbManager::SaveOneItem( CItemElem* pItemElem, PItemStruct pItemStruct )
{
char szPiercing[32] = {0,};

if( pItemElem->IsEmpty() == FALSE )
{
#if __VER >= 11 // __MA_VER11_05 // Äɸ¯ÅÍ ºÀÀÎ °Å·¡ ±â´É world,database,neuz
if( pItemElem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
sprintf( pItemStruct->szItem, "%d,%d,%d,%d,,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d ,%d/",
pItemElem->m_dwObjId, pItemElem->m_dwItemId,
0, 0,
pItemElem->m_nItemNum, pItemElem->m_nRepairNumber,
pItemElem->m_nHitPoint, pItemElem->m_nRepair,
0, pItemElem->m_byFlag,
pItemElem->GetSerialNumber(), pItemElem->GetOption(),
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId
);
else
sprintf( pItemStruct->szItem, "%d,%d,%d,%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,% d,%d,%d,%d,%d/",
pItemElem->m_dwObjId, pItemElem->m_dwItemId,
0, 0, pItemElem->m_szItemText,
pItemElem->m_nItemNum, pItemElem->m_nRepairNumber,
pItemElem->m_nHitPoint, pItemElem->m_nRepair,
0, pItemElem->m_byFlag,
pItemElem->GetSerialNumber(), pItemElem->GetOption(),
pItemElem->m_bItemResist, pItemElem->m_nResistAbilityOption,
pItemElem->m_idGuild,
pItemElem->m_nResistSMItemId

#ifdef __MODEL_CHANGE
, pItemElem->m_dwnewID
#endif

#ifdef __WEAPON_LEVELING
, pItemElem->m_nWeaponLevel
, pItemElem->m_nWeaponExp
#endif

DBManagerFun.cpp
Quote:
#ifdef __MODEL_CHANGE
pItemElem->m_dwnewID = GetIntPaFromStr( pstrItem, pLocation);
ItemProp * pItemProp = prj.GetItemProp( pItemElem->m_dwnewID);
if(!pItemProp)
{
pItemElem->m_dwnewID = NULL;
}
else if(pItemElem->m_dwnewID == NULL_ID)
{
pItemElem->m_dwnewID = NULL;
}

#endif

#ifdef __WEAPON_LEVELING
pItemElem->m_nWeaponLevel = GetIntPaFromStr( pstrItem, pLocation );
pItemElem->m_nWeaponExp = GetIntPaFromStr( pstrItem, pLocation );
if(pItemElem->m_nWeaponExp < 0) pItemElem->m_nWeaponExp = 0;
if(pItemElem->m_nWeaponLevel < 1) pItemElem->m_nWeaponLevel = 1;
#endif
04/05/2013 01:01 Mognakor#7
Falls das in der DBManagerFun.cpp so direkt untereinander steht wie du es gepostet hast lädt er die selbe Information in m_dwnewID, in m_nWeaponLevel und in m_nWeaponExp, außer es wird in der GetIntPaFromStr() pLocation geändert was ich für eher unwahrscheinlich halte.


Ich würde mal den Modelchange auskommentieren, evtl. die DB wipen zur Sicherheit und sehen ob dann das Waffen-Level-System funtzt.
04/05/2013 12:43 Yaysh#8
Vielen dank für deine Hilfe.
Ich hab das Problem jetz fixxed! :)
Lag tatsächlich daran, dass er das Waffen lvl immer nach dem model-change geladen hat.
Hab jetz alles vor dem model-change laden lassen und es funktioniert endlich!
Danke :p
04/05/2013 14:02 Rhyder`#9
Can you make a tutorial on how to put the database of this system into sql
04/05/2013 14:24 Yaysh#10
There is no need to put something in sql^^
Just Source stuff :=)
04/05/2013 14:30 Rhyder`#11
The weapon level back to normal after restart Server
04/05/2013 15:16 Crowley™#12
Yash das liegt nicht an dem System... auch wenn ich dir meins gebe wird der Bug trotzdem nicht weg sein.
04/05/2013 18:31 Yaysh#13
Der Bugg is weg lol.
Schau mal genauer auf meine Posts ;'p
Ahnung muss man schon mitbringen, werde wohl selber wissen ob es am Waffen Lvl liegt oder nicht xD
04/06/2013 02:05 Crowley™#14
Quote:
Originally Posted by Yaysh View Post
Der Bugg is weg lol.
Schau mal genauer auf meine Posts ;'p
Ahnung muss man schon mitbringen, werde wohl selber wissen ob es am Waffen Lvl liegt oder nicht xD
Also ich habs anders und bei mir geht es ^^ Ist doch gut das der Bug nun gefixed ist. Den Fehler muss man nicht verstehen oder?
04/06/2013 07:58 ThoughtfulDev#15
Quote:
Originally Posted by Crowley™ View Post
Also ich habs anders und bei mir geht es ^^ Ist doch gut das der Bug nun gefixed ist. Den Fehler muss man nicht verstehen oder?
Also ich habe es verstanden aber ich denke das Thema ist jetzt vorbei.

#closerrequest