troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 **Hello Eclipse!**I have a trouble with Faces pictures; I will need to explain with screens…My character class is _Wizard_ (2nd class), and her face should be the _Hylian_ one (1.bmp), but shows _nothing_I need help with that, because I was trying to change it, but I failed, can someone help me?The idea should be:For 1st, 2nd & 3rd classes, the face = _Hylian_ (1.bmp)For 4th & 5th classes, the face = _Goron_ (2.bmp)For 6th & 7th classes, the face = _Zora_ (3.bmp)>! ![](http://i50.tinypic.com/34s10g5.jpg) >! ![](http://i47.tinypic.com/ipr4oz.jpg) About the client code of facesThis is the code where it works:>! ```Sub BltFace()>! Dim rec As RECT, rec_pos As RECT, faceNum As Long>! ' If debug mode, handle error then exit out>! If Options.Debug = 1 Then On Error GoTo errorhandler>! If NumFaces = 0 Then Exit Sub>! frmMain.picFace.Cls>! faceNum = GetPlayerSprite(MyIndex)>! If faceNum <= 0 Or faceNum > NumFaces Then Exit Sub>! With rec>! .top = 0>! .Bottom = 100>! .Left = 0>! .Right = 100>! End With>! With rec_pos>! .top = 0>! .Bottom = 100>! .Left = 0>! .Right = 100>! End With>! ' Load face if not loaded, and reset timer>! FaceTimer(faceNum) = GetTickCount + SurfaceTimerMax>! If DDS_Face(faceNum) Is Nothing Then>! Call InitDDSurf("Faces\" & faceNum, DDSD_Face(faceNum), DDS_Face(faceNum))>! End If>! Engine_BltToDC DDS_Face(faceNum), rec, rec_pos, frmMain.picFace, False>! ' Error handler>! Exit Sub>! errorhandler:>! HandleError "BltFace", "modDirectDraw7", Err.Number, Err.Description, Err.Source, Err.HelpContext>! Err.Clear>! Exit Sub>! End Sub``` So… depends in the sprite that I choose for the character and thats not ok for me, because for only one class I have differents sprites to choose (and dont forget male and female sprites) Link to comment Share on other sites More sharing options...
abhi2011 Posted April 17, 2013 Share Posted April 17, 2013 Faces are directly related to the sprite. Meaning that if your sprite is 1 then the first face sprite is shown.And make sure that the faces are .bmp`s Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 > Faces are directly related to the sprite. Meaning that if your sprite is 1 then the first face sprite is shown.> > And make sure that the faces are .bmp`syeah but thats not ok for me, because for only one class I have differents sprites to choose (and dont forget male and female sprites) Link to comment Share on other sites More sharing options...
Matt Posted April 17, 2013 Share Posted April 17, 2013 > yeah but thats not ok for me, because for only one class I have differents sprites to choose (and dont forget male and female sprites)You could go the easy way and make faces for each sprite, or you could add an option to the classes.ini file that sets the face for the class. Link to comment Share on other sites More sharing options...
Link Posted April 17, 2013 Share Posted April 17, 2013 > You could go the easy way and make faces for each sprite, or you could add an option to the classes.ini file that sets the face for the class.> **Hello Eclipse!**> > I have a trouble with Faces pictures; I will need to explain with screens…> > My character class is _Wizard_ (2nd class), and her face should be the _Hylian_ one (1.bmp), but shows _nothing_> > I need help with that, because I was trying to change it, but I failed, can someone help me?> > The idea should be:> > For 1st, 2nd & 3rd classes, the face = _Hylian_ (1.bmp)> > For 4th & 5th classes, the face = _Goron_ (2.bmp)> > For 6th & 7th classes, the face = _Zora_ (3.bmp)> > > >! ![](http://i50.tinypic.com/34s10g5.jpg) > > > >! ![](http://i47.tinypic.com/ipr4oz.jpg) > > About the client code of faces> > This is the code where it works:> > > >! ```> Sub BltFace()> >! Dim rec As RECT, rec_pos As RECT, faceNum As Long> >! ' If debug mode, handle error then exit out> >! If Options.Debug = 1 Then On Error GoTo errorhandler> >! If NumFaces = 0 Then Exit Sub> >! frmMain.picFace.Cls> >! faceNum = GetPlayerSprite(MyIndex)> >! If faceNum <= 0 Or faceNum > NumFaces Then Exit Sub> >! With rec> >! .top = 0> >! .Bottom = 100> >! .Left = 0> >! .Right = 100> >! End With> >! With rec_pos> >! .top = 0> >! .Bottom = 100> >! .Left = 0> >! .Right = 100> >! End With> >! ' Load face if not loaded, and reset timer> >! FaceTimer(faceNum) = GetTickCount + SurfaceTimerMax> >! If DDS_Face(faceNum) Is Nothing Then> >! Call InitDDSurf("Faces\" & faceNum, DDSD_Face(faceNum), DDS_Face(faceNum))> >! End If> >! Engine_BltToDC DDS_Face(faceNum), rec, rec_pos, frmMain.picFace, False> >! ' Error handler> >! Exit Sub> >! errorhandler:> >! HandleError "BltFace", "modDirectDraw7", Err.Number, Err.Description, Err.Source, Err.HelpContext> >! Err.Clear> >! Exit Sub> >! End Sub> ``` > > So… depends in the sprite that I choose for the character and thats not ok for me, because for only one class I have differents sprites to choose (and dont forget male and female sprites)Mind taking a screen shot of your classes.ini? According to matt's way you have to set the face value individually for each sprite in the class/ini with picture correlation. Of course have the source grab that code. If you want, paste a screen shot of your ini. and I can help from there.Edit: You could also make face folder for each class itself and keep the main folder for the sprites over all, either way you have a bunch of choices. Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 > You could go the easy way and make faces for each sprite, or you could add an option to the classes.ini file that sets the face for the class.Thats a NICE idea, but I need some help, because I tried&failed in the past ![:wacko:](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/wacko.png)> Mind taking a screen shot of your classes.ini? According to matt's way you have to set the face value individually for each sprite in the class/ini with picture correlation. Of course have the source grab that code. If you want, paste a screen shot of your ini. and I can help from there.> > Edit: You could also make face folder for each class itself and keep the main folder for the sprites over all, either way you have a bunch of choices.Classes.ini ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/smile.png)>! [INIT]>! MaxClasses=7>! [CLASS1]>! Name=Guerrero>! MaleSprite=1,2,3>! FemaleSprite=4,5,6>! Strength=5>! Endurance=5>! Intelligence=5>! Agility=5>! Willpower=5>! StartItemCount=2>! StartItem1=15>! StartValue1=1>! StartItem2=144>! StartValue2=1>! StartMap=1>! StartMapX=11>! StartMapY=3>! [CLASS2]>! Name=Mago>! MaleSprite=1,2,3>! FemaleSprite=4,5,6>! Strength=5>! Endurance=5>! Intelligence=5>! Agility=5>! Willpower=5>! StartMap=1>! StartMapX=11>! StartMapY=3>! StartItemCount=2>! StartItem1=66>! StartValue1=1>! StartItem2=144>! StartValue2=1>! [CLASS3]>! Name=Nigromante>! MaleSprite=1,2,3>! FemaleSprite=4,5,6>! Strength=5>! Endurance=5>! Intelligence=5>! Agility=5>! Willpower=5>! StartMap=1>! StartMapX=11>! StartMapY=3>! StartItemCount=2>! StartItem1=192>! StartValue1=1>! StartItem2=144>! StartValue2=1>! [CLASS4]>! Name=Destructor>! MaleSprite=7,8,9>! FemaleSprite=7,8,9>! Strength=5>! Endurance=5>! Intelligence=5>! Agility=5>! Willpower=5>! StartMap=73>! StartMapX=6>! StartMapY=5>! StartItemCount=2>! StartItem1=145>! StartValue1=1>! StartItem2=228>! StartValue2=1>! [CLASS5]>! Name=Defensor>! MaleSprite=7,8,9>! FemaleSprite=7,8,9>! Strength=5>! Endurance=5>! Intelligence=5>! Agility=5>! Willpower=5>! StartMap=73>! StartMapX=6>! StartMapY=5>! StartItemCount=2>! StartItem1=145>! StartValue1=1>! StartItem2=229>! StartValue2=1>! [CLASS6]>! Name=Marino>! MaleSprite=13,14,15>! FemaleSprite=16,17,18>! Strength=5>! Endurance=5>! Intelligence=5>! Agility=5>! Willpower=5>! StartItemCount=2>! StartItem1=146>! StartValue1=1>! StartItem2=230>! StartValue2=1>! StartMap=90>! StartMapX=14>! StartMapY=9>! [CLASS7]>! Name=Tormentoso>! MaleSprite=13,14,15>! FemaleSprite=16,17,18>! Strength=5>! Endurance=5>! Intelligence=5>! Agility=5>! Willpower=5>! StartItemCount=2>! StartItem1=146>! StartValue1=1>! StartItem2=231>! StartValue2=1>! StartMap=90>! StartMapX=14>! StartMapY=9 Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 you should just add a seperate setting to store the face number in.that would be easy, and the simplest way to do it.just add it to the classes rec```Private Type ClassRec Name As String * NAME_LENGTH Stat(1 To Stats.Stat_Count - 1) As Byte MaleSprite() As Long FemaleSprite() As Long MaleFace() as long FemaleFace() as longEnd Type```then just add some way to the npc editor to add the face number. Link to comment Share on other sites More sharing options...
Matt Posted April 17, 2013 Share Posted April 17, 2013 > you should just add a seperate setting to store the face number in.> > that would be easy, and the simplest way to do it.> > just add it to the classes rec> > ```> > Private Type ClassRec> > Name As String * NAME_LENGTH> > Stat(1 To Stats.Stat_Count - 1) As Byte> > MaleSprite() As Long> > FemaleSprite() As Long> > MaleFace() as long> > FemaleFace() as long> > End Type> > ```> > then just add some way to the npc editor to add the face number.Its not as easy as that. Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 yes it is… O.osure, there are some things i didnt mention ,but all code is allready in the engine, just a small copy/paste adjust job. Link to comment Share on other sites More sharing options...
Matt Posted April 17, 2013 Share Posted April 17, 2013 > yes it is… O.o> > sure, there are some things i didnt mention ,but all code is allready in the engine, just a small copy/paste adjust job.Then mention that next time. It may seem obvious to you, but to someone else reading this thread, they might think that that's all that need to be done. Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 Client SideI put this in BltFace:```faceNum = Face```And add this:```Private Type ClassRecName As String * NAME_LENGTHStat(1 To Stats.Stat_Count - 1) As ByteMaleSprite() As LongFemaleSprite() As LongFace As Long' For client useVital(1 To Vitals.Vital_Count - 1) As LongEnd Type```Server SideIn LoadClasses I add:``` Class(i).Face = Val(GetVar(filename, "CLASS" & i, "Face"))```In SaveClasses I add:``` Call PutVar(filename, "CLASS" & i, "Face", STR(Class(i).Face))```I want to do what Mathew mentioned ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/smile.png)> add an option to the classes.ini file that sets the face for the classWich is the next pass?? Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 not bad, i presume you send the data to the client too? Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 > not bad, i presume you send the data to the client too?I presume no, this is all I did, but dont know what to do nowNeed a bit of help ![:P](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/tongue.png) Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 check how server sends class data to client, make sure your new option is send too. Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 How ![:(](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/sad.png) ?edit: It is about there?>! ```>! ' Packets sent by server to client>! Public Enum ServerPackets>! SAlertMsg = 1>! SLoginOk>! SNewCharClasses>! SClassesData>! SInGame>! SPlayerInv>! SPlayerInvUpdate>! SPlayerWornEq>! SPlayerHp>! SPlayerMp>! SPlayerStats>! SPlayerData>! SPlayerMove>! SNpcMove>! SPlayerDir>! SNpcDir>! SPlayerXY>! SPlayerXYMap>! SAttack>! SNpcAttack>! SCheckForMap>! SMapData>! SMapItemData>! SMapNpcData>! SMapDone>! SGlobalMsg>! SAdminMsg>! SPlayerMsg>! SMapMsg>! SSpawnItem>! SItemEditor>! SUpdateItem>! SREditor>! SSpawnNpc>! SNpcDead>! SNpcEditor>! SUpdateNpc>! SMapKey>! SEditMap>! SShopEditor>! SUpdateShop>! SSpellEditor>! SUpdateSpell>! SSpells>! SLeft>! SResourceCache>! SResourceEditor>! SUpdateResource>! SSendPing>! SDoorAnimation>! SActionMsg>! SPlayerEXP>! SBlood>! SAnimationEditor>! SUpdateAnimation>! SAnimation>! SMapNpcVitals>! SCooldown>! SClearSpellBuffer>! SSayMsg>! SOpenShop>! SResetShopAction>! SStunned>! SMapWornEq>! SBank>! STrade>! SCloseTrade>! STradeUpdate>! STradeStatus>! STarget>! SHotbar>! SHighIndex>! SSound>! STradeRequest>! SPartyInvite>! SPartyUpdate>! SPartyVitals>! SHandleProjectile>! 'ALATAR>! SQuestEditor>! SUpdateQuest>! SPlayerQuest>! SQuestMessage>! '/ALATAR>! ' Make sure SMSG_COUNT is below everything else>! SMSG_COUNT>! >! SSpawnEvent>! SEventMove>! SEventDir>! SEventChat>! SEventStart>! SEventEnd>! SPlayBGM>! SPlaySound>! SFadeoutBGM>! SStopSound>! SSwitchesAndVariables>! SMapEventData>! >! End Enum>! ' Packets sent by client to server>! Public Enum ClientPackets>! CNewAccount = 1>! CDelAccount>! CLogin>! CAddChar>! CUseChar>! CSayMsg>! CEmoteMsg>! CBroadcastMsg>! CPlayerMsg>! CPlayerMove>! CPlayerDir>! CUseItem>! CAttack>! CUseStatPoint>! CPlayerInfoRequest>! CWarpMeTo>! CWarpToMe>! CWarpTo>! CSetSprite>! CGetStats>! CRequestNewMap>! CMapData>! CNeedMap>! CMapGetItem>! CMapDropItem>! CMapRespawn>! CMapReport>! CKickPlayer>! CBanList>! CBanDestroy>! CBanPlayer>! CRequestEditMap>! CRequestEditItem>! CSaveItem>! CRequestEditNpc>! CSaveNpc>! CRequestEditShop>! CSaveShop>! CRequestEditSpell>! CSaveSpell>! CSetAccess>! CWhosOnline>! CSetMotd>! CSearch>! CSpells>! CCast>! CQuit>! CSwapInvSlots>! CRequestEditResource>! CSaveResource>! CCheckPing>! CUnequip>! CRequestPlayerData>! CRequestItems>! CRequestNPCS>! CRequestResources>! CSpawnItem>! CRequestEditAnimation>! CSaveAnimation>! CRequestAnimations>! CRequestSpells>! CRequestShops>! CRequestLevelUp>! CForgetSpell>! CCloseShop>! CBuyItem>! CSellItem>! CChangeBankSlots>! CDepositItem>! CWithdrawItem>! CCloseBank>! CAdminWarp>! CTradeRequest>! CAcceptTrade>! CDeclineTrade>! CTradeItem>! CUntradeItem>! CHotbarChange>! CHotbarUse>! CSwapSpellSlots>! CAcceptTradeRequest>! CDeclineTradeRequest>! CPartyRequest>! CAcceptParty>! CDeclineParty>! CPartyLeave>! CProjecTileAttack>! 'ALATAR>! CRequestEditQuest>! CSaveQuest>! CRequestQuests>! CPlayerHandleQuest>! CQuestLogUpdate>! '/ALATAR>! ' Make sure CMSG_COUNT is below everything else>! CMSG_COUNT>! >! CEventChatReply>! CEvent>! CSwitchesAndVariables>! CRequestSwitchesAndVariables>! >! End Enum>! ``` Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 ```Sub SendClasses(ByVal index As Long) Dim packet As String Dim i As Long, n As Long, q As Long Dim Buffer As clsBuffer Set Buffer = New clsBuffer Buffer.WriteLong SClassesData Buffer.WriteLong Max_Classes For i = 1 To Max_Classes Buffer.WriteString GetClassName(i) Buffer.WriteLong GetClassMaxVital(i, Vitals.HP) Buffer.WriteLong GetClassMaxVital(i, Vitals.MP) ' set sprite array size n = UBound(Class(i).MaleSprite) ' send array size Buffer.WriteLong n ' loop around sending each sprite For q = 0 To n Buffer.WriteLong Class(i).MaleSprite(q) Next ' set sprite array size n = UBound(Class(i).FemaleSprite) ' send array size Buffer.WriteLong n ' loop around sending each sprite For q = 0 To n Buffer.WriteLong Class(i).FemaleSprite(q) Next For q = 1 To Stats.Stat_Count - 1 Buffer.WriteLong Class(i).stat(q) Next Next SendDataTo index, Buffer.ToArray() Set Buffer = NothingEnd Sub```check that sub serverside. and```Sub HandleClassesData(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)Dim n As LongDim i As LongDim Z As Long, x As LongDim Buffer As clsBuffer ' If debug mode, handle error then exit out If Options.Debug = 1 Then On Error GoTo errorhandler Set Buffer = New clsBuffer Buffer.WriteBytes Data() n = 1 ' Max classes Max_Classes = Buffer.ReadLong 'CByte(Parse(n)) ReDim Class(1 To Max_Classes) n = n + 1 For i = 1 To Max_Classes With Class(i) .Name = Buffer.ReadString 'Trim$(Parse(n)) .Vital(Vitals.HP) = Buffer.ReadLong 'CLng(Parse(n + 1)) .Vital(Vitals.MP) = Buffer.ReadLong 'CLng(Parse(n + 2)) ' get array size Z = Buffer.ReadLong ' redim array ReDim .MaleSprite(0 To Z) ' loop-receive data For x = 0 To Z .MaleSprite(x) = Buffer.ReadLong Next ' get array size Z = Buffer.ReadLong ' redim array ReDim .FemaleSprite(0 To Z) ' loop-receive data For x = 0 To Z .FemaleSprite(x) = Buffer.ReadLong Next For x = 1 To Stats.Stat_Count - 1 .Stat(x) = Buffer.ReadLong Next End With n = n + 10 Next Set Buffer = Nothing ' Error handler Exit Suberrorhandler: HandleError "HandleClassesData", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext Err.Clear Exit SubEnd Sub```that clientside Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 I´m lost in the shadows ![:blink:](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/blink.png) Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 oh come on, your doing good.send Class(i).Face in server, sendclasses, then in client set Class(i).Face with the recieved data from server in HandleClassesData. Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 How I send?The "For" things? Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 server```' loop around sending each sprite For q = 0 To n Buffer.WriteLong Class(i).FemaleSprite(q) Next Buffer.WriteLong Class(i).Face For q = 1 To Stats.Stat_Count - 1 Buffer.WriteLong Class(i).stat(q) Next```client```.Face Buffer.ReadLong``` Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 I added that to server side ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/smile.png)``` ' loop around sending each face For q = 0 To n Buffer.WriteLong Class(i).Face(q) Next Buffer.WriteLong Class(i).Face For q = 1 To Stats.Stat_Count - 1 Buffer.WriteLong Class(i).Face(q) Next```Its Ok?? Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 lol no, only need the Buffer.WriteLong Class(i).Facerest was to show where you place it ![:P](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/tongue.png) Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 Ok ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/smile.png)In Server side added:``` ' loop around sending each face Buffer.WriteLong Class(i).Face``` Link to comment Share on other sites More sharing options...
damian666 Posted April 17, 2013 Share Posted April 17, 2013 ok, except it doesnt loop, its just 1 face right?now client```' loop-receive data For x = 0 To Z .FemaleSprite(x) = Buffer.ReadLong Next .Face Buffer.ReadLong For x = 1 To Stats.Stat_Count - 1 .Stat(x) = Buffer.ReadLong Next``` Link to comment Share on other sites More sharing options...
troglodite Posted April 17, 2013 Author Share Posted April 17, 2013 ![](http://i48.tinypic.com/2rztogn.jpg)![:(](http://www.touchofdeathforums.com/community/public/style_emoticons/<#EMO_DIR#>/sad.png) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now