Suporte ao desenvolvimento de jogos!


    [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Compartilhe
    avatar
    gabriel190
    Membro Ativo
    Membro Ativo

    Mensagens : 278
    Créditos : 19

    [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por gabriel190 em Sab Mar 24, 2012 11:01 pm

    Todo mundo sabe como o paperdoll funciona não é? Então vamos ao que interessa...

    Parte 1: Paperdoll Comum
    *Siga essa parte se vc quer colocar paperdoll na sua CS:DE

    TUDO NO CLIENT SIDE

    No modDirectX8
    ache: Sub GDIRenderChar

    Abaixo da sub inteira adicione isso:

    Código:
    ' Paperdoll show up in item editor
    Public Sub GDIRenderPaperdoll(ByRef picBox As PictureBox, ByVal Sprite As Long)
    Dim height As Long, Width As Long, sRECT As RECT

        ' exit out if doesn't exist
        If Sprite <= 0 Or Sprite > Count_Paperdoll Then Exit Sub
       
        height = 32
        Width = 32
       
        sRECT.top = 0
        sRECT.bottom = sRECT.top + height
        sRECT.left = 0
        sRECT.Right = sRECT.left + Width

        ' Start Rendering
        Call D3DDevice8.Clear(0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0)
        Call D3DDevice8.BeginScene
       
        RenderTexture Tex_Paperdoll(Sprite), 0, 0, 0, 0, Width, height, Width, height
       
        ' Finish Rendering
        Call D3DDevice8.EndScene
        Call D3DDevice8.Present(sRECT, ByVal 0, picBox.hwnd, ByVal 0)
    End Sub

    Na: Sub DrawPlayer
    Procure por:

    Código:
    RenderTexture Tex_Char(Sprite), ConvertMapX(x), ConvertMapY(y), rec.left, rec.top, rec.Width, rec.height, rec.Width, rec.height

    Abaixo disso adicione:
    Código:
    ' check for paperdolling
        For i = 1 To UBound(PaperdollOrder)
            If GetPlayerEquipment(Index, PaperdollOrder(i)) > 0 Then
                If Item(GetPlayerEquipment(Index, PaperdollOrder(i))).Paperdoll > 0 Then
                    Call DrawPaperdoll(x, y, Item(GetPlayerEquipment(Index, PaperdollOrder(i))).Paperdoll, Anim, spritetop)
                End If
            End If
        Next

    Abaixo da DrawPlayer sub adicione isso:

    Código:
    Public Sub DrawPaperdoll(ByVal x2 As Long, ByVal y2 As Long, ByVal Sprite As Long, ByVal Anim As Long, ByVal spritetop As Long)
    Dim rec As GeomRec

        If Sprite < 1 Or Sprite > Count_Paperdoll Then Exit Sub
       
            With rec
                .top = spritetop * (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).height / 4)
                .height = (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).height / 4)
                .left = Anim * (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).Width / 4)
                .Width = (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).Width / 4)
            End With

        ' Clip to screen
        If y2 < 0 Then
            With rec
                .top = .top - y2
            End With
            y2 = 0
        End If

        If x2 < 0 Then
            With rec
                .left = .left - x2
            End With
            x2 = 0
        End If
         
        RenderTexture Tex_Paperdoll(Sprite), ConvertMapX(x2), ConvertMapY(y2), rec.left, rec.top, rec.Width, rec.height, rec.Width, rec.height
           
    End Sub

    Na Sub DrawGDI

    Procure por:
    Código:
    GDIRenderItem frmEditor_Item.picItem, frmEditor_Item.scrlPic.value

    Abaixo adicione:
    Código:
    GDIRenderPaperdoll frmEditor_Item.picPaperdoll, frmEditor_Item.scrlPaperdoll.value

    Pronto! agora vc tem paperdoll no seu projeto!

    PARTE 2: PAPERDOLL BASEADO NO GÊNERO
    *Se vc quer o paperdoll baseado no gênero, siga a primeira parte primeiro, e depois esta.

    SERVER SIDE:
    No modServerTCP

    Procure por:
    Código:
    For i = 1 To Stats.Stat_Count - 1
            Buffer.WriteLong GetPlayerStat(index, i)
        Next

    Abaixo do Buffer.WriteLong GetPlayerStat(index, i) adicione:

    Código:
    Buffer.WriteLong GetPlayerSex(index)

    No modPlayer adicione isso no final:
    Código:
    Function GetPlayerSex(ByVal index As Long) As Long
        If index <= 0 Or index > MAX_PLAYERS Then Exit Function
        GetPlayerSex = Player(index).Sex
    End Function

    CLIENT SIDE
    No modDirectX8

    Perto do topo do módulo, ache isso:
    Código:
    Public Tex_Paperdoll() As Long

    e troque por isso:
    Código:
    Public Tex_Paperdoll_M() As Long
    Public Tex_Paperdoll_F() As Long

    Ache:
    Código:
    Public Const Path_Paperdoll As String = "\data files\graphics\paperdolls\"

    E troque por isso:
    Código:
    Public Const Path_Paperdoll_M As String = "\data files\graphics\paperdolls\male\"
    Public Const Path_Paperdoll_F As String = "\data files\graphics\paperdolls\female\"

    Na EngineCacheTextures ache:
    Código:
    ' Paperdoll Textures
        Count_Paperdoll = 1
        Do While FileExist(App.path & Path_Paperdoll & Count_Paperdoll & ".png")
            ReDim Preserve Tex_Paperdoll(0 To Count_Paperdoll)
            Tex_Paperdoll(Count_Paperdoll) = SetTexturePath(App.path & Path_Paperdoll & Count_Paperdoll & ".png")
            Count_Paperdoll = Count_Paperdoll + 1
        Loop
        Count_Paperdoll = Count_Paperdoll - 1

    E troque por essa:

    Código:
    ' Male Paperdoll Textures
        Count_Paperdoll = 1
        Do While FileExist(App.Path & Path_Paperdoll_M & Count_Paperdoll & ".png")
            ReDim Preserve Tex_Paperdoll_M(0 To Count_Paperdoll)
            Tex_Paperdoll_M(Count_Paperdoll) = SetTexturePath(App.Path & Path_Paperdoll_M & Count_Paperdoll & ".png")
            Count_Paperdoll = Count_Paperdoll + 1
        Loop
        Count_Paperdoll = Count_Paperdoll - 1
       
        ' Female Paperdoll Textures
        Count_Paperdoll = 1
        Do While FileExist(App.Path & Path_Paperdoll_F & Count_Paperdoll & ".png")
            ReDim Preserve Tex_Paperdoll_F(0 To Count_Paperdoll)
            Tex_Paperdoll_F(Count_Paperdoll) = SetTexturePath(App.Path & Path_Paperdoll_F & Count_Paperdoll & ".png")
            Count_Paperdoll = Count_Paperdoll + 1
        Loop
        Count_Paperdoll = Count_Paperdoll - 1

    Troque a Sub GDIRenderPaperdoll por esse:

    Código:
    ' Paperdoll show up in item editor
    Public Sub GDIRenderPaperdoll(ByRef picBox As PictureBox, ByVal Sprite As Long)
    Dim height As Long, Width As Long, sRECT As RECT

        ' exit out if doesn't exist
        If Sprite <= 0 Or Sprite > Count_Paperdoll Then Exit Sub
       
        height = 32
        Width = 32
       
        sRECT.top = 0
        sRECT.bottom = sRECT.top + height
        sRECT.left = 0
        sRECT.Right = sRECT.left + Width

        ' Start Rendering
        Call D3DDevice8.Clear(0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0)
        Call D3DDevice8.BeginScene
       
        RenderTexture Tex_Paperdoll_M(Sprite), 0, 0, 0, 0, Width, height, Width, height
       
        ' Finish Rendering
        Call D3DDevice8.EndScene
        Call D3DDevice8.Present(sRECT, ByVal 0, picBox.hwnd, ByVal 0)
    End Sub

    Na Sub DrawPlayer Procure por essa linha:
    Código:
    Call DrawPaperdoll(x, y, Item(GetPlayerEquipment(Index, PaperdollOrder(i))).Paperdoll, Anim, spritetop)

    E troque por essa:
    Código:
    Call DrawPaperdoll(Index, x, y, Item(GetPlayerEquipment(Index, PaperdollOrder(i))).Paperdoll, Anim, spritetop)

    No modTypes
    Na Private Type PlayerRec procure por:
    Código:
    name As String

    abaixo adicione:
    Código:
    Sex As Byte

    Troque a Sub DrawPaperdoll por essa aki:
    Código:
    Public Sub DrawPaperdoll(ByVal index As Long, ByVal x2 As Long, ByVal y2 As Long, ByVal Sprite As Long, ByVal Anim As Long, ByVal spritetop As Long)
    Dim rec As GeomRec
    Dim G_Paperdoll As Long

        If Sprite < 1 Or Sprite > Count_Paperdoll Then Exit Sub
       
        If GetPlayerSex(index) = SEX_MALE Then
            G_Paperdoll = Tex_Paperdoll_M(Sprite)
        Else
            G_Paperdoll = Tex_Paperdoll_F(Sprite)
        End If
       
            With rec
                .top = spritetop * (D3DT_TEXTURE(G_Paperdoll).height / 4)
                .height = (D3DT_TEXTURE(G_Paperdoll).height / 4)
                .left = Anim * (D3DT_TEXTURE(G_Paperdoll).Width / 4)
                .Width = (D3DT_TEXTURE(G_Paperdoll).Width / 4)
            End With

        ' Clip to screen
        If y2 < 0 Then
            With rec
                .top = .top - y2
            End With
            y2 = 0
        End If

        If x2 < 0 Then
            With rec
                .left = .left - x2
            End With
            x2 = 0
        End If
         
        RenderTexture G_Paperdoll, ConvertMapX(x2), ConvertMapY(y2), rec.left, rec.top, rec.Width, rec.height, rec.Width, rec.height
           
    End Sub

    No modDatabase adicione isso bem no final:

    Código:
    Function GetPlayerSex(ByVal Index As Long) As Long
        ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo errorhandler

        If Index > MAX_PLAYERS Then Exit Function
        GetPlayerSex = Player(Index).Sex
       
        ' Error handler
        Exit Function
    errorhandler:
        HandleError "GetPlayerPK", "modDatabase", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Function
    End Function

    Sub SetPlayerSex(ByVal Index As Long, ByVal Sex As Long)
        ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo errorhandler

        If Index > MAX_PLAYERS Then Exit Sub
        Player(Index).Sex = Sex
       
        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "SetPlayerPK", "modDatabase", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub
    End Sub

    No modHandleData
    na Sub HandlePlayerData ache:
    Código:
    For x = 1 To Stats.Stat_Count - 1
            SetPlayerStat i, x, Buffer.ReadLong
        Next

    e abaixo adicione:
    Código:
    Call SetPlayerSex(i, Buffer.ReadLong)

    Prontinhu!

    CREDITOS:
    DJMaxus por criar
    Eu por traduzir e trazer pra vcs


    _________________



    avatar
    Valentine
    Administrador
    Administrador

    Medalhas :
    Mensagens : 4804
    Créditos : 1021

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por Valentine em Sab Mar 24, 2012 11:40 pm

    Nesse código
    Código:
    Public Sub DrawPaperdoll(ByVal x2 As Long, ByVal y2 As Long, ByVal Sprite As Long, ByVal Anim As Long, ByVal spritetop As Long)
    Dim rec As GeomRec

        If Sprite < 1 Or Sprite > Count_Paperdoll Then Exit Sub
       
            With rec
                .top = spritetop * (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).height / 4)
                .height = (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).height / 4)
                .left = Anim * (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).Width / 4)
                .Width = (D3DT_TEXTURE(Tex_Paperdoll(Sprite)).Width / 4)
            End With

        ' Clip to screen
        If y2 < 0 Then
            With rec
                .top = .top - y2
            End With
            y2 = 0
        End If

        If x2 < 0 Then
            With rec
                .left = .left - x2
            End With
            x2 = 0
        End If
         
        RenderTexture Tex_Paperdoll(Sprite), ConvertMapX(x2), ConvertMapY(y2), rec.left, rec.top, rec.Width, rec.height, rec.Width, rec.height
           
    End Sub

    Acho que essa parte
    Código:
        ' Clip to screen
        If y2 < 0 Then
            With rec
                .top = .top - y2
            End With
            y2 = 0
        End If

        If x2 < 0 Then
            With rec
                .left = .left - x2
            End With
            x2 = 0
        End If
    É desnecessário, isso é usado no directx7.

    + 1 crédito por postar aqui na aldeia.


    _________________
    avatar
    gabriel190
    Membro Ativo
    Membro Ativo

    Mensagens : 278
    Créditos : 19

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por gabriel190 em Sab Mar 24, 2012 11:52 pm

    Eu testei aki e funciona normalmente msm sem essa parte...
    mas essa parte faz o que exatamente? Sei que a sub desenha o paperdoll, mas pelo que ta escrito isso "corta a tela"???...ae n entendi... (to tentando aprender ao max Razz )


    _________________



    avatar
    Ian
    Ocasional
    Ocasional

    Mensagens : 214
    Créditos : 26

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por Ian em Ter Mar 27, 2012 7:48 am

    Se eu estiver certo ele ta usando isso pois tinha um problema quando voce chega no masimo do mapa ele bugava ou depois de um tempo sua paperdol mostrava fora do char
    avatar
    Valentine
    Administrador
    Administrador

    Medalhas :
    Mensagens : 4804
    Créditos : 1021

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por Valentine em Ter Mar 27, 2012 11:24 am

    Isso é usado muito no eclipse origins v2 com dx7, no BltTarget, BltPaperdoll e outros, na CS dx8 do robin ele não usa mais isso, então creio que era problema da versão anterior, até porque não vejo como poderia acontecer um erro desses.


    _________________
    avatar
    Valentine
    Administrador
    Administrador

    Medalhas :
    Mensagens : 4804
    Créditos : 1021

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por Valentine em Sab Abr 14, 2012 11:00 pm

    Desculpem reviver o tópico e o double post, mas acredito que seja importante, só para reforçar não precisa disso:
    Código:
        ' Clip to screen
        If y2 < 0 Then
            With rec
                .top = .top - y2
            End With
            y2 = 0
        End If

        If x2 < 0 Then
            With rec
                .left = .left - x2
            End With
            x2 = 0
        End If

    No DrawPaperdoll, porque como a Crystal Share usa directx8, o mesmo não tem o problema do Eclipse Origins Dx7 em que precisa desse código.


    _________________

    LordNoe
    Novato
    Novato

    Mensagens : 6
    Créditos : 0

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por LordNoe em Sab Set 15, 2012 7:39 pm

    Ola a todos, eu sou novo aki, eu estou a experimentar este script de baperdoll, eu fiz tudo o que esta la escrito mas na mesma n funciona. o que devo fazer?
    avatar
    tiagosantos
    Novato
    Novato

    Mensagens : 2
    Créditos : 1

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por tiagosantos em Qua Set 19, 2012 9:55 am

    Não sei se testaram mesmo com personagens femininas... (aposto que não, ou então era erro do meu pc), mas o paperdoll feminino não funciona porque no Function GetPlayerSex invés de GetPlayerSex = Player(index).Sex tem que ser GetPlayerSex = Val(Player(index).Sex)

    lerier
    Novato
    Novato

    Mensagens : 6
    Créditos : 0

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por lerier em Sex Nov 28, 2014 10:04 am

    Hey amigos! Fiz tudo que pedia mas quando abro o Crystal Share não sei como faz pra tipo: só mulher usa um item e só homem usa outro... se tivesse um botão ou coisa do tipo que restringisse o sexo de cada item, sla, ajuda pfv!!! '-'

    Conteúdo patrocinado

    Re: [CS:DE] Paperdoll e Peperdoll baseado no gênero

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui Abr 26, 2018 6:23 am