[CS:DE] Paperdoll e Peperdoll baseado no gênero Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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

+2
Valentine
gabriel190
6 participantes

Ir para baixo

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

Mensagem por gabriel190 Sáb 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

_________________
[CS:DE] Paperdoll e Peperdoll baseado no gênero Scaled.php?server=546&filename=signpnu
[CS:DE] Paperdoll e Peperdoll baseado no gênero Xna
[CS:DE] Paperdoll e Peperdoll baseado no gênero Fanbarpw
[CS:DE] Paperdoll e Peperdoll baseado no gênero AIymW
gabriel190
gabriel190
Membro Ativo
Membro Ativo

Mensagens : 278
Créditos : 19

Ir para o topo Ir para baixo

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

Mensagem por Valentine Sáb 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.
Valentine
Valentine
Administrador
Administrador

Medalhas : [CS:DE] Paperdoll e Peperdoll baseado no gênero ZgLkiRU
Mensagens : 5341
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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

Mensagem por gabriel190 Sáb 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 )

_________________
[CS:DE] Paperdoll e Peperdoll baseado no gênero Scaled.php?server=546&filename=signpnu
[CS:DE] Paperdoll e Peperdoll baseado no gênero Xna
[CS:DE] Paperdoll e Peperdoll baseado no gênero Fanbarpw
[CS:DE] Paperdoll e Peperdoll baseado no gênero AIymW
gabriel190
gabriel190
Membro Ativo
Membro Ativo

Mensagens : 278
Créditos : 19

Ir para o topo Ir para baixo

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

Mensagem por Ian 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
Ian
Ian
Ocasional
Ocasional

Mensagens : 216
Créditos : 27

Ir para o topo Ir para baixo

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

Mensagem por Valentine 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.
Valentine
Valentine
Administrador
Administrador

Medalhas : [CS:DE] Paperdoll e Peperdoll baseado no gênero ZgLkiRU
Mensagens : 5341
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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

Mensagem por Valentine Sáb 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.
Valentine
Valentine
Administrador
Administrador

Medalhas : [CS:DE] Paperdoll e Peperdoll baseado no gênero ZgLkiRU
Mensagens : 5341
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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

Mensagem por LordNoe Sáb 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?

LordNoe
Novato
Novato

Mensagens : 6
Créditos : 0

https://sites.google.com/site/stardaygondiaries/

Ir para o topo Ir para baixo

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

Mensagem por tiagosantos 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)
tiagosantos
tiagosantos
Novato
Novato

Mensagens : 2
Créditos : 1

Ir para o topo Ir para baixo

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

Mensagem por lerier 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!!! '-'

lerier
Novato
Novato

Mensagens : 6
Créditos : 0

http://egotent.wix.com/egot

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos