CWE Directory Reorganization
Rearrange directory structure of CWE to be loosely equivalent to the H'uru Plasma repository. Part 1: Movement of directories and files.
864
Sources/Plasma/Apps/plClient/external/Cursor_Base.svg
vendored
Normal file
@ -0,0 +1,864 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48"
|
||||
height="48"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.1 r9760"
|
||||
sodipodi:docname="making of cursors.svg"
|
||||
inkscape:export-xdpi="360"
|
||||
inkscape:export-ydpi="360">
|
||||
<defs
|
||||
id="defs4">
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter6135"
|
||||
x="-0.5"
|
||||
width="2"
|
||||
y="-0.5"
|
||||
height="2"
|
||||
inkscape:label="filter6135"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.5"
|
||||
id="feGaussianBlur6137" />
|
||||
</filter>
|
||||
<mask
|
||||
x="-0.5"
|
||||
y="-0.5"
|
||||
width="2"
|
||||
height="2"
|
||||
id="mask6840">
|
||||
<g
|
||||
id="g6842">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="48"
|
||||
width="48"
|
||||
id="rect6844"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6846"
|
||||
xlink:href="#path4148"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6845"
|
||||
xlink:href="#path4146"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6844"
|
||||
xlink:href="#path4144"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6843"
|
||||
xlink:href="#path4119"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
</g>
|
||||
</mask>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12"
|
||||
inkscape:cx="24"
|
||||
inkscape:cy="24"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer35"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1541"
|
||||
inkscape:window-height="889"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-grids="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2985"
|
||||
empspacing="4"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3997"
|
||||
empspacing="8"
|
||||
visible="true"
|
||||
enabled="false"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="0.5px"
|
||||
spacingy="0.5px"
|
||||
color="#00ff00"
|
||||
opacity="0.1254902"
|
||||
empcolor="#00ff00"
|
||||
empopacity="0.25098039" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4665"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="24px"
|
||||
spacingy="24px"
|
||||
color="#ff00ff"
|
||||
opacity="0.15686275"
|
||||
empcolor="#ff00ff"
|
||||
empopacity="0.4" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="poised orig in"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="7.2600002"
|
||||
x="7.2600002"
|
||||
id="image3065"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAA3NCSVQICAjb4U/gAAAAvUlEQVRI
|
||||
ie2UTRKDIAyFn53eK9yM5GYvJ6OLjBnHVrCjCxd8K3yRhPwAMJlMnoGqkmwrJFX1NtftmDNhXn1z
|
||||
KQWAu5vZsmJm7p7WPu+OjaSIuDtJAK210FMREZL9MIMMIgyAWmsqIpL6JaLQuYiKZ1e2P9wTYKj/
|
||||
ZFyiJDP4/6gHxOyr6vewpjjsRC+D2BxDYmapxzr0SwEAuLuIhK+8B+E9Jri/fczukdhy8sFYzoTJ
|
||||
axWfedHubPhkMnkyH5cn3C3UVHXpAAAAAElFTkSuQmCC
|
||||
"
|
||||
height="34.560001"
|
||||
width="34.560001"
|
||||
inkscape:export-xdpi="333.32999"
|
||||
inkscape:export-ydpi="333.32999" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="poised orig out"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="6"
|
||||
x="6"
|
||||
id="image4063"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAACd0lEQVRI
|
||||
ie2UvWvqUBiHjyY1iR+kKWgxceoSP1JEKBIIuAtuxe5uDgWdOtq/wdExOKqTICi4OCiYDE6KaKao
|
||||
CFqraJGamNzB5cKFxtYOd8gznvOe8zsP5+UFwMTExOSnWM4vxXHcbrejKApBEABAVdX9fv/x8bHb
|
||||
7X7zRSiKXl9fv7y81Gq1t7c3Xdd1XZdluVwup1IpHMcRBPm1pFwut91uNU3TNE3/i9OKJEnpdPqc
|
||||
q2DjChjmOM5ms/V6vW63y/P8eDwGALAsm0wmo9Gox+OJRCLnhBn82e3tbT6fTyQSw+Gw0+msViuO
|
||||
40iSBACs12tJkhRFiUajBEGUSqVMJnORGQzDPp/PbrcLgrBareLxeCgUwjAMAPD5+amqaqvV6vf7
|
||||
8XicoihDM+vX2zabLRAIWCwWnuc5jguFQqIoZrPZ19fX4XDIMIzX661WqyiK0jRtGGZgBkHQzc0N
|
||||
AGA8HpMkiWFYpVIpFosYhrnd7ufnZ5fLJcsyBEEEQVxq9i84jmMY5nQ6HQ7Hd88amKmqOplMfD4f
|
||||
y7KDwYAkycfHR7fb7XA4YrHYfD5fLpf39/eKokynU8Mw6OttBEHC4XAgEDgej6eODwaDsVgsEokc
|
||||
Dod2uz2bzViW9Xq99Xq9VqtdZKYoymg0WiwWDw8Px+NREITJZOJyuQAAy+Vys9nc3d3RND2fzyVJ
|
||||
utQMhmGKolAU9fv9BEFomtZoNJrNpiAIVquVZVmGYa6urtrttiiK/X7fMM8ABEHS6XShUJjNZrvd
|
||||
TlXV06w6HA7v7++DwYDn+aenp3Ou+sbUz+fzFEXRNH3q8ul0KoqiJEmyLJdKpR+qmJiYmPyP/AHn
|
||||
shrr/cpNswAAAABJRU5ErkJggg==
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="4wayclosed orig in"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="7.2599926"
|
||||
x="7.2600002"
|
||||
id="image3191"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAA3NCSVQICAjb4U/gAAABQElEQVRI
|
||||
icVWW5LEIAiU2b0XHCU3CbkZnMz9YIpy0RidxBq+YgLdPLRNSpPGzLMhEyYiOedVHMycc845i8hC
|
||||
dLPxIl6DfkTUWd61kP5Uo35H0Pd9V9US8ckKOu1eu2UHDUacrDmIaEtv1wMVNMfrQ/6cwCPt6AYs
|
||||
Zvb3dciFiYiHlSglqGEFDgvs0dRK4MpTN8pfunNPSDy7IAO2dKb6lLlD6R+1pJldIGgOuU/gSbyY
|
||||
WVX7g6kdRkLeBCklIjqO4wzXGhg++TydqRyvqhJRY+BhY5RjPNtFjuKtDrj/5NpKQUR3UlVENA4i
|
||||
AgCTORFBxLJRRKSqAHB9IGwL+nO9hXyGpdst2Qg0t0TiC3Yz2aE7uRY7a9pjjWrOefBOHqqgeQM/
|
||||
/He0/L+olKxLIfrcZtNPKf1MEQAAAGzbNhW11v4AthMpECAoHYUAAAAASUVORK5CYII=
|
||||
"
|
||||
height="34.560001"
|
||||
width="34.560001" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="4wayclosed orig out"
|
||||
style="opacity:0.5;display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="6"
|
||||
x="6"
|
||||
id="image4110"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAFr0lEQVRI
|
||||
ib1XTUwTWxS+0E6n1tYKrR3TKZAaf0omZtpaGmwTImJCapSFiYkRYmxiDJoad8YVxMS9uFF0pRY3
|
||||
NFGJFTDdNCUFKg1B1E7JwCBK6TTtNNBJU5oZ27eYF0QfypTne99qcm6+77vnzJlz7wDwP0KyMxqG
|
||||
YVqtNpPJ/OdmFy5cuH37ttlspml6eXl5Bwpi4XQ6h4aG8vk8QRBXr16tiFtZZg6H4/r1662trWq1
|
||||
Wi6Xcxy3uLiYTCZF0qsrMjt58mRLS4tWqwUAKJVKq9XqcDjE0yvIDMdxt9ttMplkMpkQgSCoqqqK
|
||||
pumlpaU/aYZh2I0bN44dO7a2trayspJKpVKpVLFYRBCkurr67du3YkSkIs1Onz6t0WhGR0djsVgu
|
||||
lxOCtbW1KIomk8n6+vovX76IlNoeXV1de/fu3XJJr9efO3dOjEiVeD8EQaRSqUwmk0gkAACe5wuF
|
||||
AsdxHMexLPvHzORyuVwu7+/vNxgMjY2NtbW1AIDl5eVIJEKSJEVRz549KxaL4vf9O6eenh6WZUul
|
||||
UqlUKm9CqVRKpVIvX77s7u4WI/XL7+zAgQNdXV0AAKlU6nQ6ZTLZzMzM48ePHQ6HTqfT6XQdHR0D
|
||||
AwMMwzidTovFskHs7u7W6XRbam5Rxvb29s7OToIgHj58CMPw/fv3z5w5Mzc35/F4zGYzjuMYhhUK
|
||||
hXg8PjEx8e3bt97e3pqaGp/Pd/PmTQDA06dPIQj6+PGjz+cjSXKz8g+t73A4Ll68eOrUKRiGV1ZW
|
||||
VldXURQ1GAwKhWJqaspsNnd2dppMJpVKVSqVcByvq6sLhUKxWMzlcqEoKogsLCxcvnz5xIkTNpvt
|
||||
3r17Y2NjP2fT2tp669at4eHhTCZTLpfj8fi1a9cAAEajkWGYcrl8/Pjx/v5+YXUDFEXduXPn0qVL
|
||||
PM9/+PBho/6xWKxcLudyuXfv3t29e9dqtX7PzGw2ezweq9Wq0+kUCgUAoFgsCl+uRCIRem9+fh7D
|
||||
MJVKtXmLCILo9fpgMCiRSGpqaoQgRVHr6+sAAJVK1dTUZDAYDh065PV6w+FwNQCAZVmpVKrVagWn
|
||||
X6FQKJRKpc0Rnue37XgYhhEE2b9/P8/z1UKVHz169OrVq38eFjzPC8djc3NzPB7fGFQCaJpmGObo
|
||||
0aMcxyUSCSFot9uVSqXwnM1m/X7/gwcPJiYmWJb9u0GGh4dpmo7FYu3t7RaLZdeuXUL1CoVCJBJB
|
||||
UfT8+fMjIyN1dXU4jiMIwvM8TdPBYDCRSJw9ezafz0ejUUHK6XQK1aYoKhAIPHnyZHJyUlj63o3T
|
||||
09PT09ORSOTKlSs4jtvtdqPRuLa2RpJkOp222Wx+vz8UCs3Ozur1+mKxyDBMIpFQKBRHjhyhaXph
|
||||
YUHQ0Wg0LMt++vRpZGRkaGhofn5+w+LnI2ZxcZEgCLVajWFYLpebnZ1FUVQul5tMpqamJrlcPjk5
|
||||
GQ6HCYJQqVQul8vlckEQND4+Ho1GCYJoaGjo6OiYm5vr6enx+/3ZbHaz+Naz8fDhw21tbalU6sWL
|
||||
FzAMu91ui8XS1ta2b9++3bt3C4OY47h8Pr+0tBQMBsfHxwcHByUSidvthiDI5/NtefGqYOq73e6W
|
||||
lhabzSZ0eSKRiEajo6Ojr1+/Fi8iClKp2GP2NxB74fF4PBqN5l+aid0vBEF9fX0kSQ4MDFAUBQCw
|
||||
2+1Op1Oj0SAIEgqFvF7vtiJi35lOp+vr62tubl5fXxemkVKpVKlULMsGAoHe3t5Kr+LbAMOwmZmZ
|
||||
8o8gSdLj8YhUqODemE6nDQbDwYMHN8YxRVHPnz8fHBxcXV39w2YAgGQyaTQa6+vrYRjOZrPv378P
|
||||
BALhcFgkvTKzTCbDMExjY2NDQwNJkm/evBkbG0un0/+JGQDg8+fPKIrq9fpwOOz1emOxmHjuTv7P
|
||||
8vn8169fg8Hg1NTUDugVQ61W79mzp1LWXwDmqKUkUgO0AAAAAElFTkSuQmCC
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer8"
|
||||
inkscape:label="disabled orig out"
|
||||
sodipodi:insensitive="true"
|
||||
style="display:none">
|
||||
<image
|
||||
y="6"
|
||||
x="6"
|
||||
id="image4210"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAADU0lEQVRI
|
||||
ie2VzUsqURTAb17xi2LINJlyoGIcMRQDEwoslyEmQitrV+vWrfonghb9A4WL1oLrwlWgEDFGTRmj
|
||||
TlZ+kE1T6nje4vIe7wMcrQfvLfotzz33/s653DmD0Bdf/N94PJ54PP6xvVtbW3a7fQDTwcFBLpeL
|
||||
RCIDaTDG6+vrT09Pu7u7NE33tScej+dyOQDI5/PhcLhPk8lkisfjiqIAwMnJydzcXL81RiKRfD4P
|
||||
AKIoBgIBzXyLxbK6ugoAAJDNZjmO69dECIfDoigCQKPR4DgOY0xRFE3T09PTLMuyLDs1NeVwOIaH
|
||||
h81mczQaBYButysIwsTExGAmQiAQaDQapF6WZXd2dlKpVLVaJRFRFI+Pjzc3N2OxGACoqipJksVi
|
||||
+YiJwHEcOVpV1W632+124SdIRFVVACgWizqd7uMmhBDGmGVZchwAHB4eLi4u2u12u90ei8XS6TSJ
|
||||
X1xcjI2NfcqEEHI4HMlk8kdDjUZDEASe53mev7u7azabJF6r1fb29jRP02ss6/VOpxMhdHR0FI1G
|
||||
KYqiKOrnhEKhwPP88vLy5OSkpkzjlg0Gg8fjGRoa2t/fr1arfyZcXl4mk0mTyeR2uz8rwxhbrVaE
|
||||
0PX1davV+jOh2WyKoogxHh0d/azs76Ih63Q6xWIRIbSwsMDz/PPz828JNpvN5/O12+1SqaQpw72X
|
||||
jUaj3+/3eDyqqhqNRoZhzGbzbwlOp5OiqHQ6nUqlep+m8Rrb7fbV1dXj4+P8/PzMzIzRaMxkMuVy
|
||||
mfTkdrtpmqZpulKpCIKg2Zm2rFAolMtlr9er1+sRQqlUKpPJIIR8Pl8ikSC/EoPBwDCMpkwDg8EQ
|
||||
CoXIBJFl+eXlpdPpkA+51WrV6/X7+/tarQYAlUrF6/X2nlhDvU3BYPD09BQhJElSNptVFMXtdpNX
|
||||
XiqVzs7OBEFgGGZjY2N8fPz9/d3n893c3KiqOlhPOp1uaWmJTFtFUWw2W49kr9f79vZGOna5XANP
|
||||
5JWVldfXVwCo1+sjIyOalblcLiKTZdnv9w9gWltbe3h4AIDb21syGzXBGLtcLlmWAUCSpFAo1K/M
|
||||
arVub2+fn5/Pzs72X6JOp/P7/ZIkJRIJzcv4BZvNFgwGB9jwnVAoNJjpiy/+Bd8A15jBvOYCWCMA
|
||||
AAAASUVORK5CYII=
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer9"
|
||||
inkscape:label="book orig out"
|
||||
style="display:none">
|
||||
<image
|
||||
y="-3.5"
|
||||
x="-3.5"
|
||||
id="image4273"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAEjklEQVRI
|
||||
idWWSywzXRzGz3SKtnpD6p5Upei4VGncqpUSRQgh6KZioYnYWViLxEbChj1hScJCkLBziXtVqsVI
|
||||
1GBo2lSrbq1GW+9i3vB9Dd5W3/f78j6LWcx5/ueXc+Z/njkA/C8qKytjs9mB+zkcTnFxcVAIGAAg
|
||||
FAqrq6u7u7vFYnFycrLNZnM4HF/UCASClpYWtVpdU1NDJpPDwsJMJlOgMKlUKhaLRSKRVCqVyWSJ
|
||||
iYkvLy8ul+v+/t7PzePxSktLu7u7Ozo6cnNzn5+f3W63z+fT6XSBwMgAgMjIyPDwcAAAg8FgMBit
|
||||
ra1SqXRnZ2dqakqv12MYBgBIS0vLzs5WqVR5eXkQBJ2enkZHRwMAIiIi6HR6IKSfMD9FRkby+Xw+
|
||||
n19fXz87O9vX1wcAGBwcrKqquru7m5+f39/fv7q6qq+vz8/PDxDzKexNDAajtrbWaDQCAKqqqqan
|
||||
p/V6/czMDLHWnJyc3wnz08DAAIqiQc3uJ1Ioxf8RLC4ujsPhBFsVxDYCAJhMJo1Go1Ao7e3tLS0t
|
||||
FovlT8GYTKZCoVAoFEVFRbGxsQCAPwjb3NyEIAgAQDy/oSBgJFKo3fQ3dOP39L6NGxsbNpsNQZBA
|
||||
etpsNh8fHy8sLJhMJiIkA4XZbLaYmBiLxTI+Pv709CSXy5uamhISEj4s2N7eNpvNW1tbVqsVQRAE
|
||||
QZaWloKAra6unpyclJSUZGZmPjw8aDQajUaTkZEhl8vT0tLerOvr68vLy1tbWwkJCTwej8Vi6fV6
|
||||
jUaD43iAsPcmZrFYAoFAIpFwuVwMw66vr71eb1ZW1u7ubklJSVhYmMfjwXGcTqczmUwcxw0GA4qi
|
||||
Dw8PAZL+BSNEp9MLCwvFYjGXy93b27NYLFarNS4uDoKg8vJyDoej1Wq1Wu3Ozo7L5XqfBYI4HA6V
|
||||
SqXRaMQbt9vtdDpvbm48Hs+nMEIUCqWioqKgoCA9Pf34+HhtbU2tVi8vL5+dna2vr7+8vPwTw2az
|
||||
k5KS+vv7BQJBRkYGcRwvLi5QFB0eHtZoNA6Hg0B+lQUwDFdWVsIwnJKScn5+vri46PP5/DxsNnt0
|
||||
dLSxsfHu7u729nZhYcHr9QIAJBIJ8V21Wm1XV9fBwcGv9vhXgiBIIBAcHR0Zjcbe3t6mpqa3IaFQ
|
||||
2NPTs7KygmFYc3MzDMOhwrhc7uHhoc1m6+3t/dAgl8uNRiOO4w0NDSD0BIEg6Pb21mAwfDhqsVgw
|
||||
DIMg6NvZ/S4EQbxe78jIyBee6upqn8/X2dkJQl8ZiUQiOuIzeTyet5X9PanvdrsvLi4kEolQKPzQ
|
||||
EB8fr1Qqb25u7HZ7qDCn04miKI/HUygUHxpSU1NlMpnJZDKbzaHCvF6vyWR6fHxsaGiQy+UIgrwN
|
||||
xcfHSySStrY2KpV6eXlJZFtwtys/ORyOiYmJqKgokUg0NjaGYdjQ0BCRTEqlUiaTUalUDMMmJydD
|
||||
vN3+FJlMFgqFzc3NOI5fXV35fL7X19fX11er1arT6ebm5lQqFYPBIMwhnzUAAAAwDNfV1UEQRPwf
|
||||
AAB2u91sNrtcLhRFHx8ffwslOP0Alp/f+dOOZb8AAAAASUVORK5CYII=
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="black"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
id="rect3988"
|
||||
width="48"
|
||||
height="48"
|
||||
x="0"
|
||||
y="0" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="green"
|
||||
id="g6764"
|
||||
inkscape:groupmode="layer"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="48"
|
||||
width="48"
|
||||
id="rect6766"
|
||||
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:label="white"
|
||||
id="g4621"
|
||||
inkscape:groupmode="layer"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="48"
|
||||
width="48"
|
||||
id="rect4623"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer7"
|
||||
inkscape:label="raw material"
|
||||
style="display:none">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 24,7 C 15,18 15,30 24,41 33,30 33,18 24,7 z"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline"
|
||||
id="path4130" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 34,24 c -10e-7,6.428573 -3.571428,10 -10,10 -6.428573,0 -10,-3.571427 -10,-10 0,-6.428572 3.571427,-10 10,-10 6.428572,0 10.000003,3.571428 10,10 z"
|
||||
id="path4132"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4348"
|
||||
d="m 26,8 c -1e-6,2.571429 -1.964286,4 -5.5,4 C 16.964285,12 15,10.571429 15,8 15,5.4285714 16.964285,4 20.5,4 24.035714,4 26.000001,5.4285714 26,8 z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
transform="matrix(1.2727273,0,0,1.75,-2.0909091,10)" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 29,24 c -1e-6,3.214286 -1.785714,5 -5,5 -3.214286,0 -5,-1.785714 -5,-5 0,-3.214286 1.785714,-5 5,-5 3.214286,0 5.000001,1.785714 5,5 z"
|
||||
id="path4350"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 27.7,24 c 0,2.378573 -1.321428,3.7 -3.7,3.7 -2.378573,0 -3.7,-1.321427 -3.7,-3.7 0,-2.378572 1.321427,-3.7 3.7,-3.7 2.378572,0 3.700001,1.321428 3.7,3.7 z"
|
||||
id="path4352"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 25.8,24 c 0,1.157143 -0.642857,1.8 -1.8,1.8 -1.157144,0 -1.8,-0.642857 -1.8,-1.8 0,-1.157144 0.642856,-1.8 1.8,-1.8 1.157143,0 1.800001,0.642856 1.8,1.8 z"
|
||||
id="path4354"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 18.5,-1 0,15 -8,4 C 10,19 7,19 6.5,18 l -8,-4 0,-15"
|
||||
id="path4280"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 0,-2 0,15 c 3,1 6,2 8,4 L 8,2 C 6,0 3,-1 0,-2 z"
|
||||
id="path6725"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path6719"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 16,0.84375 0,5.5 C 13.81145,7.0854 11.67582,7.87061 10,9.125 l 0,-5.5 C 11.67582,2.37061 13.81145,1.5854 16,0.84375 z M 17,-2 c -3,1 -6,2 -8,4 l 0,15 c 2,-2 5,-3 8,-4 l 0,-15 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer18"
|
||||
inkscape:label="shapes 1"
|
||||
style="display:none">
|
||||
<path
|
||||
style="fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 24,17 c -4.500001,0 -7,2.5 -7,7 0,4.500001 2.499999,7 7,7 4.5,0 6.999999,-2.499999 7,-7 1e-6,-4.5 -2.5,-7 -7,-7 z m 0,2 c 3.214286,0 5.000001,1.785714 5,5 -1e-6,3.214286 -1.785714,5 -5,5 -3.214286,0 -5,-1.785714 -5,-5 0,-3.214286 1.785714,-5 5,-5 z"
|
||||
id="path3216"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 24,20.3125 c -2.378573,0 -3.6875,1.308928 -3.6875,3.6875 0,2.378573 1.308927,3.6875 3.6875,3.6875 2.378572,0 3.6875,-1.308927 3.6875,-3.6875 1e-6,-2.378572 -1.308928,-3.6875 -3.6875,-3.6875 z m 0,1.875 c 1.157143,0 1.812501,0.655356 1.8125,1.8125 0,1.157143 -0.655357,1.8125 -1.8125,1.8125 -1.157144,0 -1.8125,-0.655357 -1.8125,-1.8125 0,-1.157144 0.655356,-1.8125 1.8125,-1.8125 z"
|
||||
id="path4001"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path6738"
|
||||
style="fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 16,0.84375 0,5.5 C 13.81145,7.0854 11.67582,7.87061 10,9.125 l 0,-5.5 C 11.67582,2.37061 13.81145,1.5854 16,0.84375 z M 17,-2 c -3,1 -6,2 -8,4 l 0,15 c 2,-2 5,-3 8,-4 z M 0,-2 0,13 c 3,1 6,2 8,4 L 8,2 C 6,0 3,-1 0,-2 z m -2,1 0,15.3125 c 0,0 5.5231347,2.745942 8.28125,4.125 0.2252675,0.2606 0.4852377,0.47997 0.8125,0.5938 0.4294557,0.14938 0.921131,0.21875 1.40625,0.21875 0.485119,0 0.9767943,-0.0694 1.40625,-0.21875 0.327262,-0.11383 0.587233,-0.3332 0.8125,-0.5938 0,0 5.524469,-2.825606 8.28125,-4.125 L 19,-1 l -1,0 0,14.6875 -7.71875,3.875 -0.15625,0.0625 -0.0625,0.15625 c -0.03556,0.0711 -0.2107057,0.21188 -0.5,0.3125 C 9.2732057,18.19437 8.889881,18.25 8.5,18.25 8.110119,18.25 7.7267943,18.1944 7.4375,18.09375 7.1482057,17.99313 6.9730573,17.85236 6.9375,17.78125 L 6.875,17.625 6.71875,17.5625 -1,13.6875 -1,-1 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccsscccccccccssccccccc" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer19"
|
||||
inkscape:label="shapes 2"
|
||||
style="display:none">
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path6749"
|
||||
d="m 27.7,24 c 0,2.378573 -1.321428,3.7 -3.7,3.7 -2.378573,0 -3.7,-1.321427 -3.7,-3.7 0,-2.378572 1.321427,-3.7 3.7,-3.7 2.378572,0 3.700001,1.321428 3.7,3.7 z"
|
||||
style="fill-rule:evenodd;stroke:none;display:inline" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 24,7 C 21.882173,9.5884549 20.277368,12.23311 19.15625,14.90625 20.523744,14.321333 22.133081,14 24,14 c 1.866918,0 3.476256,0.321333 4.84375,0.90625 C 27.722632,12.23311 26.117827,9.5884549 24,7 z"
|
||||
id="path4148"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 14.90625,19.15625 C 12.23311,20.277368 9.5884549,21.882173 7,24 c 2.5884549,2.117827 5.23311,3.722632 7.90625,4.84375 C 14.321333,27.476256 14,25.866919 14,24 c 0,-1.866918 0.321333,-3.476256 0.90625,-4.84375 z"
|
||||
id="path4146"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 33.09375,19.15625 C 33.678667,20.523744 34.000001,22.133082 34,24 34,25.866919 33.678667,27.476256 33.09375,28.84375 35.76689,27.722632 38.411545,26.117827 41,24 38.411545,21.882173 35.76689,20.277368 33.09375,19.15625 z"
|
||||
id="path4144"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 19.15625,33.09375 C 20.277368,35.76689 21.882173,38.411545 24,41 26.117827,38.411545 27.722632,35.76689 28.84375,33.09375 27.476256,33.678667 25.866918,34 24,34 22.133081,34 20.523744,33.678667 19.15625,33.09375 z"
|
||||
id="path4119"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer20"
|
||||
inkscape:label="shapes 3"
|
||||
style="display:none">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(0,-192)"
|
||||
id="path6758"
|
||||
d="m 14.5,205 -1.5,1.5 5.15625,5.15625 C 17.409919,212.77794 17,214.22611 17,216 c 0,1.77389 0.409919,3.22206 1.15625,4.34375 L 13,225.5 l 1.5,1.5 5.15625,-5.15625 C 20.777944,222.59008 22.226111,223 24,223 c 1.773889,0 3.222056,-0.40992 4.34375,-1.15625 L 33.5,227 35,225.5 29.84375,220.34375 C 30.590081,219.22206 31,217.77389 31,216 c 0,-1.77389 -0.409919,-3.22206 -1.15625,-4.34375 L 35,206.5 33.5,205 28.34375,210.15625 C 27.222055,209.40992 25.773889,209 24,209 c -1.773889,0 -3.222056,0.40992 -4.34375,1.15625 L 14.5,205 z m 9.5,6 c 1.128621,0 2.082846,0.23139 2.84375,0.65625 l -1,1 C 25.330626,212.42921 24.710234,212.3125 24,212.3125 c -0.710234,0 -1.330626,0.11671 -1.84375,0.34375 l -1,-1 C 21.917154,211.23139 22.871379,211 24,211 z m -4.34375,2.15625 1,1 c -0.227037,0.51312 -0.34375,1.13352 -0.34375,1.84375 0,0.71023 0.116713,1.33063 0.34375,1.84375 l -1,1 C 19.23139,218.08285 19,217.12862 19,216 c 0,-1.12862 0.23139,-2.08285 0.65625,-2.84375 z m 8.6875,0 C 28.76861,213.91715 29,214.87138 29,216 c 0,1.12862 -0.23139,2.08285 -0.65625,2.84375 l -1,-1 c 0.227038,-0.51312 0.34375,-1.13352 0.34375,-1.84375 0,-0.71023 -0.116712,-1.33063 -0.34375,-1.84375 l 1,-1 z m -6.1875,6.1875 c 0.513124,0.22704 1.133516,0.34375 1.84375,0.34375 0.710234,0 1.330626,-0.11671 1.84375,-0.34375 l 1,1 C 26.082847,220.76861 25.128621,221 24,221 c -1.128621,0 -2.082846,-0.23139 -2.84375,-0.65625 l 1,-1 z"
|
||||
style="stroke:none;display:inline" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleOuterShadow"
|
||||
inkscape:label="shadow outer circle"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path3216"
|
||||
id="use6769"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerOpenShadow"
|
||||
inkscape:label="shadow inner circle open"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4001"
|
||||
id="use6776"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerClosedShadow"
|
||||
inkscape:label="shadow inner circle closed"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6749"
|
||||
id="use6780"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueUpperShadow"
|
||||
inkscape:label="shadow upper arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4148"
|
||||
id="use6784"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLowerShadow"
|
||||
inkscape:label="shadow lower arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4119"
|
||||
id="use6790"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueRightShadow"
|
||||
inkscape:label="shadow right arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6794"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLeftShadow"
|
||||
inkscape:label="shadow left arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6799"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow upper arrow translucent"
|
||||
id="arrowTranslucentUpperShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
height="240"
|
||||
width="240"
|
||||
id="use6807"
|
||||
xlink:href="#path4148"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow lower arrow translucent"
|
||||
id="arrowTranslucentLowerShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
height="240"
|
||||
width="240"
|
||||
id="use6850"
|
||||
xlink:href="#path4119"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow right arrow translucent"
|
||||
id="arrowTranslucentRightShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6852"
|
||||
width="240"
|
||||
height="240"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow left arrow translucent"
|
||||
id="arrowTranslucentLeftShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6848"
|
||||
width="240"
|
||||
height="240"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="crossShadow"
|
||||
inkscape:label="shadow cross"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6758"
|
||||
id="use6861"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="bookShadow"
|
||||
inkscape:label="shadow book"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6738"
|
||||
id="use6865"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleOuter"
|
||||
inkscape:label="outer circle"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path3216"
|
||||
id="use6869"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerOpen"
|
||||
inkscape:label="inner circle open"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4001"
|
||||
id="use6873"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerClosed"
|
||||
inkscape:label="inner circle closed"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6749"
|
||||
id="use6877"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueUpper"
|
||||
inkscape:label="upper arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4148"
|
||||
id="use6881"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLower"
|
||||
inkscape:label="lower arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4119"
|
||||
id="use6887"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueRight"
|
||||
inkscape:label="right arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6885"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLeft"
|
||||
inkscape:label="left arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6883"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentUpper"
|
||||
inkscape:label="upper arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4148"
|
||||
id="use6903"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentLower"
|
||||
inkscape:label="lower arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4119"
|
||||
id="use6909"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentRight"
|
||||
inkscape:label="right arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6907"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentLeft"
|
||||
inkscape:label="left arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6905"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="cross"
|
||||
inkscape:label="cross"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6758"
|
||||
id="use6925"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="book"
|
||||
inkscape:label="book"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6738"
|
||||
id="use6929"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 31 KiB |
508
Sources/Plasma/Apps/plClient/external/Linking_Book.svg
vendored
Normal file
@ -0,0 +1,508 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1175.8176"
|
||||
height="1177.8379"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.0 r9654"
|
||||
sodipodi:docname="Linking_Book.svg"
|
||||
inkscape:export-xdpi="19.561266"
|
||||
inkscape:export-ydpi="19.561266">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.66138134"
|
||||
inkscape:cx="437.66142"
|
||||
inkscape:cy="576.10909"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer3"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
showborder="false"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="998"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-1422.8571,-1.5258789e-005"
|
||||
id="guide2996" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="0,1562.8571"
|
||||
id="guide2998" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-628.31488,1177.8379"
|
||||
id="guide3000" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="1175.8176,1228.3455"
|
||||
id="guide3002" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="617.82713,588.96043"
|
||||
id="guide4160" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="587.89131,597.24623"
|
||||
id="guide4162" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="background"
|
||||
inkscape:label="Background"
|
||||
style="display:inline"
|
||||
transform="translate(0,125.47572)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="rect3004"
|
||||
width="1175.8176"
|
||||
height="1177.8379"
|
||||
x="0"
|
||||
y="-125.47572"
|
||||
inkscape:export-xdpi="19.561266"
|
||||
inkscape:export-ydpi="19.561266" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circles"
|
||||
inkscape:label="Circles"
|
||||
style="display:inline"
|
||||
transform="translate(0,125.47572)">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:none;stroke:none"
|
||||
id="circlePath"
|
||||
sodipodi:cx="587.90881"
|
||||
sodipodi:cy="463.44324"
|
||||
sodipodi:rx="587.90881"
|
||||
sodipodi:ry="588.91895"
|
||||
d="m 1175.8176,463.44324 c 0,325.25095 -263.21571,588.91896 -587.90879,588.91896 C 263.21574,1052.3622 0,788.69419 0,463.44324 0,138.19228 263.21574,-125.47571 587.90881,-125.47571 c 324.69308,0 587.90879,263.66799 587.90879,588.91895 z"
|
||||
transform="matrix(0.8793304,0,0,0.8793304,70.94272,55.923509)" />
|
||||
<g
|
||||
id="g3224"
|
||||
transform="translate(-0.03253824,-0.03474644)"
|
||||
inkscape:export-xdpi="19.561266"
|
||||
inkscape:export-ydpi="19.561266"
|
||||
style="fill:#352f42;fill-opacity:1">
|
||||
<path
|
||||
inkscape:tile-y0="-85.78605"
|
||||
inkscape:tile-x0="556.15709"
|
||||
inkscape:tile-h="63.503456"
|
||||
inkscape:tile-w="63.50345"
|
||||
inkscape:tile-cy="463.40173"
|
||||
inkscape:tile-cx="587.90882"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883"
|
||||
d="m 619.66054,-54.034322 c 0,17.535995 -14.21573,31.751728 -31.75173,31.751728 -17.53599,0 -31.75172,-14.215733 -31.75172,-31.751728 0,-17.535995 14.21573,-31.751728 31.75172,-31.751728 17.536,0 31.75173,14.215733 31.75173,31.751728 z"
|
||||
inkscape:transform-center-y="-517.43605"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="517.43605"
|
||||
inkscape:transform-center-x="3e-005"
|
||||
id="use5519"
|
||||
transform="matrix(-1,0,0,-1,1175.8176,926.80346)"
|
||||
xlink:href="#path3883"
|
||||
inkscape:tiled-clone-of="#path3883"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-4.3e-005"
|
||||
inkscape:transform-center-x="517.43605"
|
||||
id="use5521"
|
||||
transform="matrix(0,-1,1,0,124.50709,1051.3105)"
|
||||
xlink:href="#path3883"
|
||||
inkscape:tiled-clone-of="#path3883"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-x="-517.43601"
|
||||
id="use5525"
|
||||
transform="matrix(0,1,-1,0,1051.3105,-124.50709)"
|
||||
xlink:href="#path3883"
|
||||
inkscape:tiled-clone-of="#path3883"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="-98.74896"
|
||||
inkscape:tile-y0="-69.933668"
|
||||
inkscape:tile-x0="661.23414"
|
||||
inkscape:tile-h="50.812266"
|
||||
inkscape:tile-w="50.81225"
|
||||
inkscape:tile-cy="463.40173"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1"
|
||||
d="m 711.57495,-39.680724 c -2.67682,13.771051 -16.01044,22.764699 -29.7815,20.087876 -13.77104,-2.676818 -22.76468,-16.010449 -20.08786,-29.781498 2.67682,-13.771047 16.01044,-22.764697 29.7815,-20.087878 13.77104,2.676823 22.76468,16.010454 20.08786,29.7815 z"
|
||||
inkscape:transform-center-y="-507.92927"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="98.748955"
|
||||
inkscape:transform-center-x="-507.92923"
|
||||
id="use3037"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48958)"
|
||||
xlink:href="#path3883-1"
|
||||
inkscape:tiled-clone-of="#path3883-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="507.92927"
|
||||
inkscape:transform-center-x="98.74898"
|
||||
id="use3039"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80347)"
|
||||
xlink:href="#path3883-1"
|
||||
inkscape:tiled-clone-of="#path3883-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-98.749005"
|
||||
inkscape:transform-center-x="507.92927"
|
||||
id="use3041"
|
||||
transform="matrix(0,-1,1,0,124.48958,1051.293)"
|
||||
xlink:href="#path3883-1"
|
||||
inkscape:tiled-clone-of="#path3883-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="98.71521"
|
||||
inkscape:tile-y0="-69.940277"
|
||||
inkscape:tile-x0="463.76997"
|
||||
inkscape:tile-h="50.812269"
|
||||
inkscape:tile-w="50.812241"
|
||||
inkscape:tile-cy="463.40169"
|
||||
inkscape:tile-cx="587.8913"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-1"
|
||||
d="m 514.11077,-49.380953 c 2.67682,13.771051 -6.31682,27.104678 -20.08788,29.781501 -13.77103,2.676816 -27.10465,-6.316834 -29.78147,-20.087883 -2.67682,-13.771047 6.3168,-27.104672 20.08786,-29.781499 13.77104,-2.676815 27.10467,6.316835 29.78149,20.087881 z"
|
||||
inkscape:transform-center-y="-507.93583"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-98.715213"
|
||||
inkscape:transform-center-x="-507.93584"
|
||||
id="use3067"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48962)"
|
||||
xlink:href="#path3883-1-1"
|
||||
inkscape:tiled-clone-of="#path3883-1-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="507.93583"
|
||||
inkscape:transform-center-x="-98.715201"
|
||||
id="use3069"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80337)"
|
||||
xlink:href="#path3883-1-1"
|
||||
inkscape:tiled-clone-of="#path3883-1-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="98.715218"
|
||||
inkscape:transform-center-x="507.93583"
|
||||
id="use3071"
|
||||
transform="matrix(0,-1,1,0,124.48962,1051.293)"
|
||||
xlink:href="#path3883-1-1"
|
||||
inkscape:tiled-clone-of="#path3883-1-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="-193.85213"
|
||||
inkscape:tile-y0="-34.138981"
|
||||
inkscape:tile-x0="763.95777"
|
||||
inkscape:tile-h="35.571355"
|
||||
inkscape:tile-w="35.571339"
|
||||
inkscape:tile-cy="463.40174"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4"
|
||||
d="m 798.22966,-9.6924378 c -3.6787,9.10509363 -14.04199,13.5040578 -23.1471,9.82535891 -9.10507,-3.67869161 -13.50403,-14.04199711 -9.82534,-23.14709011 3.6787,-9.10509 14.04199,-13.504057 23.14709,-9.825361 9.10509,3.678696 13.50404,14.042002 9.82535,23.1470922 z"
|
||||
inkscape:transform-center-y="-479.75504"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="193.85213"
|
||||
inkscape:transform-center-x="-479.75499"
|
||||
id="use3097"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48957)"
|
||||
xlink:href="#path3883-1-4"
|
||||
inkscape:tiled-clone-of="#path3883-1-4"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="479.75504"
|
||||
inkscape:transform-center-x="193.85215"
|
||||
id="use3099"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80347)"
|
||||
xlink:href="#path3883-1-4"
|
||||
inkscape:tiled-clone-of="#path3883-1-4"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-193.85218"
|
||||
inkscape:transform-center-x="479.75504"
|
||||
id="use3101"
|
||||
transform="matrix(0,-1,1,0,124.48957,1051.293)"
|
||||
xlink:href="#path3883-1-4"
|
||||
inkscape:tiled-clone-of="#path3883-1-4"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="193.8203"
|
||||
inkscape:tile-y0="-34.151876"
|
||||
inkscape:tile-x0="376.28534"
|
||||
inkscape:tile-h="35.571356"
|
||||
inkscape:tile-w="35.57134"
|
||||
inkscape:tile-cy="463.4017"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4-2"
|
||||
d="m 410.55723,-23.027064 c 3.67869,9.105096 -0.72026,19.4683926 -9.82537,23.14709892 -9.10507,3.67868398 -19.46837,-0.72027955 -23.14707,-9.82536842 -3.67869,-9.1050935 0.72026,-19.4683925 9.82535,-23.1470935 9.10509,-3.678694 19.46839,0.720278 23.14709,9.825363 z"
|
||||
inkscape:transform-center-y="-479.7679"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-193.8203"
|
||||
inkscape:transform-center-x="-479.76789"
|
||||
id="use3129"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48961)"
|
||||
xlink:href="#path3883-1-4-2"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-2"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="479.7679"
|
||||
inkscape:transform-center-x="-193.82028"
|
||||
id="use3131"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.8034)"
|
||||
xlink:href="#path3883-1-4-2"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-2"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="193.82029"
|
||||
inkscape:transform-center-x="479.7679"
|
||||
id="use3133"
|
||||
transform="matrix(0,-1,1,0,124.48961,1051.293)"
|
||||
xlink:href="#path3883-1-4-2"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-2"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="-281.8321"
|
||||
inkscape:tile-y0="17.001703"
|
||||
inkscape:tile-x0="857.27527"
|
||||
inkscape:tile-h="24.896278"
|
||||
inkscape:tile-w="24.896273"
|
||||
inkscape:tile-cy="463.40173"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4-7"
|
||||
d="m 880.16207,36.228786 c -3.74392,5.765115 -11.45249,7.403629 -17.21761,3.659715 -5.76511,-3.743903 -7.40362,-11.452487 -3.65971,-17.217603 3.74391,-5.765113 11.45248,-7.403628 17.21761,-3.659718 5.76511,3.743909 7.40361,11.452492 3.65971,17.217606 z"
|
||||
inkscape:transform-center-y="-433.95189"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="281.8321"
|
||||
inkscape:transform-center-x="-433.95185"
|
||||
id="use3171"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48958)"
|
||||
xlink:href="#path3883-1-4-7"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="433.95189"
|
||||
inkscape:transform-center-x="281.83212"
|
||||
id="use3173"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80346)"
|
||||
xlink:href="#path3883-1-4-7"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-281.83214"
|
||||
inkscape:transform-center-x="433.95189"
|
||||
id="use3175"
|
||||
transform="matrix(0,-1,1,0,124.48958,1051.293)"
|
||||
xlink:href="#path3883-1-4-7"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="281.80334"
|
||||
inkscape:tile-y0="16.983003"
|
||||
inkscape:tile-x0="293.63983"
|
||||
inkscape:tile-h="24.896278"
|
||||
inkscape:tile-w="24.896279"
|
||||
inkscape:tile-cy="463.40171"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4-7-0"
|
||||
d="m 316.52663,22.652196 c 3.74391,5.765124 2.10541,13.473696 -3.65971,17.217608 -5.76511,3.743908 -13.47369,2.105398 -17.2176,-3.659718 -3.74392,-5.765114 -2.10542,-13.473687 3.65971,-17.217611 5.76511,-3.743904 13.47369,-2.105386 17.2176,3.659721 z"
|
||||
inkscape:transform-center-y="-433.97057"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-281.80334"
|
||||
inkscape:transform-center-x="-433.97055"
|
||||
id="use3203"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.4896)"
|
||||
xlink:href="#path3883-1-4-7-0"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="433.97057"
|
||||
inkscape:transform-center-x="-281.80332"
|
||||
id="use3205"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80342)"
|
||||
xlink:href="#path3883-1-4-7-0"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="281.80332"
|
||||
inkscape:transform-center-x="433.97057"
|
||||
id="use3207"
|
||||
transform="matrix(0,-1,1,0,124.4896,1051.293)"
|
||||
xlink:href="#path3883-1-4-7-0"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="book"
|
||||
inkscape:label="Book"
|
||||
style="display:inline"
|
||||
transform="translate(0,125.47572)">
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
d="m 628.62755,669.05838 19.4375,-30.625 237.65628,-44.84375 -53.8125,-312.375 -47.09378,-8.21875 -196.92188,29.875 -196.92187,-29.875 -47.0625,8.21875 -53.8125,312.375 237.65625,44.84375 19.40625,30.625 40.73437,6 z"
|
||||
id="bookShading"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#352f42;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 624.37755,687.02459 c 22.02381,-3.33334 22.99405,-34.51041 32.875,-37.84375 80.95238,-15 246.04608,-40.27455 242.84378,-45 4.6212,-3.15333 -50.402,-325.63145 -57.8438,-325.71875 -0.39,-2.23828 -3.8554,-3.02407 -8.4062,-3.03125 -5.8511,-0.009 -13.5121,1.25745 -18.75,2.3125 2.619,2.61905 7.9077,2.95684 9.8125,7.71875 2.2619,11.90476 56.6832,309.0794 50.9062,308 0.2825,6.37389 -154.51933,22.85268 -231.78123,34.28125 -15.47619,3.45238 -13.81399,34.74851 -28.21875,37.84375 l -27.90625,-0.71875 -27.90625,0.71875 c -14.40476,-3.09524 -12.74256,-34.39137 -28.21875,-37.84375 -77.2619,-11.42857 -232.06378,-27.90736 -231.78125,-34.28125 -5.77694,1.0794 48.64434,-296.09524 50.90625,-308 1.90476,-4.76191 7.19345,-5.0997 9.8125,-7.71875 -5.23791,-1.05505 -12.89897,-2.32173 -18.75,-2.3125 -4.5508,0.007 -8.0162,0.79297 -8.40625,3.03125 -7.44179,0.0873 -62.46496,322.56542 -57.84375,325.71875 -3.20233,4.72545 161.89137,30 242.84375,45 9.88095,3.33334 10.85119,34.51041 32.875,37.84375 l 36.46875,0.71875 z"
|
||||
id="bookCover"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccscccccccccccscccccc" />
|
||||
<g
|
||||
id="bookPages"
|
||||
transform="translate(-190.45045,127.31819)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="bookPageLeft"
|
||||
d="m 773.87535,479.18577 c -54.0564,-66.01358 -162.66742,-25.90721 -245.12212,-37.36617 15.9429,-99.14492 31.8858,-198.28985 47.8287,-297.43477 63.5225,9.4661 160.67457,-33.38045 190.56751,28.39829 2.98929,101.13779 3.73662,205.26486 6.72591,306.40265 z"
|
||||
style="fill:#262230;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="bookPageRight"
|
||||
d="m 782.84323,479.18577 c 54.0564,-66.01358 162.66742,-25.90721 245.12207,-37.36617 -15.9429,-99.14492 -31.88575,-198.28985 -47.82865,-297.43477 -63.5225,9.46609 -160.67457,-33.38046 -190.56751,28.39828 -2.98929,101.1378 -3.73662,205.26487 -6.72591,306.40266 z"
|
||||
style="fill:#262230;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 615.95128,330.38838 c 31.97315,-40.8005 85.78627,-16.21216 153.82568,-17.97615 4.28396,27.97176 8.30065,61.82377 12.58461,89.79553 -73.28596,5.34568 -92.71946,-20.73283 -164.58516,8.80464 z"
|
||||
id="bookLinkingPanel"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
216
Sources/Plasma/Apps/plClient/external/Loading_Text_rasterfont.svg
vendored
Normal file
@ -0,0 +1,216 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1386.2081"
|
||||
height="296.01321"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.0 r9654"
|
||||
sodipodi:docname="Loading_Text_rasterfont.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.74023945"
|
||||
inkscape:cx="563.12545"
|
||||
inkscape:cy="89.24182"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="textUpdating"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="998"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="false"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<sodipodi:guide
|
||||
position="4.0136719e-006,-1.9531228e-008"
|
||||
orientation="-296.01321,0"
|
||||
id="guide3001" />
|
||||
<sodipodi:guide
|
||||
position="4.0136719e-006,296.01321"
|
||||
orientation="0,1386.2081"
|
||||
id="guide3003" />
|
||||
<sodipodi:guide
|
||||
position="1386.2081,296.01321"
|
||||
orientation="296.01321,0"
|
||||
id="guide3005" />
|
||||
<sodipodi:guide
|
||||
position="1386.2081,-1.9531228e-008"
|
||||
orientation="0,-1386.2081"
|
||||
id="guide3007" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3797"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="10px"
|
||||
spacingy="10px"
|
||||
originy="33px"
|
||||
originx="335px" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Background"
|
||||
inkscape:groupmode="layer"
|
||||
id="background"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="rect3009"
|
||||
width="1386.2081"
|
||||
height="296.01321"
|
||||
x="-314.84811"
|
||||
y="319.4097"
|
||||
inkscape:export-xdpi="12.465658"
|
||||
inkscape:export-ydpi="12.465658" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circles"
|
||||
inkscape:label="Circles"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#3e364e;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="path2999"
|
||||
sodipodi:cx="-193.18074"
|
||||
sodipodi:cy="430.94165"
|
||||
sodipodi:rx="27.018284"
|
||||
sodipodi:ry="27.018284"
|
||||
d="m -166.16246,430.94165 c 0,14.92179 -12.09649,27.01828 -27.01828,27.01828 -14.92179,0 -27.01828,-12.09649 -27.01828,-27.01828 0,-14.92179 12.09649,-27.01828 27.01828,-27.01828 14.92179,0 27.01828,12.09649 27.01828,27.01828 z"
|
||||
transform="translate(5.1990242,36.474655)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#3e364e;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="path2999-0"
|
||||
sodipodi:cx="-193.18074"
|
||||
sodipodi:cy="430.94165"
|
||||
sodipodi:rx="27.018284"
|
||||
sodipodi:ry="27.018284"
|
||||
d="m -166.16246,430.94165 c 0,14.92179 -12.09649,27.01828 -27.01828,27.01828 -14.92179,0 -27.01828,-12.09649 -27.01828,-27.01828 0,-14.92179 12.09649,-27.01828 27.01828,-27.01828 14.92179,0 27.01828,12.09649 27.01828,27.01828 z"
|
||||
transform="translate(1151.1625,36.474655)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="textLinking"
|
||||
inkscape:label="Linking Text"
|
||||
style="display:none"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<g
|
||||
style="font-size:195.61486816px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3e364e;fill-opacity:1;stroke:none;font-family:Hobo Std;-inkscape-font-specification:Hobo Std Bold"
|
||||
id="text3799">
|
||||
<path
|
||||
d="m 64.536466,548.776 c 1.377337,0.12226 3.072643,0.12226 5.085921,0 2.013073,-0.12226 3.121542,-1.10032 3.32541,-2.93418 -0.07135,-0.78608 -0.776515,-4.27812 -2.11551,-10.47613 -1.339202,-6.198 -2.88478,-12.34167 -4.636736,-18.43104 -1.752156,-6.0893 -3.283244,-9.36399 -4.59327,-9.82408 -1.624161,0.20531 -3.940112,1.64221 -6.947862,4.31071 -3.007925,2.66858 -6.743877,5.33711 -11.207867,8.00562 -4.464142,2.66857 -9.69254,4.10547 -15.685208,4.31072 -5.644286,0.29345 -10.738353,-1.90719 -15.282216,-6.60192 -4.5439543,-4.69466 -6.9483532,-13.64391 -7.2132041,-26.84779 0.2800977,-18.15565 2.2410482,-34.50738 5.8828571,-49.05523 3.641721,-14.54765 7.283487,-26.33509 10.925309,-35.36237 3.641712,-9.027 5.602665,-14.3375 5.882866,-15.93154 -0.06934,-1.70329 -0.517615,-2.79546 -1.344833,-3.27651 -0.827337,-0.48072 -1.617937,-0.69263 -2.371801,-0.63573 l -31.1023638,0 c -1.4594784,0.40259 -3.1130135,5.24603 -4.9606102,14.53033 -1.847639,9.28459 -3.64177,20.59546 -5.382397,33.93263 -1.74066,13.33739 -3.180243,26.28651 -4.318755,38.84738 -1.138534,12.56103 -1.728426,22.31922 -1.769675,29.27462 0.122244,19.32082 0.317856,32.02746 0.586837,38.11995 0.26896,6.09252 2.811918,8.77403 7.628881,8.04456 z"
|
||||
id="path2998"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 129.7671,548.776 3.91225,0 c 0.89242,0.0326 1.60152,-0.0815 2.12728,-0.34232 0.52565,-0.26082 0.79462,-0.86396 0.8069,-1.80941 -0.40758,-1.6138 -2.03768,-9.87842 -4.89031,-24.79387 -2.85272,-14.9154 -4.48283,-35.01455 -4.89031,-60.29751 0.43193,-19.41034 2.15984,-35.94772 5.18373,-49.61218 3.02379,-13.66419 4.7517,-21.25231 5.18373,-22.76439 -0.15084,-1.75627 -1.07185,-2.74248 -2.76303,-2.95863 -1.69128,-0.21583 -3.24803,-0.27288 -4.67024,-0.17116 l -21.12614,0 c -0.8757,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.523657,5.32956 -2.81042,14.48869 -3.860293,27.47742 -1.049902,12.98898 -1.597002,31.42746 -1.641304,55.3155 0.04225,23.9529 0.609766,40.83833 1.702551,50.65635 1.092758,9.81806 2.457213,15.56085 4.093366,17.22838 1.63612,1.66753 3.29038,2.25196 4.96276,1.75327 z"
|
||||
id="path3000"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 273.31853,548.776 c 1.67224,0.49869 3.32649,-0.0857 4.96275,-1.75327 1.63602,-1.66753 3.00047,-7.41032 4.09337,-17.22838 1.09265,-9.81801 1.66017,-26.70345 1.70256,-50.65635 -0.0368,-23.88804 -0.53807,-42.32653 -1.50378,-55.3155 -0.96596,-12.98873 -2.17632,-22.14786 -3.63105,-27.47743 -1.45499,-5.32926 -2.93431,-8.44886 -4.43795,-9.35883 -1.50389,-0.90963 -2.81205,-1.22954 -3.92447,-0.95971 l -14.86654,0 c -1.9603,-0.0813 -3.76156,-0.065 -5.4038,0.0489 -1.64242,0.11427 -2.51452,0.81521 -2.61631,2.10283 0.41558,2.74688 2.07829,10.99519 4.98811,24.74496 2.90964,13.75004 4.57234,30.01845 4.98812,48.80529 0.057,1.66279 0.0407,3.86342 -0.0489,6.60191 -0.0898,2.73865 -0.59509,4.25465 -1.516,4.54799 -0.8722,-0.0855 -1.57314,-0.55009 -2.10283,-1.39374 -0.52988,-0.84351 -0.93741,-1.5526 -1.22258,-2.12728 -12.10511,-22.33593 -22.06201,-39.56429 -29.87073,-51.68513 -7.80886,-12.12058 -13.99841,-20.48119 -18.56869,-25.08186 -4.57037,-4.60035 -8.05033,-6.78831 -10.43989,-6.56387 l -15.45338,0 c -0.8757,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.48381,9.35883 -1.52365,5.32956 -2.81041,14.48869 -3.86029,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0422,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96276,1.75327 l 18.19195,0 c 0.99839,0.0856 2.13131,0.11003 3.39876,0.0734 1.26736,-0.0367 1.96015,-0.64796 2.07838,-1.83386 -0.33421,-4.4624 -1.6709,-12.99598 -4.01005,-25.60077 -2.33924,-12.60473 -3.67592,-32.43491 -4.01005,-59.4906 -0.0471,-1.54308 -0.10509,-4.30338 -0.17388,-8.28093 -0.0689,-3.97735 0.13399,-7.73745 0.60857,-11.28031 0.4745,-3.54265 1.50328,-5.43356 3.08633,-5.67276 2.24467,0.37323 5.23198,3.27843 8.96194,8.71562 3.72986,5.43739 7.2533,11.1681 10.57031,17.19215 3.3169,6.02422 5.47829,10.10309 6.48419,12.23664 9.75036,20.37272 16.02685,35.92026 18.8295,46.64268 2.80248,10.72247 4.65958,18.01083 5.57132,21.86511 0.91157,3.85429 3.40623,5.66552 7.48399,5.43368 z"
|
||||
id="path3002"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 393.94758,386.02653 c -2.11923,0.0368 -3.45591,0.40361 -4.01006,1.10032 -0.55432,0.69703 -1.10856,2.09076 -1.6627,4.18121 -3.40277,11.16696 -8.16026,21.78314 -14.27246,31.84859 -6.11235,10.06569 -11.94207,18.30555 -17.4892,24.7196 -5.54723,6.41424 -9.1745,9.72758 -10.88184,9.94001 -1.8502,-0.37891 -2.89347,-2.16387 -3.12979,-5.35489 -0.23641,-3.19083 -0.30161,-5.51372 -0.19562,-6.96869 0.39934,-14.65858 1.99684,-27.54453 4.7925,-38.65789 2.79558,-11.11308 4.39308,-17.00589 4.79251,-17.67847 -0.11823,-1.75627 -0.90884,-2.74248 -2.3718,-2.95863 -1.46307,-0.21583 -2.8894,-0.27288 -4.27902,-0.17116 l -19.75685,0 c -0.87569,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52366,5.32956 -2.81042,14.48869 -3.8603,27.47742 -1.04989,12.98898 -1.59699,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45722,15.56085 4.09337,17.22838 1.63613,1.66753 3.29038,2.25196 4.96276,1.75327 l 23.86471,0 c 1.09619,0.008 1.9846,-0.25266 2.66521,-0.78245 0.68052,-0.52978 1.03099,-1.37744 1.05142,-2.54296 -0.0822,-0.89353 -0.65691,-4.36625 -1.72428,-10.41817 -1.06747,-6.05189 -2.13488,-12.45155 -3.20225,-19.19899 -1.06746,-6.74738 -1.64222,-11.61112 -1.72429,-14.59123 0.6031,-5.94575 3.60249,-11.61035 8.99817,-16.99382 5.39558,-5.38335 9.56864,-8.26048 12.51919,-8.6314 2.29022,-0.0529 6.16986,5.28568 11.63893,16.01576 5.46892,10.7302 8.76172,27.16977 9.87843,49.31877 -0.12642,1.26741 -0.0205,2.84046 0.31787,4.71914 0.33817,1.8787 1.6667,2.91381 3.9856,3.10535 l 23.86471,0 c 2.23312,0.15894 4.17294,0.13448 5.81946,-0.0734 1.64629,-0.20783 2.51024,-1.55267 2.59187,-4.0345 -0.4638,-19.1084 -3.70951,-35.2935 -9.73715,-48.55533 -6.02787,-13.26173 -12.05562,-23.57846 -18.08328,-30.95022 -6.02785,-7.3716 -9.27356,-11.7765 -9.73714,-13.2147 0.41046,-1.47666 3.28426,-5.39132 8.62143,-11.74399 5.33698,-6.35246 10.67405,-14.10691 16.01123,-23.26338 5.33696,-9.15621 8.21077,-18.67841 8.62144,-28.56665 -0.13868,-1.46692 -0.93743,-2.24937 -2.39626,-2.34734 -1.45906,-0.0976 -2.74683,-0.0976 -3.86334,0 z"
|
||||
id="path3004"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 484.91374,548.776 3.91224,0 c 0.89243,0.0326 1.60153,-0.0815 2.12729,-0.34232 0.52565,-0.26082 0.79462,-0.86396 0.8069,-1.80941 -0.40758,-1.6138 -2.03768,-9.87842 -4.89031,-24.79387 -2.85273,-14.9154 -4.48283,-35.01455 -4.89031,-60.29751 0.43193,-19.41034 2.15984,-35.94772 5.18372,-49.61218 3.02379,-13.66419 4.7517,-21.25231 5.18373,-22.76439 -0.15083,-1.75627 -1.07184,-2.74248 -2.76302,-2.95863 -1.69129,-0.21583 -3.24803,-0.27288 -4.67024,-0.17116 l -21.12614,0 c -0.8757,-0.26983 -2.04632,0.0501 -3.51185,0.95972 -1.46559,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52366,5.32956 -2.81042,14.48869 -3.8603,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96276,1.75327 z"
|
||||
id="path3006"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 628.46517,548.776 c 1.67224,0.49869 3.32649,-0.0857 4.96275,-1.75327 1.63602,-1.66753 3.00047,-7.41032 4.09337,-17.22838 1.09265,-9.81801 1.66017,-26.70345 1.70256,-50.65635 -0.0368,-23.88804 -0.53807,-42.32653 -1.50378,-55.3155 -0.96597,-12.98873 -2.17632,-22.14786 -3.63106,-27.47743 -1.45498,-5.32926 -2.9343,-8.44886 -4.43795,-9.35883 -1.50388,-0.90963 -2.81204,-1.22954 -3.92447,-0.95971 l -14.86653,0 c -1.9603,-0.0813 -3.76157,-0.065 -5.4038,0.0489 -1.64242,0.11427 -2.51453,0.81521 -2.61631,2.10283 0.41558,2.74688 2.07828,10.99519 4.98811,24.74496 2.90963,13.75004 4.57234,30.01845 4.98812,48.80529 0.0569,1.66279 0.0406,3.86342 -0.0489,6.60191 -0.0898,2.73865 -0.59509,4.25465 -1.51599,4.54799 -0.8722,-0.0855 -1.57315,-0.55009 -2.10283,-1.39374 -0.52989,-0.84351 -0.93741,-1.5526 -1.22258,-2.12728 -12.10511,-22.33593 -22.06201,-39.56429 -29.87073,-51.68513 -7.80886,-12.12058 -13.99842,-20.48119 -18.56869,-25.08186 -4.57037,-4.60035 -8.05033,-6.78831 -10.4399,-6.56387 l -15.45337,0 c -0.8757,-0.26983 -2.04632,0.0501 -3.51186,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52365,5.32956 -2.81042,14.48869 -3.86029,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60976,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96275,1.75327 l 18.19195,0 c 0.9984,0.0856 2.13132,0.11003 3.39876,0.0734 1.26736,-0.0367 1.96016,-0.64796 2.07839,-1.83386 -0.33422,-4.4624 -1.6709,-12.99598 -4.01006,-25.60077 -2.33924,-12.60473 -3.67592,-32.43491 -4.01005,-59.4906 -0.0471,-1.54308 -0.10508,-4.30338 -0.17388,-8.28093 -0.0689,-3.97735 0.13399,-7.73745 0.60857,-11.28031 0.47451,-3.54265 1.50329,-5.43356 3.08633,-5.67276 2.24468,0.37323 5.23199,3.27843 8.96195,8.71562 3.72986,5.43739 7.25329,11.1681 10.57031,17.19215 3.31689,6.02422 5.47829,10.10309 6.48419,12.23664 9.75035,20.37272 16.02684,35.92026 18.82949,46.64268 2.80248,10.72247 4.65959,18.01083 5.57133,21.86511 0.91156,3.85429 3.40622,5.66552 7.48399,5.43368 z"
|
||||
id="path3008"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 730.11984,551.71019 c 12.68212,0.0611 23.99502,-2.89751 33.93874,-8.87592 9.94352,-5.97839 15.19244,-15.34332 15.7468,-28.09482 -0.0315,-2.50911 -0.46862,-8.0104 -1.31133,-16.50389 -0.84294,-8.49338 -1.90311,-16.66079 -3.18051,-24.50226 -1.27764,-7.84131 -2.58413,-12.03852 -3.91949,-12.59163 -1.18345,0.13412 -4.64168,1.2136 -10.3747,3.23847 -5.73323,2.02503 -11.33595,4.19125 -16.80818,6.49867 -5.47239,2.30758 -8.40899,3.95217 -8.80979,4.93378 0.19071,1.58309 1.52618,3.09003 4.00643,4.52082 2.48009,1.43093 4.96025,3.4595 7.44051,6.08572 2.48008,2.62634 3.81556,6.52409 4.00643,11.69327 -0.29351,6.77312 -2.98318,11.61452 -8.06901,14.52422 -5.086,2.90976 -10.80765,4.32795 -17.16498,4.25457 -12.53147,-0.49308 -21.01615,-5.13072 -25.45406,-13.91293 -4.43799,-8.78213 -6.51637,-18.7502 -6.23514,-29.90424 -0.058,-9.32772 1.25333,-18.7316 3.93398,-28.21165 2.68057,-9.47984 7.07822,-17.44922 13.19296,-23.90818 6.11464,-6.45869 14.29413,-9.82032 24.53849,-10.0849 7.94515,0.22715 12.94172,1.81619 14.9897,4.76714 2.0478,2.95122 3.1611,5.90231 3.3399,8.85328 0.17862,2.95121 1.43681,4.54026 3.7746,4.76715 6.23096,-0.0325 11.12941,-1.58108 14.69537,-4.6458 3.56573,-3.06447 5.3833,-7.44944 5.4527,-13.15493 -0.21868,-7.00084 -2.69402,-12.58182 -7.42603,-16.74296 -4.73224,-4.16084 -10.40982,-7.14815 -17.03276,-8.96195 -6.62314,-1.81348 -12.88031,-2.69977 -18.77154,-2.65888 -15.61162,0.30204 -28.7925,4.97982 -39.54268,14.03337 -10.75025,9.05386 -18.90318,20.67225 -24.45879,34.85523 -5.55564,14.1832 -8.34734,29.11976 -8.3751,44.80972 -0.008,22.20612 5.63199,40.14539 16.92046,53.81784 11.28843,13.67249 28.27409,20.70638 50.95702,21.10169 z"
|
||||
id="path3010"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="textUpdating"
|
||||
inkscape:label="Updating Text"
|
||||
style="display:inline"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<g
|
||||
transform="translate(-2.0722657e-6,0.02741704)"
|
||||
style="font-size:220px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3e364e;fill-opacity:1;stroke:none;display:inline;font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="text3799-0">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 25.320627,483.66859 c -0.03675,10.74324 -1.283395,18.73646 -3.739951,23.97969 -3.483362,7.91992 -9.936606,11.87987 -19.3597511,11.87985 -15.5831789,0.0367 -23.3564039,-11.91648 -23.3196999,-35.85954 l 0,-73.25906 c 0.0045,-3.63898 0.105376,-6.8656 0.302495,-9.67987 0.197045,-2.814 0.462875,-5.16063 0.797491,-7.03991 l -29.919615,0 c 0.623315,5.97672 0.916645,10.52333 0.879989,13.63982 l 0.219997,80.07897 c -8e-6,16.05983 4.399931,29.25965 13.19983,39.59949 9.203186,10.74319 21.816345,16.09645 37.8395129,16.05979 15.6197241,-0.0367 28.1595501,-5.46326 37.6195161,-16.27979 8.79978,-10.37651 13.199719,-23.50299 13.19983,-39.37949 l 0,-71.93907 0,-8.1399 c 0.10072,-2.86441 0.229051,-5.44021 0.384995,-7.7274 0.155722,-2.28691 0.394052,-4.25771 0.71499,-5.91242 l -30.139612,0 c 0.439913,1.86095 0.769907,3.91425 0.989984,6.15992 0.219913,2.24594 0.329913,4.73924 0.329999,7.4799 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path2998-1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 117.16073,506.1083 c 14.26308,-5.93988 25.77626,-14.07977 34.53956,-24.41969 9.93644,-11.91644 14.92304,-25.04292 14.9598,-39.37949 -1e-4,-14.11637 -5.06003,-25.70288 -15.1798,-34.75955 -10.15661,-9.23974 -23.50309,-13.85968 -40.03949,-13.85982 l -32.99957,0 c 0.325401,1.86095 0.554564,4.51924 0.687489,7.97489 0.132902,3.45592 0.197068,7.7642 0.192499,12.92484 l 0,105.15864 c 0.03666,7.66325 -0.256673,14.55649 -0.879988,20.67974 l 28.59963,0 c -0.3392,-1.7554 -0.59587,-4.34953 -0.76999,-7.7824 -0.17421,-3.43286 -0.21087,-7.73197 -0.11,-12.89734 l 0,-7.6999 z m -5.05993,-88.43886 c 7.51652,1.2e-4 13.8231,2.20009 18.91975,6.59991 5.71986,4.87672 8.57982,11.4033 8.57989,19.57975 -0.0367,8.57998 -3.70335,16.71986 -10.99986,24.41969 -6.37997,6.81997 -13.85987,11.8799 -22.43971,15.1798 l 0,-65.77915 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3000-7" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 188.44123,393.68975 c 0.62331,3.33676 0.91664,10.30333 0.87999,20.89973 l 0,105.15864 c 0.0366,10.08322 -0.25667,16.97646 -0.87999,20.67974 l 45.97941,0 c 20.86298,0 35.23612,-6.81991 43.11944,-20.45974 6.34315,-10.96316 9.49643,-28.85624 9.45988,-53.67931 -0.0368,-48.39925 -19.32317,-72.59892 -57.85925,-72.59906 z m 71.27908,86.89888 c 0.0778,12.75529 -2.82796,21.94933 -8.71739,27.58214 -5.88958,5.63287 -15.23028,8.392 -28.02213,8.2774 l -6.81992,0 0,-98.99873 5.49993,0 c 14.73975,-0.0365 24.85961,3.11675 30.35961,9.45988 5.09652,5.68337 7.66315,15.87656 7.6999,30.5796 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3002-4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 328.51225,540.42786 c 0.0366,-2.01664 1.06329,-6.78324 3.07996,-14.29982 l 5.05993,-17.81977 38.27951,0 4.39994,17.81977 c 0.87991,3.6208 1.5399,6.60909 1.97998,8.96489 0.43991,2.3558 0.65991,4.13411 0.65999,5.33493 l 30.57961,0 -8.57989,-32.11959 5.27993,0 0,-23.3197 -11.43985,0 -24.19969,-91.29882 -32.55958,0 -38.71951,146.73811 z m 28.15964,-104.49866 12.31984,49.05937 -25.95967,0 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3004-0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 497.1829,417.66944 c 4.0607,1.2e-4 7.43398,0.0551 10.11987,0.165 2.68571,0.11012 4.73901,0.27511 6.15992,0.49499 l 0,-24.63968 -90.85883,0 0,24.63968 c 2.45663,-0.43987 7.88322,-0.65987 16.27979,-0.65999 l 15.6198,0 0,102.07868 c 0.0366,9.86322 -0.2567,16.75646 -0.87999,20.67974 l 28.81963,0 c -0.62339,-3.11662 -0.91672,-9.8632 -0.87999,-20.23974 l 0,-102.51868 15.6198,0 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3006-9" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 561.23086,540.42786 c -0.62337,-3.55662 -0.9167,-10.30319 -0.87999,-20.23974 l 0,-106.25863 c -0.0367,-10.1564 0.25662,-16.90298 0.87999,-20.23974 l -29.91962,0 c 0.3254,1.43929 0.55457,3.89592 0.68749,7.3699 0.1329,3.47426 0.19707,7.91086 0.1925,13.30983 l 0,105.37864 c 0.005,4.95912 -0.0596,9.17573 -0.1925,12.64984 -0.13292,3.47412 -0.36209,6.15075 -0.68749,8.0299 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3008-4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 681.95847,540.64785 c -0.62343,-5.46326 -0.91676,-14.11647 -0.87998,-25.95966 l 0,-97.01875 c -1.1e-4,-8.79976 0.21989,-16.93965 0.65999,-24.41969 l -27.71965,0 c 0.69658,7.70004 1.06324,15.83993 1.09999,24.41969 l 0,46.4194 -43.11944,-70.39909 -29.25963,0 6.59992,12.09984 0,108.01861 c 0.005,5.60078 -0.0596,10.62404 -0.1925,15.0698 -0.13293,4.44578 -0.36209,8.36906 -0.68749,11.76985 l 27.93964,0 c -0.62337,-7.22323 -0.9167,-15.43645 -0.87999,-24.63968 l 0,-69.7391 39.59949,64.01917 c -0.11008,0.55919 -0.16508,1.47584 -0.165,2.74997 -7e-5,1.27417 0.0549,2.85082 0.165,4.72994 -0.0367,5.75661 -0.4034,13.38317 -1.09999,22.8797 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3010-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 801.81037,540.42786 c 1.97987,0.21999 3.51985,0.21999 4.61994,0 -0.0368,-1.4254 -0.18344,-3.85454 -0.44,-7.28741 -0.25677,-3.43287 -0.40343,-7.23698 -0.43999,-11.41235 l 0,-25.51967 c -0.005,-3.84074 0.0595,-7.48903 0.1925,-10.94487 0.1328,-3.45573 0.36197,-6.77401 0.68749,-9.95487 l -26.83966,0 c 0.47658,9.67994 0.62325,15.39986 0.44,17.15978 0.0366,17.59981 -7.07665,26.39969 -21.33973,26.39966 -17.41648,-0.0366 -26.14303,-17.34306 -26.17966,-51.91933 -3e-5,-34.13612 10.77982,-51.22255 32.33958,-51.25934 10.33979,-0.0365 20.23966,3.99674 29.69962,12.09985 l 0,-25.07968 c -8.35998,-7.29643 -18.25984,-10.96305 -29.69962,-10.99986 -19.95104,0.0827 -35.04833,6.46256 -45.29192,19.13975 -10.24362,12.67746 -15.38605,31.1572 -15.4273,55.43929 0.0367,50.85603 18.22308,76.30235 54.5593,76.33902 8.13983,-0.0367 15.39973,-1.72331 21.77972,-5.05994 5.05985,-2.82329 8.5798,-5.97658 10.55987,-9.45987 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3012" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 22 KiB |
13
Sources/Plasma/Apps/plClient/external/Makefile
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
SOURCE_DIR = .
|
||||
BINARY_DIR = .
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: $(BINARY_DIR)/resource.dat
|
||||
|
||||
$(BINARY_DIR)/resource.dat: $(SOURCE_DIR)/makeres.py $(SOURCE_DIR)/render_svg.py $(SOURCE_DIR)/create_resource_dat.py $(SOURCE_DIR)/Cursor_Base.svg $(SOURCE_DIR)/Linking_Book.svg $(SOURCE_DIR)/Loading_Text_rasterfont.svg $(SOURCE_DIR)/Voice_Chat.svg
|
||||
python $(SOURCE_DIR)/makeres.py --optimize --render --package -i $(SOURCE_DIR) -o $(BINARY_DIR)
|
||||
|
||||
clean:
|
||||
rm -rf $(BINARY_DIR)/render
|
||||
rm -fv $(BINARY_DIR)/resource.dat
|
1595
Sources/Plasma/Apps/plClient/external/Voice_Chat.svg
vendored
Normal file
After Width: | Height: | Size: 48 KiB |
62
Sources/Plasma/Apps/plClient/external/create_resource_dat.py
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
from __future__ import with_statement
|
||||
|
||||
import os
|
||||
import sys
|
||||
import glob
|
||||
import struct
|
||||
from optparse import OptionParser
|
||||
|
||||
version = 1
|
||||
|
||||
def create_resource_dat(resfilepath, inrespath):
|
||||
datHeader = 0xCBBCF00D
|
||||
datVersion = 0x00000001
|
||||
|
||||
## Get list of files to archive
|
||||
resourceList = glob.glob(os.path.join(inrespath, "*"))
|
||||
resourceList.sort()
|
||||
if len(resourceList) == 0:
|
||||
print("No files found in '{0}'. Quitting.\n".format(inrespath))
|
||||
return False
|
||||
print("{0} resources found in '{1}'.".format(len(resourceList), inrespath, ))
|
||||
|
||||
## Write each resource into the output file
|
||||
with open(resfilepath, "wb") as datFile:
|
||||
datFile.write(struct.pack("<I",datHeader))
|
||||
datFile.write(struct.pack("<I",datVersion))
|
||||
datFile.write(struct.pack("<I",len(resourceList)))
|
||||
for res in resourceList:
|
||||
with open(res, "rb") as resFile:
|
||||
name = os.path.basename(res)
|
||||
datFile.write(struct.pack("<I", len(name)))
|
||||
datFile.write(name)
|
||||
datFile.write(struct.pack("<I", os.path.getsize(res)))
|
||||
datFile.write(resFile.read())
|
||||
|
||||
print("{0} resources written to '{1}'.\n".format(len(resourceList), resfilepath))
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = OptionParser(usage="usage: %prog [options]", version="%prog {0}".format(version))
|
||||
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
|
||||
parser.add_option("-o", "--outfile", dest="outfile", default="resource.dat", help="Sets name for output file")
|
||||
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for files to add to resource file")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
## Send output to OS's null if unwanted
|
||||
if not options.verbose:
|
||||
sys.stdout = open(os.devnull,"w")
|
||||
sys.stderr = open(os.devnull,"w")
|
||||
|
||||
## Compute Paths
|
||||
outfile = os.path.expanduser(options.outfile)
|
||||
inpath = os.path.expanduser(options.inpath)
|
||||
|
||||
## Do the work!
|
||||
print("Creating {0}...".format(outfile))
|
||||
create_resource_dat(outfile, inpath)
|
52
Sources/Plasma/Apps/plClient/external/makeres.py
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import glob
|
||||
import subprocess
|
||||
from optparse import OptionParser
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = OptionParser(usage="usage: %prog [options]")
|
||||
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
|
||||
parser.add_option("-r", "--render", dest="render", default=False, action="store_true", help="Perform SVG Render to images")
|
||||
parser.add_option("-p", "--package", dest="package", default=False, action="store_true", help="Perform packaging into resource container")
|
||||
parser.add_option("-z", "--optimize", dest="optimize", default=False, action="store_true", help="Perform PNGCrush optimization on PNG resources")
|
||||
parser.add_option("-o", "--outpath", dest="outpath", default=".", help="Sets output path for resource container")
|
||||
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for files to add to resource file")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
## Send output to OS's null if unwanted
|
||||
if not options.verbose:
|
||||
sys.stdout = open(os.devnull,"w")
|
||||
sys.stderr = open(os.devnull,"w")
|
||||
|
||||
## Compute Paths
|
||||
outpath = os.path.expanduser(options.outpath)
|
||||
inpath = os.path.expanduser(options.inpath)
|
||||
|
||||
## Do the work!
|
||||
if options.render:
|
||||
ret = subprocess.call(["python", os.path.join(inpath, "render_svg.py"), "-i", inpath, "-o", os.path.join(outpath, "render")], stdout=sys.stdout, stderr=sys.stderr)
|
||||
if ret != 0:
|
||||
print("An error has occurred. Aborting.")
|
||||
exit(1)
|
||||
|
||||
if options.optimize:
|
||||
print("Optimizing PNGs with pngcrush...")
|
||||
for png in glob.glob(os.path.join("render", "*.png")):
|
||||
#print("pngcrushing - {0}".format(png))
|
||||
ret = subprocess.call(["pngcrush", "-q", "-l 9", "-brute", png, "temp.png"], stdout=sys.stdout, stderr=sys.stderr)
|
||||
if ret != 0:
|
||||
print("An error has occurred. Aborting.")
|
||||
exit(1)
|
||||
os.remove(png)
|
||||
os.rename("temp.png", png)
|
||||
|
||||
if options.package:
|
||||
ret = subprocess.call(["python", os.path.join(inpath, "create_resource_dat.py"), "-i", os.path.join(outpath, "render"), "-o", "resource.dat"], stdout=sys.stdout, stderr=sys.stderr)
|
||||
if ret != 0:
|
||||
print("An error has occurred. Aborting.")
|
||||
exit(1)
|
220
Sources/Plasma/Apps/plClient/external/render_svg.py
vendored
Normal file
@ -0,0 +1,220 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
from __future__ import with_statement
|
||||
|
||||
|
||||
import os
|
||||
import math
|
||||
from xml.dom.minidom import parse
|
||||
from optparse import OptionParser
|
||||
import scalergba
|
||||
|
||||
try:
|
||||
import rsvg
|
||||
import cairo
|
||||
except ImportError as e:
|
||||
print("Rendering SVG resources requires PyGTK. Exiting...")
|
||||
exit(1)
|
||||
|
||||
cursorList = {
|
||||
"cursor_up": ["circleOuter"],
|
||||
"cursor_poised": ["circleOuter", "circleInnerOpen"],
|
||||
"cursor_clicked": ["circleOuter", "circleInnerClosed"],
|
||||
"cursor_disabled": ["cross"],
|
||||
|
||||
"cursor_open": ["circleOuter", "arrowTranslucentUpper", "arrowTranslucentLower"],
|
||||
"cursor_grab": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentLower"],
|
||||
"cursor_updown_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentLower"],
|
||||
"cursor_updown_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueUpper", "arrowOpaqueLower"],
|
||||
|
||||
"cursor_leftright_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentLeft", "arrowTranslucentRight"],
|
||||
"cursor_leftright_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueLeft", "arrowOpaqueRight"],
|
||||
|
||||
"cursor_4way_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentRight", "arrowTranslucentLower", "arrowTranslucentLeft"],
|
||||
"cursor_4way_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueUpper", "arrowOpaqueRight", "arrowOpaqueLower", "arrowOpaqueLeft"],
|
||||
|
||||
"cursor_upward": ["circleOuter", "arrowOpaqueUpper"],
|
||||
"cursor_right": ["circleOuter", "arrowOpaqueRight"],
|
||||
"cursor_down": ["circleOuter", "arrowOpaqueLower"],
|
||||
"cursor_left": ["circleOuter", "arrowOpaqueLeft"],
|
||||
|
||||
"cursor_book": ["circleOuter", "book"],
|
||||
"cursor_book_poised": ["circleOuter", "circleInnerOpen", "book"],
|
||||
"cursor_book_clicked": ["circleOuter", "circleInnerClosed", "book"],
|
||||
}
|
||||
cursorOffsetList = {
|
||||
"cursor_book": [7, 7],
|
||||
"cursor_book_poised": [7, 7],
|
||||
"cursor_book_clicked": [7, 7]
|
||||
}
|
||||
|
||||
textList = {
|
||||
"xLoading_Linking_Text": ["background", "circles", "textLinking"],
|
||||
"xLoading_Updating_Text": ["background", "circles", "textUpdating"]
|
||||
}
|
||||
|
||||
voiceList = {
|
||||
"ui_speaker": ["speakerGrille", "speakerIndicator", "speakerOuterRing"],
|
||||
"ui_microphone": ["microphoneGrille", "microphoneIndicator", "microphoneOuterRing"]
|
||||
}
|
||||
|
||||
def enable_only_layers(layerlist, layers):
|
||||
for layer in layers:
|
||||
if layer in layerlist:
|
||||
layers[layer].setAttribute("style","")
|
||||
else:
|
||||
layers[layer].setAttribute("style","display:none")
|
||||
# sanity check
|
||||
for layer in layerlist:
|
||||
if layer not in layers:
|
||||
print("warning: unknown layer", layer)
|
||||
|
||||
def shift_all_layers(layers, shiftx, shifty):
|
||||
# note: this assumes that all layers start out with no transform of their own
|
||||
for layer in layers:
|
||||
layers[layer].setAttribute("transform", "translate(%g,%g)" % (shiftx, shifty))
|
||||
|
||||
def get_layers_from_svg(svgData):
|
||||
inkscapeNS = "http://www.inkscape.org/namespaces/inkscape"
|
||||
layers = {}
|
||||
|
||||
groups = svgData.getElementsByTagName("g")
|
||||
for group in groups:
|
||||
if group.getAttributeNS(inkscapeNS,"groupmode") == "layer":
|
||||
layers[group.getAttribute("id")] = group
|
||||
|
||||
return layers
|
||||
|
||||
def render_cursors(inpath, outpath):
|
||||
scalefactor = 4
|
||||
with open(os.path.join(inpath,"Cursor_Base.svg"), "r") as svgFile:
|
||||
cursorSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(cursorSVG)
|
||||
svgwidth = float(cursorSVG.documentElement.getAttribute("width"))
|
||||
svgheight = float(cursorSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(math.ceil(scalefactor*svgwidth)), int(math.ceil(scalefactor*svgheight)))
|
||||
|
||||
for cursor in cursorList:
|
||||
ctx = cairo.Context(surface)
|
||||
ctx.save()
|
||||
ctx.set_operator(cairo.OPERATOR_CLEAR)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
|
||||
enabledlayers = cursorList[cursor]
|
||||
enabledlayers = enabledlayers + [l + "Shadow" for l in enabledlayers]
|
||||
enable_only_layers(enabledlayers, layers)
|
||||
|
||||
shift_all_layers(layers, *cursorOffsetList.get(cursor, [0, 0]))
|
||||
|
||||
svg = rsvg.Handle(data=cursorSVG.toxml())
|
||||
ctx.scale(scalefactor, scalefactor)
|
||||
svg.render_cairo(ctx)
|
||||
|
||||
outfile = os.path.join(outpath, cursor + ".png")
|
||||
surface.write_to_png(outfile)
|
||||
scalergba.scale(outfile, outfile, scalefactor)
|
||||
|
||||
def render_loading_books(inpath, outpath):
|
||||
resSize = {"width":256, "height":256}
|
||||
with open(os.path.join(inpath,"Linking_Book.svg"), "r") as svgFile:
|
||||
bookSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(bookSVG)
|
||||
ratioW = resSize["width"] / float(bookSVG.documentElement.getAttribute("width"))
|
||||
ratioH = resSize["height"] / float(bookSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
|
||||
|
||||
for angle in range(0, 18):
|
||||
ctx = cairo.Context(surface)
|
||||
|
||||
# Draw Book and Black Background
|
||||
enable_only_layers(["background", "book"],layers)
|
||||
svg = rsvg.Handle(data=bookSVG.toxml())
|
||||
ctx.save()
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
ctx.restore()
|
||||
|
||||
# Draw Circles at appropriate angle
|
||||
enable_only_layers(["circles"],layers)
|
||||
svg = rsvg.Handle(data=bookSVG.toxml())
|
||||
ctx.translate(resSize["height"] / 2, resSize["width"] / 2)
|
||||
ctx.rotate(math.radians(angle*(5)))
|
||||
ctx.translate(-resSize["width"] / 2, -resSize["height"] / 2)
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
|
||||
surface.write_to_png(os.path.join(outpath, "xLoading_Linking.{0:02}.png".format(angle)))
|
||||
|
||||
def render_loading_text(inpath, outpath):
|
||||
resSize = {"width":192, "height":41}
|
||||
with open(os.path.join(inpath,"Loading_Text_rasterfont.svg"), "r") as svgFile:
|
||||
textSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(textSVG)
|
||||
ratioW = resSize["width"] / float(textSVG.documentElement.getAttribute("width"))
|
||||
ratioH = resSize["height"] / float(textSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
|
||||
|
||||
for textEntry in textList:
|
||||
ctx = cairo.Context(surface)
|
||||
ctx.save()
|
||||
ctx.set_operator(cairo.OPERATOR_CLEAR)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
enable_only_layers(textList[textEntry], layers)
|
||||
svg = rsvg.Handle(data=textSVG.toxml())
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
surface.write_to_png(os.path.join(outpath, textEntry + ".png"))
|
||||
|
||||
def render_voice_icons(inpath, outpath):
|
||||
resSize = {"width":32, "height":32}
|
||||
with open(os.path.join(inpath,"Voice_Chat.svg"), "r") as svgFile:
|
||||
uiSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(uiSVG)
|
||||
ratioW = resSize["width"] / float(uiSVG.documentElement.getAttribute("width"))
|
||||
ratioH = resSize["height"] / float(uiSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
|
||||
|
||||
for voiceUI in voiceList:
|
||||
ctx = cairo.Context(surface)
|
||||
ctx.save()
|
||||
ctx.set_operator(cairo.OPERATOR_CLEAR)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
|
||||
enable_only_layers(voiceList[voiceUI], layers)
|
||||
|
||||
svg = rsvg.Handle(data=uiSVG.toxml())
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
|
||||
surface.write_to_png(os.path.join(outpath, voiceUI + ".png"))
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = OptionParser(usage="usage: %prog [options]")
|
||||
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
|
||||
parser.add_option("-o", "--outpath", dest="outpath", default="./out", help="Sets output path for rendered images")
|
||||
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for SVG files")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
## Send output to OS's null if unwanted
|
||||
if not options.verbose:
|
||||
sys.stdout = open(os.devnull,"w")
|
||||
sys.stderr = open(os.devnull,"w")
|
||||
|
||||
## Compute Paths
|
||||
outpath = os.path.expanduser(options.outpath)
|
||||
inpath = os.path.expanduser(options.inpath)
|
||||
|
||||
if not os.path.exists(outpath):
|
||||
os.mkdir(outpath)
|
||||
|
||||
## Do the work!
|
||||
print("Rendering SVGs...")
|
||||
render_cursors(inpath, outpath)
|
||||
render_loading_books(inpath, outpath)
|
||||
render_loading_text(inpath, outpath)
|
||||
render_voice_icons(inpath, outpath)
|
BIN
Sources/Plasma/Apps/plClient/external/resource.dat
vendored
Normal file
180
Sources/Plasma/Apps/plClient/external/scalergba.py
vendored
Normal file
@ -0,0 +1,180 @@
|
||||
#!/opt/local/bin/python2.7
|
||||
|
||||
# Christian Walther 2011-07-20
|
||||
# Public Domain
|
||||
|
||||
# scalergba.py <input> <factor> <output>
|
||||
#
|
||||
# Scale image <input> down by <factor> (integer) and save as PNG file <output>.
|
||||
#
|
||||
# - Taking into account that adding (averaging) colors must be done in a linear
|
||||
# color space, not with the power-law-encoded values stored in the files.
|
||||
# (I know of no image processing application that does this right.)
|
||||
# Gamma is hardcoded to 2.2.
|
||||
# - Assuming that alpha compositing will be done directly with the raw
|
||||
# power-law-encoded values rather than in the linear color space that would
|
||||
# be correct, which is the way almost all software will do it, in particular
|
||||
# OpenGL/Direct3D. (Photoshop has an option to do it right, maybe other
|
||||
# high-end image processing software too.)
|
||||
|
||||
|
||||
from __future__ import division
|
||||
import sys
|
||||
import math
|
||||
try:
|
||||
import Image
|
||||
except ImportError:
|
||||
print("Scaling requires the Python Imaging Library.")
|
||||
raise
|
||||
|
||||
|
||||
gamma = 2.2
|
||||
|
||||
|
||||
def add(a, b):
|
||||
for i, y in enumerate(b):
|
||||
a[i] += y
|
||||
|
||||
def sub(a, b):
|
||||
for i, y in enumerate(b):
|
||||
a[i] -= y
|
||||
|
||||
def subsc(a, b):
|
||||
for i in range(3):
|
||||
a[i] -= b
|
||||
|
||||
def mul(a, b):
|
||||
for i, y in enumerate(b):
|
||||
a[i] *= y
|
||||
|
||||
def mulsc(a, b):
|
||||
for i in range(3):
|
||||
a[i] *= b
|
||||
|
||||
def pixel2linear(p):
|
||||
l = [math.pow(p[i]/255.0, gamma) for i in range(3)]
|
||||
if len(p) == 4:
|
||||
l.append(p[3]/255.0)
|
||||
else:
|
||||
l.append(1.0)
|
||||
return l
|
||||
|
||||
def pixel2nonlinear(p):
|
||||
return [p[i]/255.0 for i in range(3)], p[3]/255.0 if len(p) > 3 else 1.0
|
||||
|
||||
def clamp(x):
|
||||
return 255 if x > 255 else 0 if x < 0 else x
|
||||
|
||||
def linear2pixel(l):
|
||||
p = [clamp(int(math.floor(math.pow(l[i], 1.0/gamma)*255 + 0.5))) for i in range(3)]
|
||||
if len(l) == 4:
|
||||
p.append(clamp(int(math.floor(l[3]*255 + 0.5))))
|
||||
return p
|
||||
|
||||
def nonlinear2pixel(l):
|
||||
return [clamp(int(math.floor(c*255 + 0.5))) for c in l]
|
||||
|
||||
|
||||
def scale(infilename, outfilename, factor):
|
||||
inimg = Image.open(infilename)
|
||||
inpix = inimg.load()
|
||||
|
||||
outw = inimg.size[0] // factor
|
||||
outh = inimg.size[1] // factor
|
||||
outimg = Image.new("RGBA", (outw, outh), None)
|
||||
outpix = outimg.load()
|
||||
|
||||
for oy in range(outh):
|
||||
for ox in range(outw):
|
||||
# scale down in linear color space to get a tentative color to compute the fixed points from
|
||||
sum = [0.0, 0.0, 0.0, 0.0]
|
||||
for j in range(factor):
|
||||
for i in range(factor):
|
||||
l = pixel2linear(inpix[ox*factor+i, oy*factor+j])
|
||||
mulsc(l, l[3])
|
||||
add(sum, l)
|
||||
if sum[3] != 0:
|
||||
mulsc(sum, 1.0/sum[3])
|
||||
sum[3] /= factor*factor
|
||||
|
||||
# determine the two fixed points (background colors on which we will achieve the correct result) per component
|
||||
# I used to use constant black and white for that, but later realized that that results in a large error (result too light) on midtones and I can do better by distributing the error more evenly. The dependency of the fixed points on the foreground color is empirical magic that has been experimentally determined to produce visually pleasing results.
|
||||
fix1 = [0.04*sum[i] for i in range(3)]
|
||||
fix2 = [0.4 + 0.6*sum[i] for i in range(3)]
|
||||
fix1n = [math.pow(l, 1.0/gamma) for l in fix1]
|
||||
fix2n = [math.pow(l, 1.0/gamma) for l in fix2]
|
||||
|
||||
# composite against the fixed points in nonlinear color space as that's what the image expects (only matters in areas of medium alpha), then scale down in linear color space again
|
||||
f1c = [0.0, 0.0, 0.0]
|
||||
for j in range(factor):
|
||||
for i in range(factor):
|
||||
c, a = pixel2nonlinear(inpix[ox*factor+i, oy*factor+j])
|
||||
mulsc(c, a)
|
||||
f = fix1n[:]
|
||||
mulsc(f, 1.0 - a)
|
||||
add(c, f)
|
||||
add(f1c, [math.pow(p, gamma) for p in c])
|
||||
mulsc(f1c, 1.0/(factor*factor))
|
||||
|
||||
f2c = [0.0, 0.0, 0.0]
|
||||
for j in range(factor):
|
||||
for i in range(factor):
|
||||
c, a = pixel2nonlinear(inpix[ox*factor+i, oy*factor+j])
|
||||
mulsc(c, a)
|
||||
f = fix2n[:]
|
||||
mulsc(f, 1.0 - a)
|
||||
add(c, f)
|
||||
add(f2c, [math.pow(p, gamma) for p in c])
|
||||
mulsc(f2c, 1.0/(factor*factor))
|
||||
|
||||
# go back to gamma-encoded color space, assuming that alpha blending will be done in that
|
||||
f1cn = [math.pow(l, 1.0/gamma) for l in f1c]
|
||||
f2cn = [math.pow(l, 1.0/gamma) for l in f2c]
|
||||
|
||||
# compute color and alpha
|
||||
# This gives us three alphas, in general different, but we can only output one - the best thing to do with them I can think of is to average them together and leave the color components alone, this ensures that the alpha deviation does not affect the case where background color equals foreground color.
|
||||
a = [1.0 - (f2cn[i] - f1cn[i])/(fix2n[i] - fix1n[i]) for i in range(3)]
|
||||
c = [(f1cn[i] - (1.0-a[i])*fix1n[i])/a[i] if math.floor(a[i]*255 + 0.5) > 0 else 0.0 for i in range(3)]
|
||||
outpix[ox, oy] = tuple(nonlinear2pixel(c + [(a[0] + a[1] + a[2])/3]))
|
||||
|
||||
# collect pixels that ended up with alpha 0
|
||||
transparent = [0]*outh*outw
|
||||
for oy in range(outh):
|
||||
for ox in range(outw):
|
||||
if outpix[ox, oy][3] == 0:
|
||||
transparent[oy*outw + ox] = 1
|
||||
|
||||
# expand neighboring color values from nonzero-alpha pixels into the zero-alpha region twice, so that bilinear interpolation cannot bleed the arbitrary background color (black here) from zero-alpha into nonzero-alpha territory
|
||||
for i in range(2):
|
||||
transp = transparent[:]
|
||||
for oy in range(outh):
|
||||
for ox in range(outw):
|
||||
if transp[oy*outw + ox]:
|
||||
count = 0
|
||||
sum = [0, 0, 0]
|
||||
if ox > 0:
|
||||
if not transp[oy*outw + ox-1]:
|
||||
add(sum, outpix[ox-1, oy][0:3])
|
||||
count += 1
|
||||
if ox < outw-1:
|
||||
if not transp[oy*outw + ox+1]:
|
||||
add(sum, outpix[ox+1, oy][0:3])
|
||||
count += 1
|
||||
if oy > 0:
|
||||
if not transp[(oy-1)*outw + ox]:
|
||||
add(sum, outpix[ox, oy-1][0:3])
|
||||
count += 1
|
||||
if oy < outh-1:
|
||||
if not transp[(oy+1)*outw + ox]:
|
||||
add(sum, outpix[ox, oy+1][0:3])
|
||||
count += 1
|
||||
if count > 0:
|
||||
mulsc(sum, 1.0/count)
|
||||
outpix[ox, oy] = tuple(clamp(int(math.floor(c + 0.5))) for c in sum) + (0,)
|
||||
transparent[oy*outw + ox] = 0
|
||||
|
||||
outimg.save(outfilename, "PNG")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
scale(sys.argv[1], sys.argv[3], int(sys.argv[2]))
|
91
Sources/Plasma/Apps/plClient/loginfix.h
Normal file
@ -0,0 +1,91 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// The stuff below seems to be missing fron WinIoCtl.h in MSVC2003 but is
|
||||
// probably present in later versions. This was robbed from MSDN to fill
|
||||
// the gap.
|
||||
|
||||
#if (_MSC_VER < 1500) // For VS2005 and earlier only (might need to make it VS2003 only (1310))
|
||||
|
||||
#define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||||
|
||||
// retrieve the storage device descriptor data for a device.
|
||||
typedef struct _STORAGE_DEVICE_DESCRIPTOR {
|
||||
ULONG Version;
|
||||
ULONG Size;
|
||||
UCHAR DeviceType;
|
||||
UCHAR DeviceTypeModifier;
|
||||
BOOLEAN RemovableMedia;
|
||||
BOOLEAN CommandQueueing;
|
||||
ULONG VendorIdOffset;
|
||||
ULONG ProductIdOffset;
|
||||
ULONG ProductRevisionOffset;
|
||||
ULONG SerialNumberOffset;
|
||||
STORAGE_BUS_TYPE BusType;
|
||||
ULONG RawPropertiesLength;
|
||||
UCHAR RawDeviceProperties[1];
|
||||
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
|
||||
|
||||
// retrieve the properties of a storage device or adapter.
|
||||
typedef enum _STORAGE_QUERY_TYPE {
|
||||
PropertyStandardQuery = 0,
|
||||
PropertyExistsQuery,
|
||||
PropertyMaskQuery,
|
||||
PropertyQueryMaxDefined
|
||||
} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
|
||||
|
||||
// retrieve the properties of a storage device or adapter.
|
||||
typedef enum _STORAGE_PROPERTY_ID {
|
||||
StorageDeviceProperty = 0,
|
||||
StorageAdapterProperty,
|
||||
StorageDeviceIdProperty
|
||||
} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
|
||||
|
||||
// retrieve the properties of a storage device or adapter.
|
||||
typedef struct _STORAGE_PROPERTY_QUERY {
|
||||
STORAGE_PROPERTY_ID PropertyId;
|
||||
STORAGE_QUERY_TYPE QueryType;
|
||||
UCHAR AdditionalParameters[1];
|
||||
} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
|
||||
#endif
|
||||
// End of stuff taken from MSDN
|
42
Sources/Plasma/Apps/plClient/pfAllCreatables.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "pfAllCreatables.h"
|
43
Sources/Plasma/Apps/plClient/plAllCreatables.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "hsWindows.h"
|
||||
#include "plAllCreatables.h"
|
2572
Sources/Plasma/Apps/plClient/plClient.cpp
Normal file
313
Sources/Plasma/Apps/plClient/plClient.h
Normal file
@ -0,0 +1,313 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#pragma once
|
||||
#ifndef plClient_inc
|
||||
#define plClient_inc
|
||||
|
||||
|
||||
//#define NEW_CAMERA_CODE
|
||||
|
||||
#include "hsWindowHndl.h"
|
||||
#include "hsBitVector.h"
|
||||
#include "hsTemplates.h"
|
||||
#include "hsUtils.h"
|
||||
#include "hsStlUtils.h"
|
||||
#include "../pnKeyedObject/hsKeyedObject.h"
|
||||
#include "../pnKeyedObject/plUoid.h"
|
||||
#include "../plScene/plRenderRequest.h"
|
||||
|
||||
class plSceneNode;
|
||||
class plPipeline;
|
||||
class hsG3DDeviceModeRecord;
|
||||
class plInputManager;
|
||||
class plInputController;
|
||||
class plSceneObject;
|
||||
class pfConsoleEngine;
|
||||
class pfConsole;
|
||||
class plAudioSystem;
|
||||
class plVirtualCam1;
|
||||
class plKey;
|
||||
class plPageTreeMgr;
|
||||
class plTransitionMgr;
|
||||
class plLinkEffectsMgr;
|
||||
class plOperationProgress;
|
||||
class pfGameGUIMgr;
|
||||
class pfKI;
|
||||
class plAnimDebugList;
|
||||
class plFontCache;
|
||||
class plClientMsg;
|
||||
class plLocation;
|
||||
class plMovieMsg;
|
||||
class plBinkPlayer;
|
||||
class plMoviePlayer;
|
||||
class plPreloaderMsg;
|
||||
class plNetCommAuthMsg;
|
||||
class plAgeLoaded2Msg;
|
||||
|
||||
|
||||
typedef void (*plMessagePumpProc)( void );
|
||||
|
||||
class plClient : public hsKeyedObject
|
||||
{
|
||||
protected:
|
||||
|
||||
class plRoomRec
|
||||
{
|
||||
public:
|
||||
plSceneNode *fNode;
|
||||
UInt32 fFlags;
|
||||
|
||||
plRoomRec() { fNode = nil; fFlags = 0; }
|
||||
plRoomRec( plSceneNode *n, UInt32 f ) : fNode( n ), fFlags( f ) {}
|
||||
|
||||
enum Flags
|
||||
{
|
||||
kHeld = 0x00000001
|
||||
};
|
||||
};
|
||||
|
||||
hsBitVector fFlags;
|
||||
|
||||
plInputManager* fInputManager;
|
||||
|
||||
plPageTreeMgr* fPageMgr;
|
||||
hsTArray<plRoomRec> fRooms;
|
||||
plSceneNode* fCurrentNode;
|
||||
|
||||
plPipeline* fPipeline;
|
||||
hsColorRGBA fClearColor;
|
||||
plTransitionMgr *fTransitionMgr;
|
||||
plLinkEffectsMgr *fLinkEffectsMgr;
|
||||
plFontCache *fFontCache;
|
||||
|
||||
pfConsoleEngine* fConsoleEngine;
|
||||
pfConsole* fConsole;
|
||||
|
||||
pfKI *fKIGUIGlue;
|
||||
|
||||
hsBool fDone;
|
||||
hsBool fWindowActive;
|
||||
|
||||
hsWindowHndl fWindowHndl;
|
||||
|
||||
double fLastProgressUpdate;
|
||||
plOperationProgress *fProgressBar;
|
||||
|
||||
pfGameGUIMgr *fGameGUIMgr;
|
||||
|
||||
virtual hsG3DDeviceModeRecord ILoadDevMode(const char* devModeFile);
|
||||
|
||||
hsBool IUpdate();
|
||||
hsBool IDraw();
|
||||
hsBool IDrawProgress();
|
||||
|
||||
plVirtualCam1* fNewCamera;
|
||||
|
||||
static plClient* fInstance;
|
||||
char * fpAuxInitDir;
|
||||
static hsBool fDelayMS;
|
||||
|
||||
int fClampCap;
|
||||
int fQuality;
|
||||
|
||||
hsBool fQuitIntro;
|
||||
hsTArray<plMoviePlayer*> fMovies;
|
||||
|
||||
hsBool fPatchGlobalAges;
|
||||
|
||||
plMessagePumpProc fMessagePumpProc;
|
||||
|
||||
#ifndef PLASMA_EXTERNAL_RELEASE
|
||||
bool bPythonDebugConnected;
|
||||
#endif
|
||||
|
||||
hsTArray<plRenderRequest*> fPreRenderRequests;
|
||||
hsTArray<plRenderRequest*> fPostRenderRequests;
|
||||
|
||||
bool fHoldLoadRequests;
|
||||
class LoadRequest
|
||||
{
|
||||
public:
|
||||
LoadRequest(const plLocation& loc, bool hold) { this->loc = loc; this->hold = hold; }
|
||||
plLocation loc;
|
||||
bool hold;
|
||||
};
|
||||
typedef std::list<LoadRequest*> LoadList;
|
||||
LoadList fLoadRooms;
|
||||
int fNumLoadingRooms; // Number of rooms we're waiting for load callbacks on
|
||||
std::vector<plLocation> fRoomsLoading; // the locations we are currently in the middle of loading
|
||||
|
||||
int fNumPostLoadMsgs;
|
||||
float fPostLoadMsgInc;
|
||||
|
||||
void ICompleteInit ();
|
||||
void IOnAsyncInitComplete ();
|
||||
void IHandlePreloaderMsg (plPreloaderMsg * msg);
|
||||
void IHandleNetCommAuthMsg (plNetCommAuthMsg * msg);
|
||||
bool IHandleAgeLoaded2Msg (plAgeLoaded2Msg * msg);
|
||||
|
||||
hsBool IFlushRenderRequests();
|
||||
void IProcessPreRenderRequests();
|
||||
void IProcessPostRenderRequests();
|
||||
void IProcessRenderRequests(hsTArray<plRenderRequest*>& reqs);
|
||||
void IAddRenderRequest(plRenderRequest* req);
|
||||
|
||||
hsBool IPlayIntroMovie(const char* movieName, hsScalar endDelay, hsScalar posX, hsScalar posY, hsScalar scaleX, hsScalar scaleY, hsScalar volume = 1.0);
|
||||
hsBool IHandleMovieMsg(plMovieMsg* mov);
|
||||
void IKillMovies();
|
||||
void IServiceMovies();
|
||||
|
||||
void IStartProgress( const char *title, hsScalar len );
|
||||
void IIncProgress( hsScalar byHowMuch, const char *text );
|
||||
void IStopProgress( void );
|
||||
|
||||
static void IDispatchMsgReceiveCallback();
|
||||
static void IReadKeyedObjCallback(plKey key);
|
||||
static void IProgressMgrCallbackProc( plOperationProgress *progress );
|
||||
|
||||
void IPatchGlobalAgeFiles( void );
|
||||
|
||||
int IFindRoomByLoc(const plLocation& loc);
|
||||
bool IIsRoomLoading(const plLocation& loc);
|
||||
void IQueueRoomLoad(const std::vector<plLocation>& locs, bool hold);
|
||||
void ILoadNextRoom();
|
||||
void IUnloadRooms(const std::vector<plLocation>& locs);
|
||||
void IRoomLoaded(plSceneNode* node, bool hold);
|
||||
void IRoomUnloaded(plSceneNode* node);
|
||||
void ISetGraphicsDefaults();
|
||||
|
||||
public:
|
||||
|
||||
plClient();
|
||||
virtual ~plClient();
|
||||
|
||||
CLASSNAME_REGISTER( plClient );
|
||||
GETINTERFACE_ANY( plClient, hsKeyedObject );
|
||||
|
||||
static plClient* GetInstance() { return fInstance; }
|
||||
static void SetInstance(plClient* v) { fInstance=v; }
|
||||
|
||||
virtual hsBool MsgReceive(plMessage* msg);
|
||||
|
||||
hsBool InitPipeline();
|
||||
|
||||
void InitInputs();
|
||||
|
||||
void InitDLLs();
|
||||
void ShutdownDLLs();
|
||||
|
||||
void InitAuxInits();
|
||||
|
||||
virtual hsBool StartInit();
|
||||
virtual hsBool Shutdown();
|
||||
virtual hsBool MainLoop();
|
||||
|
||||
plClient& SetDone(hsBool done) { fDone = done; return *this; }
|
||||
hsBool GetDone() { return fDone; }
|
||||
|
||||
// Set this to true to queue any room load requests that come in. Set it to false to process them.
|
||||
void SetHoldLoadRequests(bool hold);
|
||||
|
||||
enum
|
||||
{
|
||||
kFlagIniting,
|
||||
kFlagDBGDisableRender,
|
||||
kFlagDBGDisableRRequests,
|
||||
kFlagAsyncInitComplete,
|
||||
kFlagGlobalDataLoaded,
|
||||
};
|
||||
|
||||
hsBool HasFlag(int f) const { return fFlags.IsBitSet(f); }
|
||||
void SetFlag(int f, hsBool on=true) { fFlags.SetBit(f, on); }
|
||||
|
||||
virtual plClient& SetWindowHandle(hsWindowHndl hndl) { fWindowHndl=hndl; return *this; }
|
||||
hsWindowHndl GetWindowHandle() { return fWindowHndl; }
|
||||
|
||||
plInputManager* GetInputManager() { return fInputManager; }
|
||||
|
||||
plPipeline* GetPipeline() { return fPipeline; }
|
||||
|
||||
plSceneNode* GetCurrentScene() { return fCurrentNode; }
|
||||
|
||||
pfConsoleEngine *GetConsoleEngine() { return fConsoleEngine; }
|
||||
|
||||
void SetAuxInitDir(const char *p) { delete [] fpAuxInitDir; fpAuxInitDir = hsStrcpy(p); }
|
||||
|
||||
static void EnableClientDelay() { plClient::fDelayMS = true; }
|
||||
|
||||
// These are a hack to let the console fake a lesser capabile board and test out quality settings.
|
||||
// They should go away once we have this built into ClientSetup et.al.
|
||||
void SetClampCap(int c) { fClampCap = c; }
|
||||
int GetClampCap() const { return fClampCap; }
|
||||
void SetQuality(int q) { fQuality = q; }
|
||||
int GetQuality() const { return fQuality; }
|
||||
|
||||
hsBool GetQuitIntro() const { return fQuitIntro; }
|
||||
void SetQuitIntro(hsBool on) { fQuitIntro = on; }
|
||||
|
||||
void SetClearColor( hsColorRGBA &color );
|
||||
hsColorRGBA GetClearColor() const { return fClearColor; }
|
||||
|
||||
// The client window has focus (true) or lost it (false)
|
||||
virtual void WindowActivate(bool active);
|
||||
virtual hsBool WindowActive() const { return fWindowActive; }
|
||||
|
||||
void SetMessagePumpProc( plMessagePumpProc proc ) { fMessagePumpProc = proc; }
|
||||
void ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync = false);
|
||||
void ResizeDisplayDevice(int Width, int Height, hsBool Windowed);
|
||||
void IDetectAudioVideoSettings();
|
||||
void IWriteDefaultGraphicsSettings(const wchar* destFile);
|
||||
|
||||
plAnimDebugList *fAnimDebugList;
|
||||
|
||||
#if 0
|
||||
std::string fUsername;
|
||||
std::string fPasswordDigest;
|
||||
std::string fServer;
|
||||
int fPlayerID;
|
||||
bool fRecreatePlayer;
|
||||
bool fAuthPassed;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // plClient_inc
|
52
Sources/Plasma/Apps/plClient/plClientCreatable.h
Normal file
@ -0,0 +1,52 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#ifndef plClientCreatable_inc
|
||||
#define plClientCreatable_inc
|
||||
|
||||
#include "../pnFactory/plCreator.h"
|
||||
|
||||
#include "plClient.h"
|
||||
|
||||
REGISTER_NONCREATABLE( plClient );
|
||||
|
||||
#endif // plClientCreatable
|
67
Sources/Plasma/Apps/plClient/plClientUpdateFormat.h
Normal file
@ -0,0 +1,67 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef plClientUpdateFormat_h_inc
|
||||
#define plClientUpdateFormat_h_inc
|
||||
|
||||
namespace ClientUpdate
|
||||
{
|
||||
enum
|
||||
{
|
||||
kUpdate,
|
||||
kShutdown,
|
||||
};
|
||||
}
|
||||
|
||||
//
|
||||
// Format of the update stream
|
||||
//
|
||||
// UInt8 - type (kUpdate, kShutdown)
|
||||
//
|
||||
// If type is kUpdate:
|
||||
// UInt32 - number of deleted keys
|
||||
// plUoid - uoid of deleted key (* num)
|
||||
//
|
||||
// UInt32 - number of new creatables
|
||||
// plCreatable - new creatable (* num)
|
||||
//
|
||||
|
||||
#endif // plClientUpdateFormat_h_inc
|
42
Sources/Plasma/Apps/plClient/plSimStateMsg.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
44
Sources/Plasma/Apps/plClient/pnAllCreatables.cpp
Normal file
@ -0,0 +1,44 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#pragma warning( disable : 4305 4503 4018 4786 4284)
|
||||
#include "pnAllCreatables.h"
|
||||
|
BIN
Sources/Plasma/Apps/plClient/res/Dirt.ICO
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
Sources/Plasma/Apps/plClient/res/Microphone.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/Speaker.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/banner.bmp
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
Sources/Plasma/Apps/plClient/res/bitmap1.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/bitmap2.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/bitmap3.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/bmp00001.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/bmp00002.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/bmp00003.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/bmp00004.bmp
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
Sources/Plasma/Apps/plClient/res/bmp00005.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/book.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/book_cli.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/book_hig.bmp
Normal file
After Width: | Height: | Size: 630 B |
1
Sources/Plasma/Apps/plClient/res/cnsl1.bin
Normal file
@ -0,0 +1 @@
|
||||
=GQK[V4KU<14>
|
BIN
Sources/Plasma/Apps/plClient/res/cursor_clicked.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_disabled.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_down.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_grab.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_left.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_open.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_poised.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_right.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/cursor_u.bmp
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
Sources/Plasma/Apps/plClient/res/cursor_up.bmp
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
Sources/Plasma/Apps/plClient/res/cursor_upward.bmp
Normal file
After Width: | Height: | Size: 630 B |
BIN
Sources/Plasma/Apps/plClient/res/headspin.ico
Normal file
After Width: | Height: | Size: 766 B |
22
Sources/Plasma/Apps/plClient/res/plClient.exe.manifest
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
<assemblyIdentity
|
||||
version="1.0.0.0"
|
||||
processorArchitecture="x86"
|
||||
name="plClient"
|
||||
type="win32"
|
||||
/>
|
||||
<description>plClient</description>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="Microsoft.Windows.Common-Controls"
|
||||
version="6.0.0.0"
|
||||
processorArchitecture="X86"
|
||||
publicKeyToken="6595b64144ccf1df"
|
||||
language="*"
|
||||
/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
</assembly>
|
332
Sources/Plasma/Apps/plClient/res/plClient.rc
Normal file
@ -0,0 +1,332 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
|
||||
"#define _AFX_NO_OLE_RESOURCES\r\n"
|
||||
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
|
||||
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
|
||||
"\r\n"
|
||||
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
|
||||
"#ifdef _WIN32\r\n"
|
||||
"LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r\n"
|
||||
"#pragma code_page(1252)\r\n"
|
||||
"#endif //_WIN32\r\n"
|
||||
"#endif\r\n"
|
||||
"\r\n"
|
||||
"CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST ""plClient.exe.manifest""\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Bitmap
|
||||
//
|
||||
|
||||
IDB_BANNER BITMAP "banner.bmp"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON_DIRT ICON "Dirt.ICO"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_LOADING DIALOGEX 0, 0, 161, 26
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER |
|
||||
WS_POPUP | WS_VISIBLE
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Starting URU. Please wait...",IDC_STARTING_TEXT,32,9,
|
||||
127,8
|
||||
ICON IDI_ICON_DIRT,IDC_STATIC,5,3,20,20
|
||||
END
|
||||
|
||||
IDD_EXCEPTION DIALOGEX 0, 0, 296, 183
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Error"
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",IDOK,239,7,50,14
|
||||
ICON IDI_ICON_DIRT,IDC_STATIC,7,7,20,20
|
||||
LTEXT " URU has experienced a serious error. Please report the information below.\n\nWe apologize for any inconvenience. ",
|
||||
IDC_MSG,38,7,189,37
|
||||
EDITTEXT IDC_CRASHINFO,7,45,282,131,ES_MULTILINE | ES_AUTOVSCROLL |
|
||||
ES_AUTOHSCROLL | ES_READONLY
|
||||
PUSHBUTTON "Copy",IDC_COPY,239,26,50,14
|
||||
END
|
||||
|
||||
IDD_URUTAP_LOGIN DIALOGEX 0, 0, 188, 111
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
|
||||
CAPTION "Enter Login Info"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Enter",IDOK,33,90,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,107,90,50,14
|
||||
LTEXT "Username",IDC_STATIC,7,7,38,11
|
||||
EDITTEXT IDC_URUTAP_USERNAME,52,7,129,13,ES_AUTOHSCROLL
|
||||
LTEXT "Password",IDC_STATIC,7,30,38,12
|
||||
EDITTEXT IDC_URUTAP_PASSWORD,52,28,129,12,ES_PASSWORD |
|
||||
ES_AUTOHSCROLL
|
||||
LTEXT "Server",IDC_STATIC,7,54,35,12
|
||||
EDITTEXT IDC_URUTAP_SERVER,51,51,130,13,ES_AUTOHSCROLL
|
||||
CONTROL "Destroy and recreate player",IDC_URUTAP_DESTROY,"Button",
|
||||
BS_AUTOCHECKBOX | WS_TABSTOP,51,70,130,12
|
||||
END
|
||||
|
||||
IDD_URU_LOGIN DIALOGEX 0, 0, 200, 133
|
||||
STYLE DS_SETFONT | DS_3DLOOK | WS_POPUP | WS_SYSMENU
|
||||
EXSTYLE WS_EX_STATICEDGE
|
||||
FONT 12, "Hobo Std", 500, 0, 0x0
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Submit",IDOK,139,114,50,14
|
||||
PUSHBUTTON "Quit",IDCANCEL,77,114,50,14
|
||||
EDITTEXT IDC_USERNAME,65,55,110,12,ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_PASSWORD,65,71,110,12,ES_PASSWORD | ES_AUTOHSCROLL
|
||||
LTEXT "Username:",IDC_TEXT_USER,25,58,36,8
|
||||
LTEXT "Password:",IDC_TEXT_PASS,27,73,34,8
|
||||
LTEXT "Welcome to URU!",IDC_TEXT_WELCOME,72,45,57,8
|
||||
CONTROL "Remember Password:",IDC_REMEMBER_PASS,"Button",
|
||||
BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,23,87,85,10
|
||||
GROUPBOX "",IDC_BOX_01,5,30,190,79
|
||||
GROUPBOX "",IDC_BOX_02,14,38,172,64
|
||||
CONTROL 151,IDC_IMAGE_BANNER,"Static",SS_BITMAP |
|
||||
SS_REALSIZEIMAGE | WS_BORDER,4,4,192,21,WS_EX_CLIENTEDGE
|
||||
END
|
||||
|
||||
IDD_URU_EULA DIALOGEX 0, 0, 201, 158
|
||||
STYLE DS_SETFONT | WS_POPUP | WS_SYSMENU
|
||||
FONT 12, "Hobo Std", 500, 0, 0x0
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Accept",IDOK,141,138,50,14
|
||||
PUSHBUTTON "Decline",IDCANCEL,79,138,50,14
|
||||
CONTROL 151,IDC_IMAGE_BANNER,"Static",SS_BITMAP |
|
||||
SS_REALSIZEIMAGE | WS_BORDER,4,4,192,21,WS_EX_CLIENTEDGE
|
||||
GROUPBOX "",IDC_BOX_03,5,30,190,103
|
||||
LTEXT "Terms of Use Agreement",IDC_TEXT_TERMS,59,36,83,8
|
||||
CONTROL "Custom1",IDC_DYN_EULA,"",WS_TABSTOP,13,46,174,80
|
||||
END
|
||||
|
||||
IDD_URULOGIN_MAIN DIALOGEX 0, 0, 302, 230
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS |
|
||||
DS_CENTER | WS_POPUP
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Login",IDOK,87,209,50,14
|
||||
PUSHBUTTON "Quit",IDCANCEL,163,209,50,14
|
||||
CONTROL 151,IDC_STATIC,"Static",SS_BITMAP | SS_REALSIZEIMAGE |
|
||||
WS_BORDER,7,7,289,36
|
||||
LTEXT "Account name:",IDC_STATIC,69,119,49,10
|
||||
LTEXT "Password:",IDC_STATIC,69,135,49,10
|
||||
EDITTEXT IDC_URULOGIN_USERNAME,123,119,108,12,ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_URULOGIN_PASSWORD,123,135,108,12,ES_PASSWORD |
|
||||
ES_AUTOHSCROLL
|
||||
GROUPBOX "",IDC_STATIC,14,99,274,96
|
||||
CONTROL "Remember Password:",IDC_URULOGIN_REMEMBERPASS,"Button",
|
||||
BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,69,151,100,10
|
||||
GROUPBOX "",IDC_STATIC,14,54,274,43
|
||||
LTEXT "Welcome to URU",IDC_STATUS_TEXT,17,62,267,20
|
||||
RTEXT "Product String",IDC_PRODUCTSTRING,88,86,194,8
|
||||
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME | SS_SUNKEN,7,49,
|
||||
288,152
|
||||
PUSHBUTTON "Need an account?",IDC_URULOGIN_GAMETAPLINK,32,174,95,14,
|
||||
BS_FLAT
|
||||
PUSHBUTTON "Donate",IDC_URULOGIN_GAMETAPLINK2,175,174,95,14,BS_FLAT
|
||||
END
|
||||
|
||||
IDD_URULOGIN_EULA DIALOGEX 0, 0, 300, 318
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Accept",IDOK,89,297,50,14
|
||||
PUSHBUTTON "Decline",IDCANCEL,160,297,50,14
|
||||
CONTROL 151,IDC_STATIC,"Static",SS_BITMAP,7,7,287,36,
|
||||
WS_EX_CLIENTEDGE
|
||||
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME | SS_SUNKEN,9,46,
|
||||
284,242
|
||||
CTEXT "End User License Agreement",IDC_STATIC,46,55,207,10
|
||||
GROUPBOX "",IDC_STATIC,17,66,266,212
|
||||
CONTROL "",IDC_URULOGIN_EULATEXT,"RichEdit20A",ES_MULTILINE |
|
||||
ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_VSCROLL |
|
||||
WS_HSCROLL | WS_TABSTOP,25,75,250,197
|
||||
END
|
||||
|
||||
IDD_AUTHFAILED DIALOGEX 0, 0, 177, 89
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER |
|
||||
WS_POPUP | WS_VISIBLE
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Authentication failed. Please try again.",
|
||||
IDC_AUTH_TEXT,38,17,127,8
|
||||
ICON IDI_ICON_DIRT,IDC_STATIC,6,11,21,20
|
||||
PUSHBUTTON "Ok",IDOK,67,73,42,14
|
||||
CTEXT "",IDC_AUTH_MESSAGE,0,37,175,32
|
||||
END
|
||||
|
||||
IDD_AUTHENTICATING DIALOGEX 0, 0, 177, 60
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER |
|
||||
WS_POPUP | WS_VISIBLE
|
||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||
BEGIN
|
||||
ICON IDI_ICON_DIRT,IDC_STATIC,6,11,21,20
|
||||
LTEXT "Logging in to URU. Please wait...",IDC_AUTH_TEXT,38,17,
|
||||
137,8
|
||||
PUSHBUTTON "Cancel",IDCANCEL,64,42,49,15
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO
|
||||
BEGIN
|
||||
IDD_LOADING, DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 159
|
||||
END
|
||||
|
||||
IDD_EXCEPTION, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 289
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 176
|
||||
END
|
||||
|
||||
IDD_URUTAP_LOGIN, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 181
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 104
|
||||
END
|
||||
|
||||
IDD_URU_LOGIN, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 4
|
||||
RIGHTMARGIN, 168
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 128
|
||||
END
|
||||
|
||||
IDD_URU_EULA, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 194
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 151
|
||||
END
|
||||
|
||||
IDD_URULOGIN_MAIN, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 295
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 223
|
||||
END
|
||||
|
||||
IDD_URULOGIN_EULA, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 293
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 311
|
||||
END
|
||||
|
||||
IDD_AUTHFAILED, DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 175
|
||||
BOTTOMMARGIN, 87
|
||||
END
|
||||
|
||||
IDD_AUTHENTICATING, DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 175
|
||||
BOTTOMMARGIN, 57
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// CNSL
|
||||
//
|
||||
|
||||
IDR_CNSL1 CNSL "cnsl1.bin"
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
#define _AFX_NO_SPLITTER_RESOURCES
|
||||
#define _AFX_NO_OLE_RESOURCES
|
||||
#define _AFX_NO_TRACKER_RESOURCES
|
||||
#define _AFX_NO_PROPERTY_RESOURCES
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
#endif
|
||||
|
||||
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "plClient.exe.manifest"
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
61
Sources/Plasma/Apps/plClient/res/resource.h
Normal file
@ -0,0 +1,61 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by plClient.rc
|
||||
//
|
||||
#define IDI_ICON_DIRT 135
|
||||
#define IDD_LOADING 136
|
||||
#define IDD_EXCEPTION 138
|
||||
#define IDR_CNSL1 139
|
||||
#define IDD_URUTAP_LOGIN 148
|
||||
#define IDD_URU_LOGIN 149
|
||||
#define IDB_BANNER 151
|
||||
#define IDD_URU_EULA 152
|
||||
#define IDD_URULOGIN_MAIN 153
|
||||
#define IDD_URULOGIN_EULA 154
|
||||
#define IDD_AUTHFAILED 155
|
||||
#define IDD_AUTHENTICATING 156
|
||||
#define IDC_CRASHINFO 1001
|
||||
#define IDC_COPY 1002
|
||||
#define IDC_MSG 1003
|
||||
#define IDC_STARTING_TEXT 1004
|
||||
#define IDC_URUTAP_USERNAME 1005
|
||||
#define IDC_URUTAP_PASSWORD 1006
|
||||
#define IDC_URUTAP_SERVER 1008
|
||||
#define IDC_URUTAP_DESTROY 1009
|
||||
#define IDC_USERNAME 1010
|
||||
#define IDC_PASSWORD 1011
|
||||
#define IDC_REMEMBER_PASS 1012
|
||||
#define IDC_IMAGE_BANNER 1013
|
||||
#define IDC_BOX_01 1014
|
||||
#define IDC_BOX_02 1015
|
||||
#define IDC_TEXT_WELCOME 1016
|
||||
#define IDC_TEXT_USER 1017
|
||||
#define IDC_TEXT_PASS 1018
|
||||
#define IDC_CUSTOM1 1019
|
||||
#define IDC_DYN_EULA 1019
|
||||
#define IDC_BOX_03 1020
|
||||
#define IDC_TEXT_TERMS 1021
|
||||
#define IDC_URULOGIN_REMEMBERPASS 1022
|
||||
#define IDC_URULOGIN_USERNAME 1023
|
||||
#define IDC_URULOGIN_PASSWORD 1024
|
||||
#define IDC_URULOGIN_EULATEXT 1025
|
||||
#define IDC_RICHEDIT22 1028
|
||||
#define IDC_AUTH_TEXT 1029
|
||||
#define IDC_BUTTON1 1030
|
||||
#define IDC_URULOGIN_GAMETAPLINK 1030
|
||||
#define IDC_AUTH_MESSAGE 1031
|
||||
#define IDC_URULOGIN_GAMETAPLINK2 1031
|
||||
#define IDC_PRODUCTSTRING 1033
|
||||
#define IDC_STATUS_TEXT 1034
|
||||
#define IDC_HOTKEY1 1035
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 197
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1036
|
||||
#define _APS_NEXT_SYMED_VALUE 103
|
||||
#endif
|
||||
#endif
|
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.01.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.02.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.03.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.04.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.05.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.06.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.07.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.08.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.09.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.10.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.11.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.12.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.13.jpg
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.14.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.15.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.16.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.17.jpg
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking.18.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Linking_Text.jpg
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
Sources/Plasma/Apps/plClient/res/xLoading_Updating_Text.jpg
Normal file
After Width: | Height: | Size: 29 KiB |
2264
Sources/Plasma/Apps/plClient/winmain.cpp
Normal file
51
Sources/Plasma/Apps/plClientKey/DllMain.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include <windows.h>
|
||||
|
||||
__declspec(dllexport) const unsigned long* GetKey()
|
||||
{
|
||||
// So the crackers know who the tard is
|
||||
static const char* tauntText = "My copy protection is uncrackable! -Brice";
|
||||
|
||||
static const unsigned long kDefaultKey[4] = { 0x6c0a5452, 0x3827d0f, 0x3a170b92, 0x16db7fc2 };
|
||||
return kDefaultKey;
|
||||
}
|
64
Sources/Plasma/Apps/plClientKey/plClientKey.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "plClientKey.h"
|
||||
#include "hsWindows.h"
|
||||
|
||||
typedef const UInt32* (*GETKEY)();
|
||||
|
||||
const UInt32* plClientKey::GetKey()
|
||||
{
|
||||
HMODULE hDll = LoadLibrary("sp.dll");
|
||||
if (hDll)
|
||||
{
|
||||
GETKEY getKey = (GETKEY)GetProcAddress(hDll, "GetKey");
|
||||
if (getKey)
|
||||
{
|
||||
static UInt32 key[4];
|
||||
memcpy(key, getKey(), sizeof(key));
|
||||
FreeLibrary(hDll);
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
5
Sources/Plasma/Apps/plClientKey/plClientKey.def
Normal file
@ -0,0 +1,5 @@
|
||||
LIBRARY
|
||||
EXPORTS
|
||||
GetKey @1
|
||||
SECTIONS
|
||||
.data READ WRITE
|
59
Sources/Plasma/Apps/plClientKey/plClientKey.h
Normal file
@ -0,0 +1,59 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef plClientKey_h_inc
|
||||
#define plClientKey_h_inc
|
||||
|
||||
#include "hsTypes.h"
|
||||
|
||||
//
|
||||
// For getting the "SafeDisc protected" encryption key in single player mode
|
||||
//
|
||||
// Include plClientKey.cpp/h in your project and call plClientKey::GetKey
|
||||
// It will load the Dll and get the key for you
|
||||
// Returns nil if it fails
|
||||
//
|
||||
namespace plClientKey
|
||||
{
|
||||
const UInt32* GetKey();
|
||||
}
|
||||
|
||||
#endif // plClientKey_h_inc
|
58
Sources/Plasma/Apps/plClientPatcher/Intern.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $/Plasma20/Sources/Plasma/Apps/plClientPatcher/Intern.h
|
||||
*
|
||||
***/
|
||||
|
||||
#ifdef PLASMA20_SOURCES_PLASMA_APPS_PLCLIENTPATCHER_INTERN_H
|
||||
#error "Header $/Plasma20/Sources/Plasma/Apps/plClientPatcher/Intern.h included more than once"
|
||||
#endif
|
||||
#define PLASMA20_SOURCES_PLASMA_APPS_PLCLIENTPATCHER_INTERN_H
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* SelfPatcher.cpp
|
||||
*
|
||||
***/
|
74
Sources/Plasma/Apps/plClientPatcher/Pch.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $/Plasma20/Sources/Plasma/Apps/plClientPatcher/Pch.h
|
||||
*
|
||||
***/
|
||||
|
||||
#ifdef PLASMA20_SOURCES_PLASMA_APPS_PLCLIENTPATCHER_PCH_H
|
||||
#error "Header $/Plasma20/Sources/Plasma/Apps/plClientPatcher/Pch.h included more than once"
|
||||
#endif
|
||||
#define PLASMA20_SOURCES_PLASMA_APPS_PLCLIENTPATCHER_PCH_H
|
||||
|
||||
#include <process.h>
|
||||
#include <time.h>
|
||||
#include "pnUtils/pnUtils.h"
|
||||
#include "pnNetBase/pnNetBase.h"
|
||||
#include "pnAsyncCore/pnAsyncCore.h"
|
||||
#include "pnProduct/pnProduct.h"
|
||||
#include "pnNetCli/pnNetCli.h"
|
||||
#include "plNetGameLib/plNetGameLib.h"
|
||||
#include "plEncryption/plChecksum.h"
|
||||
#include "plAgeDescription/plAgeManifest.h"
|
||||
#include "plAudioCore/plAudioFileReader.h"
|
||||
|
||||
#define USES_PROTOCOL_CLI2AUTH
|
||||
#include "pnNetProtocol/pnNetProtocol.h"
|
||||
|
||||
#include "UruPlayer.h"
|
||||
|
||||
#include "plCompression/plZlibStream.h"
|
||||
#include "Intern.h"
|
||||
#include "../plUruLauncher/plLauncherInfo.h"
|
||||
|
||||
|
1039
Sources/Plasma/Apps/plClientPatcher/UruPlayer.cpp
Normal file
67
Sources/Plasma/Apps/plClientPatcher/UruPlayer.h
Normal file
@ -0,0 +1,67 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $/Plasma20/Sources/Plasma/Apps/plClientPatcher/UruPlayer.h
|
||||
*
|
||||
***/
|
||||
|
||||
#ifdef PLASMA20_SOURCES_PLASMA_APPS_PLCLIENTPATCHER_URUPLAYER_H
|
||||
#error "Header $/Plasma20/Sources/Plasma/Apps/plClientPatcher/UruPlayer.h included more than once"
|
||||
#endif
|
||||
#define PLASMA20_SOURCES_PLASMA_APPS_PLCLIENTPATCHER_URUPLAYER_H
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* UruPlayer.cpp
|
||||
*
|
||||
***/
|
||||
|
||||
void InitAsyncCore ();
|
||||
void ShutdownAsyncCore () ;
|
||||
void UruPrepProc (void * param);
|
||||
void UruStartProc (void * param);
|
||||
void PlayerTerminateProc (void * param);
|
||||
void PlayerStopProc (void * param);
|
||||
|
||||
extern const wchar kPatcherExeFilename[];
|
65
Sources/Plasma/Apps/plClientPatcher/plLauncherCallback.h
Normal file
@ -0,0 +1,65 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $/Plasma20/Sources/Plasma/Apps/plUruLauncher/plLauncherCallback.h
|
||||
*
|
||||
***/
|
||||
|
||||
#ifdef PLASMA20_SOURCES_PLASMA_APPS_PLURULAUNCHER_PLLAUNCHERCALLBACK_H
|
||||
#error "Header $/Plasma20/Sources/Plasma/Apps/plUruLauncher/plLauncherCallback.h included more than once"
|
||||
#endif
|
||||
#define PLASMA20_SOURCES_PLASMA_APPS_PLURULAUNCHER_PLLAUNCHERCALLBACK_H
|
||||
|
||||
enum EStatus {
|
||||
kStatusOk,
|
||||
};
|
||||
|
||||
typedef void (*launcherCallback)(int status, void *param);
|
||||
struct plLauncherCallback {
|
||||
launcherCallback prepCallback;
|
||||
launcherCallback initCallback;
|
||||
launcherCallback startCallback;
|
||||
launcherCallback stopCallback;
|
||||
launcherCallback terminateCallback;
|
||||
|
||||
};
|
125
Sources/Plasma/Apps/plFileEncrypt/main.cpp
Normal file
@ -0,0 +1,125 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "../plFile/hsFiles.h"
|
||||
#include "../plFile/plEncryptedStream.h"
|
||||
#include "../pnUtils/pnUtils.h"
|
||||
#include "../pnProduct/pnProduct.h"
|
||||
#include "hsUtils.h"
|
||||
|
||||
void EncryptFiles(const char* dir, const char* ext, bool encrypt);
|
||||
|
||||
void print_version(){
|
||||
wchar productString[256];
|
||||
ProductString(productString, arrsize(productString));
|
||||
printf("%S\n\n", productString);
|
||||
}
|
||||
|
||||
void print_help() {
|
||||
printf("plFileEncrypt - Encrypts and Decrypts Uru Files.\n\n");
|
||||
print_version();
|
||||
printf("Usage: plFileEncrypt \t[(encrypt|-e)|(decrypt|-d|)|(--help|-h|-?|/h)|(-v)]\n");
|
||||
printf("\tencrypt|-e\t - Encrypts All .age, .fni, .ini, .csv, and .sdl files in the current folder.\n");
|
||||
printf("\tdecrypt|-d\t - Decrypts All .age, .fni, .ini, .csv, and .sdl files in the current folder.\n");
|
||||
printf("\t--help|-h|-?|/h\t - Prints Help. This Screen.\n");
|
||||
printf("\t-v|--version\t - Prints build version information\n");
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
bool encrypt = true;
|
||||
const char* dir = ".";
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
if (hsStrEQ(argv[1], "encrypt") || hsStrEQ(argv[1], "-e") )
|
||||
{
|
||||
if (argc > 2)
|
||||
dir = argv[2];
|
||||
encrypt = true;
|
||||
}
|
||||
else if (hsStrEQ(argv[1], "decrypt") || hsStrEQ(argv[1], "-d"))
|
||||
{
|
||||
if (argc > 2)
|
||||
dir = argv[2];
|
||||
encrypt = false;
|
||||
}
|
||||
else if(hsStrEQ(argv[1], "--help") || hsStrEQ(argv[1], "-h") || hsStrEQ(argv[1], "-?") || hsStrEQ(argv[1], "/?"))
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
}
|
||||
else if (hsStrEQ(argv[1], "-v") || hsStrEQ(argv[1], "--version"))
|
||||
{
|
||||
print_version();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
EncryptFiles(dir, ".age", encrypt);
|
||||
EncryptFiles(dir, ".fni", encrypt);
|
||||
EncryptFiles(dir, ".ini", encrypt);
|
||||
EncryptFiles(dir, ".sdl", encrypt);
|
||||
EncryptFiles(dir, ".csv", encrypt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EncryptFiles(const char* dir, const char* ext, bool encrypt)
|
||||
{
|
||||
char filePath[256];
|
||||
|
||||
hsFolderIterator folder(dir);
|
||||
while (folder.NextFileSuffix(ext))
|
||||
{
|
||||
folder.GetPathAndName(filePath);
|
||||
if (encrypt)
|
||||
{
|
||||
printf("encrypting: %s\n", folder.GetFileName());
|
||||
plEncryptedStream::FileEncrypt(filePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("decrypting: %s\n", folder.GetFileName());
|
||||
plEncryptedStream::FileDecrypt(filePath);
|
||||
}
|
||||
}
|
||||
}
|
212
Sources/Plasma/Apps/plFileSecure/main.cpp
Normal file
@ -0,0 +1,212 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "../plFile/hsFiles.h"
|
||||
#include "../plFile/plFileUtils.h"
|
||||
#include "../plFile/plSecureStream.h"
|
||||
#include "../pnUtils/pnUtils.h"
|
||||
#include "../pnProduct/pnProduct.h"
|
||||
#include "hsUtils.h"
|
||||
|
||||
#include <time.h>
|
||||
#include <string>
|
||||
|
||||
void print_version() {
|
||||
wchar productString[256];
|
||||
ProductString(productString, arrsize(productString));
|
||||
printf("%S\n\n", productString);
|
||||
}
|
||||
|
||||
void print_help() {
|
||||
printf("plFileSecure - Secures Uru files and generates encryption.key files.\n\n");
|
||||
print_version();
|
||||
printf("Usage:\n");
|
||||
printf("\tplFileSecure (<directory> <ext>)|[/generate /default]\n");
|
||||
printf("\n");
|
||||
printf("<directory> <ext> : The directory and extension of files to secure. Cannot\n");
|
||||
printf(" be used with /generate. Uses the %s file in\n", plFileUtils::kKeyFilename);
|
||||
printf(" the current directory (or default key if no file exists)\n");
|
||||
printf("/generate : Generates a random key and writes it to a %s\n", plFileUtils::kKeyFilename);
|
||||
printf(" file in the current directory. Cannot be used with\n");
|
||||
printf(" <directory> <ext>\n");
|
||||
printf("/default : If used with /generate, creates a %s file\n", plFileUtils::kKeyFilename);
|
||||
printf(" with the default key. If used with <directory> <ext>, it\n");
|
||||
printf(" secures with the default key instead of the\n");
|
||||
printf(" %s file's key\n", plFileUtils::kKeyFilename);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void GenerateKey(bool useDefault)
|
||||
{
|
||||
UInt32 key[4];
|
||||
if (useDefault)
|
||||
{
|
||||
unsigned memSize = min(arrsize(key), arrsize(plSecureStream::kDefaultKey));
|
||||
memSize *= sizeof(UInt32);
|
||||
memcpy(key, plSecureStream::kDefaultKey, memSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
srand((unsigned)time(nil));
|
||||
double randNum = (double)rand() / (double)RAND_MAX; // converts to 0..1
|
||||
UInt32 keyNum = (UInt32)(randNum * (double)0xFFFFFFFF); // multiply it by the max unsigned 32-bit int
|
||||
key[0] = keyNum;
|
||||
|
||||
randNum = (double)rand() / (double)RAND_MAX;
|
||||
keyNum = (UInt32)(randNum * (double)0xFFFFFFFF);
|
||||
key[1] = keyNum;
|
||||
|
||||
randNum = (double)rand() / (double)RAND_MAX;
|
||||
keyNum = (UInt32)(randNum * (double)0xFFFFFFFF);
|
||||
key[2] = keyNum;
|
||||
|
||||
randNum = (double)rand() / (double)RAND_MAX;
|
||||
keyNum = (UInt32)(randNum * (double)0xFFFFFFFF);
|
||||
key[3] = keyNum;
|
||||
}
|
||||
|
||||
hsUNIXStream out;
|
||||
out.Open(plFileUtils::kKeyFilename, "wb");
|
||||
out.Write(sizeof(UInt32) * arrsize(key), (void*)key);
|
||||
out.Close();
|
||||
}
|
||||
|
||||
void SecureFiles(std::string dir, std::string ext, UInt32* key)
|
||||
{
|
||||
char filePath[256];
|
||||
|
||||
hsFolderIterator folder(dir.c_str());
|
||||
while (folder.NextFileSuffix(ext.c_str()))
|
||||
{
|
||||
folder.GetPathAndName(filePath);
|
||||
printf("securing: %s\n", folder.GetFileName());
|
||||
plSecureStream::FileEncrypt(filePath, key);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
bool generatingKey = false;
|
||||
bool useDefault = false;
|
||||
std::string directory;
|
||||
std::string ext;
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
std::string arg = argv[i];
|
||||
if ((arg[0] == '-')||(arg[0] == '/'))
|
||||
{
|
||||
// this arg is a flag of some kind
|
||||
arg = arg.substr(1, arg.length()); // trim the dash or slash
|
||||
if ((stricmp(arg.c_str(), "g") == 0) || (stricmp(arg.c_str(), "generate") == 0))
|
||||
{
|
||||
if (!generatingKey)
|
||||
generatingKey = true;
|
||||
else
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if ((stricmp(arg.c_str(), "d") == 0) || (stricmp(arg.c_str(), "default") == 0))
|
||||
{
|
||||
if (!useDefault)
|
||||
useDefault = true;
|
||||
else
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// else it is a directory or extension
|
||||
if (directory == "")
|
||||
directory = argv[i];
|
||||
else if (ext == "")
|
||||
ext = argv[i];
|
||||
else
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (generatingKey && ((directory != "") || (ext != "")))
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (generatingKey)
|
||||
{
|
||||
GenerateKey(useDefault);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ext[0] != '.')
|
||||
ext = "." + ext; // tack on the dot if necessary
|
||||
|
||||
if (useDefault)
|
||||
SecureFiles(directory, ext, nil);
|
||||
else
|
||||
{
|
||||
UInt32 key[4];
|
||||
plFileUtils::GetSecureEncryptionKey(plFileUtils::kKeyFilename, key, arrsize(key));
|
||||
SecureFiles(directory, ext, key);
|
||||
}
|
||||
return 0;
|
||||
}
|
126
Sources/Plasma/Apps/plLogDecrypt/plLogDecrypt.cpp
Normal file
@ -0,0 +1,126 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* plLogDecrypt - Used by mantis to decrypt log files
|
||||
*
|
||||
***/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "hsTypes.h"
|
||||
#include "../plStatusLog/plEncryptLogLine.h"
|
||||
|
||||
void IProcessFile(const char *path)
|
||||
{
|
||||
char out_path[512];
|
||||
strcpy(out_path, path);
|
||||
strcat(out_path, ".decrypt");
|
||||
|
||||
FILE * fpIn = fopen(path, "rb");
|
||||
FILE * fpOut = fopen(out_path, "w");
|
||||
|
||||
if( fpIn != nil && fpOut != nil)
|
||||
{
|
||||
UInt8 line[ 2048 ];
|
||||
while( !feof( fpIn ) )
|
||||
{
|
||||
// Read next string
|
||||
long pos = ftell(fpIn);
|
||||
if( pos == -1L )
|
||||
break;
|
||||
UInt8 hint = (UInt8)pos;
|
||||
UInt16 sizeHint = (UInt16)pos;
|
||||
UInt16 size;
|
||||
|
||||
if( stricmp( path + strlen( path ) - 4, ".log" ) == 0 )
|
||||
{
|
||||
int i;
|
||||
for( i = 0; i < 511; i++ )
|
||||
{
|
||||
int c = fgetc( fpIn );
|
||||
if( c == EOF || c == hint )
|
||||
break;
|
||||
line[ i ] = (UInt8)c;
|
||||
}
|
||||
line[ i ] = 0;
|
||||
size = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
// UInt16 line length is encoded first
|
||||
int c = fgetc( fpIn );
|
||||
if( c == EOF )
|
||||
break;
|
||||
size = ( c & 0xff ) | ( fgetc( fpIn ) << 8 );
|
||||
|
||||
size = size ^ sizeHint;
|
||||
|
||||
if( size > sizeof( line ) )
|
||||
{
|
||||
hsAssert( size <= sizeof( line ) - 1, "Invalid line size" );
|
||||
break;
|
||||
}
|
||||
|
||||
fread( line, 1, size, fpIn );
|
||||
line[ size ] = 0;
|
||||
}
|
||||
|
||||
plStatusEncrypt::Decrypt( line, size, hint );
|
||||
fprintf(fpOut, "%s\n", (const char *)line);
|
||||
}
|
||||
}
|
||||
|
||||
if (fpIn)
|
||||
fclose(fpIn);
|
||||
if (fpOut)
|
||||
fclose(fpOut);
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[])
|
||||
{
|
||||
if (argc == 2)
|
||||
{
|
||||
IProcessFile(argv[1]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
51
Sources/Plasma/Apps/plMD5/Intern.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $/Plasma20/Sources/Plasma/Apps/plMD5/Intern.h
|
||||
*
|
||||
***/
|
||||
|
||||
#ifdef PLASMA20_SOURCES_PLASMA_APPS_PLMD5_INTERN_H
|
||||
#error "Header $/Plasma20/Sources/Plasma/Apps/plMD5/Intern.h included more than once"
|
||||
#endif
|
||||
#define PLASMA20_SOURCES_PLASMA_APPS_PLMD5_INTERN_H
|
74
Sources/Plasma/Apps/plMD5/Main.cpp
Normal file
@ -0,0 +1,74 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $/Plasma20/Sources/Plasma/Apps/plMD5/Main.cpp
|
||||
*
|
||||
***/
|
||||
|
||||
#include "Pch.h"
|
||||
#pragma hdrstop
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Exports
|
||||
*
|
||||
***/
|
||||
|
||||
//============================================================================
|
||||
int __cdecl main (int argc, char ** argv) {
|
||||
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "ERROR: Please specify filename.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
plMD5Checksum md5(argv[1]);
|
||||
if (!md5.IsValid()) {
|
||||
fprintf(stderr, "ERROR: MD5 failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
fprintf(stdout, "%s\n", md5.GetAsHexString());
|
||||
return 0;
|
||||
}
|
57
Sources/Plasma/Apps/plMD5/Pch.h
Normal file
@ -0,0 +1,57 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* $/Plasma20/Sources/Plasma/Apps/plMD5/Pch.h
|
||||
*
|
||||
***/
|
||||
|
||||
#ifdef PLASMA20_SOURCES_PLASMA_APPS_PLMD5_PCH_H
|
||||
#error "Header $/Plasma20/Sources/Plasma/Apps/plMD5/Pch.h included more than once"
|
||||
#endif
|
||||
#define PLASMA20_SOURCES_PLASMA_APPS_PLMD5_PCH_H
|
||||
|
||||
#include "pnUtils/pnUtils.h"
|
||||
#include "pnProduct/pnProduct.h"
|
||||
#include "plEncryption/plChecksum.h"
|
||||
|
||||
#include <stdio.h>
|
70
Sources/Plasma/Apps/plPageInfo/plAllCreatables.cpp
Normal file
@ -0,0 +1,70 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "hsTypes.h"
|
||||
|
||||
#include "../pnFactory/plCreator.h"
|
||||
|
||||
#include "plAudible.h"
|
||||
REGISTER_NONCREATABLE( plAudible );
|
||||
|
||||
#include "plDrawable.h"
|
||||
REGISTER_NONCREATABLE( plDrawable );
|
||||
|
||||
#include "plPhysical.h"
|
||||
REGISTER_NONCREATABLE( plPhysical );
|
||||
|
||||
#include "plgDispatch.h"
|
||||
REGISTER_NONCREATABLE( plDispatchBase );
|
||||
|
||||
#include "../pnDispatch/pnDispatchCreatable.h"
|
||||
#include "../pnKeyedObject/pnKeyedObjectCreatable.h"
|
||||
#include "../pnMessage/pnMessageCreatable.h"
|
||||
#include "../pnModifier/pnModifierCreatable.h"
|
||||
#include "../pnNetCommon/pnNetCommonCreatable.h"
|
||||
#include "../pnTimer/pnTimerCreatable.h"
|
||||
|
||||
#include "../plResMgr/plResMgrCreatable.h"
|
||||
|
||||
#include "../plMessage/plResMgrHelperMsg.h"
|
||||
REGISTER_CREATABLE(plResMgrHelperMsg);
|
||||
|
||||
#include "../plAudioCore/plAudioCoreCreatable.h"
|
270
Sources/Plasma/Apps/plPageInfo/plPageInfo.cpp
Normal file
@ -0,0 +1,270 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "hsUtils.h"
|
||||
#include "hsTimer.h"
|
||||
#include "../plFile/hsFiles.h"
|
||||
#include "../plFile/plFileUtils.h"
|
||||
#include "../plResMgr/plResManager.h"
|
||||
#include "../plResMgr/plResMgrSettings.h"
|
||||
|
||||
#include "../plAgeDescription/plAgeManifest.h"
|
||||
|
||||
#include "../plResMgr/plRegistryHelpers.h"
|
||||
#include "../plResMgr/plRegistryNode.h"
|
||||
|
||||
#include "../plAudioCore/plSoundBuffer.h"
|
||||
#include "hsStream.h"
|
||||
|
||||
#include "../pnUtils/pnUtils.h"
|
||||
#include "../pnProduct/pnProduct.h"
|
||||
|
||||
|
||||
//// Globals /////////////////////////////////////////////////////////////////
|
||||
|
||||
plResManager* gResMgr = nil;
|
||||
|
||||
bool DumpStats(const char* patchDir);
|
||||
bool DumpSounds();
|
||||
|
||||
//// PrintVersion ///////////////////////////////////////////////////////////////
|
||||
void PrintVersion()
|
||||
{
|
||||
wchar productString[256];
|
||||
ProductString(productString, arrsize(productString));
|
||||
_putws(productString);
|
||||
}
|
||||
|
||||
//// PrintHelp ///////////////////////////////////////////////////////////////
|
||||
|
||||
int PrintHelp( void )
|
||||
{
|
||||
puts("");
|
||||
PrintVersion();
|
||||
puts("");
|
||||
puts("Usage: plPageInfo [-s -i] pageFile");
|
||||
puts(" plPageInfo -v");
|
||||
puts("Where:" );
|
||||
puts(" -v print version and exit.");
|
||||
puts(" -s dump sounds in page to the console");
|
||||
puts(" -i dump object size info to .csv files");
|
||||
puts(" pageFile is the path to the .prp file");
|
||||
puts("");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
//// main ////////////////////////////////////////////////////////////////////
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
if (argc >= 1 && hsStrEQ(argv[1], "-v"))
|
||||
{
|
||||
PrintVersion();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc < 3)
|
||||
return PrintHelp();
|
||||
|
||||
bool sounds = false;
|
||||
bool stats = false;
|
||||
|
||||
int arg = 1;
|
||||
for (arg = 1; arg < argc; arg++)
|
||||
{
|
||||
if (hsStrEQ(argv[arg], "-s"))
|
||||
sounds = true;
|
||||
else if (hsStrEQ(argv[arg], "-i"))
|
||||
stats = true;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
// Make sure we have 1 arg left after getting the options
|
||||
char* pageFile = nil;
|
||||
if (arg < argc)
|
||||
pageFile = argv[arg];
|
||||
else
|
||||
return PrintHelp();
|
||||
|
||||
// Init our special resMgr
|
||||
plResMgrSettings::Get().SetFilterNewerPageVersions(false);
|
||||
plResMgrSettings::Get().SetFilterOlderPageVersions(false);
|
||||
plResMgrSettings::Get().SetLoadPagesOnInit(false);
|
||||
gResMgr = TRACKED_NEW plResManager;
|
||||
hsgResMgr::Init(gResMgr);
|
||||
gResMgr->AddSinglePage(pageFile);
|
||||
|
||||
if (sounds)
|
||||
DumpSounds();
|
||||
if (stats)
|
||||
{
|
||||
char path[256];
|
||||
strcpy(path, pageFile);
|
||||
plFileUtils::StripFile(path);
|
||||
DumpStats(path);
|
||||
}
|
||||
|
||||
hsgResMgr::Shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//// plSoundBufferCollector //////////////////////////////////////////////////
|
||||
// Page iterator that collects all the plSoundBuffers in all of our pages
|
||||
|
||||
class plSoundBufferCollector : public plRegistryPageIterator, public plKeyCollector
|
||||
{
|
||||
public:
|
||||
plSoundBufferCollector(std::set<plKey>& keyArray)
|
||||
: plKeyCollector(keyArray) {}
|
||||
|
||||
hsBool EatPage(plRegistryPageNode* page)
|
||||
{
|
||||
page->LoadKeys();
|
||||
return page->IterateKeys(this, plSoundBuffer::Index());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
bool DumpSounds()
|
||||
{
|
||||
std::set<plKey> soundKeys;
|
||||
|
||||
plSoundBufferCollector soundCollector(soundKeys);
|
||||
gResMgr->IterateAllPages(&soundCollector);
|
||||
|
||||
for (std::set<plKey>::iterator it = soundKeys.begin(); it != soundKeys.end(); ++it)
|
||||
{
|
||||
plSoundBuffer* buffer = plSoundBuffer::ConvertNoRef((*it)->VerifyLoaded());
|
||||
if (buffer)
|
||||
{
|
||||
// Ref it...
|
||||
buffer->GetKey()->RefObject();
|
||||
|
||||
// Get the filename from it and add that file if necessary
|
||||
const char* filename = buffer->GetFileName();
|
||||
if (filename)
|
||||
{
|
||||
UInt32 flags = 0;
|
||||
|
||||
if (stricmp(plFileUtils::GetFileExt(filename), "wav") != 0)
|
||||
{
|
||||
if (buffer->HasFlag(plSoundBuffer::kOnlyLeftChannel) ||
|
||||
buffer->HasFlag(plSoundBuffer::kOnlyRightChannel))
|
||||
hsSetBits(flags, plManifestFile::kSndFlagCacheSplit);
|
||||
else if (buffer->HasFlag(plSoundBuffer::kStreamCompressed))
|
||||
hsSetBits(flags, plManifestFile::kSndFlagStreamCompressed);
|
||||
else
|
||||
hsSetBits(flags, plManifestFile::kSndFlagCacheStereo);
|
||||
}
|
||||
|
||||
printf("%s,%u\n", filename, flags);
|
||||
}
|
||||
|
||||
// Unref the object so it goes away
|
||||
buffer->GetKey()->UnRefObject();
|
||||
}
|
||||
}
|
||||
|
||||
soundKeys.clear();
|
||||
plIndirectUnloadIterator iter;
|
||||
gResMgr->IterateAllPages(&iter);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "../pnKeyedObject/plKeyImp.h"
|
||||
|
||||
class plStatDumpIterator : public plRegistryPageIterator, public plRegistryKeyIterator
|
||||
{
|
||||
protected:
|
||||
const char* fOutputDir;
|
||||
hsUNIXStream fStream;
|
||||
|
||||
public:
|
||||
plStatDumpIterator(const char* outputDir) : fOutputDir(outputDir) {}
|
||||
|
||||
hsBool EatKey(const plKey& key)
|
||||
{
|
||||
plKeyImp* imp = (plKey)key;
|
||||
|
||||
fStream.WriteString(imp->GetName());
|
||||
fStream.WriteString(",");
|
||||
|
||||
fStream.WriteString(plFactory::GetNameOfClass(imp->GetUoid().GetClassType()));
|
||||
fStream.WriteString(",");
|
||||
|
||||
char buf[30];
|
||||
sprintf(buf, "%u", imp->GetDataLen());
|
||||
fStream.WriteString(buf);
|
||||
fStream.WriteString("\n");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
hsBool EatPage(plRegistryPageNode* page)
|
||||
{
|
||||
const plPageInfo& info = page->GetPageInfo();
|
||||
|
||||
char fileName[256];
|
||||
sprintf(fileName, "%s%s_%s.csv", fOutputDir, info.GetAge(), info.GetPage());
|
||||
fStream.Open(fileName, "wt");
|
||||
|
||||
page->LoadKeys();
|
||||
page->IterateKeys(this);
|
||||
|
||||
fStream.Close();
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
bool DumpStats(const char* patchDir)
|
||||
{
|
||||
plStatDumpIterator statDump(patchDir);
|
||||
gResMgr->IterateAllPages(&statDump);
|
||||
return true;
|
||||
}
|
121
Sources/Plasma/Apps/plPageOptimizer/main.cpp
Normal file
@ -0,0 +1,121 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "../plResMgr/plResManager.h"
|
||||
#include "../pfPython/plPythonFileMod.h"
|
||||
#include "../plGImage/plFontCache.h"
|
||||
#include "../plPhysX/plSimulationMgr.h"
|
||||
#include "../plAvatar/plAvatarMgr.h"
|
||||
|
||||
#include "plPageOptimizer.h"
|
||||
#include "../plFile/plFileUtils.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
if (argc != 2)
|
||||
{
|
||||
printf("plPageOptimizer: wrong number of arguments");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Optimizing %s...", plFileUtils::GetFileName(argv[1]));
|
||||
|
||||
plFontCache* fontCache;
|
||||
#ifndef _DEBUG
|
||||
try
|
||||
{
|
||||
#endif
|
||||
plResManager* resMgr = TRACKED_NEW plResManager;
|
||||
hsgResMgr::Init(resMgr);
|
||||
|
||||
// Setup all the crap that needs to be around to load
|
||||
plSimulationMgr::Init();
|
||||
fontCache = TRACKED_NEW plFontCache;
|
||||
plPythonFileMod::SetAtConvertTime();
|
||||
#ifndef _DEBUG
|
||||
} catch (...)
|
||||
{
|
||||
printf(" ***crashed on init");
|
||||
return 2;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef _DEBUG
|
||||
try
|
||||
#endif
|
||||
{
|
||||
plPageOptimizer optimizer(argv[1]);
|
||||
optimizer.Optimize();
|
||||
}
|
||||
#ifndef _DEBUG
|
||||
catch (...)
|
||||
{
|
||||
printf(" ***crashed on optimizing");
|
||||
return 2;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef _DEBUG
|
||||
try
|
||||
{
|
||||
#endif
|
||||
// Deinit the crap
|
||||
fontCache->UnRegisterAs(kFontCache_KEY);
|
||||
fontCache = nil;
|
||||
plSimulationMgr::Shutdown();
|
||||
|
||||
// Reading in objects may have generated dirty state which we're obviously
|
||||
// not sending out. Clear it so that we don't have leaked keys before the
|
||||
// ResMgr goes away.
|
||||
std::vector<plSynchedObject::StateDefn> carryOvers;
|
||||
plSynchedObject::ClearDirtyState(carryOvers);
|
||||
|
||||
hsgResMgr::Shutdown();
|
||||
#ifndef _DEBUG
|
||||
} catch (...)
|
||||
{
|
||||
printf(" ***crashed on shutdown");
|
||||
return 2;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
56
Sources/Plasma/Apps/plPageOptimizer/pfAllCreatables.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "../pfCharacter/pfCharacterCreatable.h"
|
||||
#include "../pfCamera/pfCameraCreatable.h"
|
||||
#include "../pfAnimation/pfAnimationCreatable.h"
|
||||
#include "../pfConditional/plConditionalObjectCreatable.h"
|
||||
//#include "../pfConsole/pfConsoleCreatable.h"
|
||||
#include "../pfSurface/pfSurfaceCreatable.h"
|
||||
#include "../pfMessage/pfMessageCreatable.h"
|
||||
#include "../pfAudio/pfAudioCreatable.h"
|
||||
#include "../pfPython/pfPythonCreatable.h"
|
||||
#include "../pfGameGUIMgr/pfGameGUIMgrCreatable.h"
|
||||
#ifdef PLASMA_CCR_RELEASE
|
||||
#include "../pfCCR/plCCRCreatable.h"
|
||||
#endif // PLASMA_CCR_RELEASE
|
||||
#include "../pfJournalBook/pfJournalBookCreatable.h"
|
||||
#include "../pfGameMgr/pfGameMgrCreatables.h"
|
285
Sources/Plasma/Apps/plPageOptimizer/plPageOptimizer.cpp
Normal file
@ -0,0 +1,285 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "plPageOptimizer.h"
|
||||
|
||||
#include "../pnKeyedObject/plUoid.h"
|
||||
#include "../plResMgr/plResManager.h"
|
||||
#include "../plResMgr/plRegistryHelpers.h"
|
||||
#include "../plResMgr/plKeyFinder.h"
|
||||
#include "../plResMgr/plRegistryNode.h"
|
||||
|
||||
#include "../pnFactory/plFactory.h"
|
||||
#include "../pnKeyedObject/plKeyImp.h"
|
||||
|
||||
#include "../plFile/plFileUtils.h"
|
||||
#include "hsStream.h"
|
||||
|
||||
plPageOptimizer* plPageOptimizer::fInstance = nil;
|
||||
|
||||
plPageOptimizer::plPageOptimizer(const char* pagePath) :
|
||||
fOptimized(true),
|
||||
fPageNode(nil),
|
||||
fPagePath(pagePath)
|
||||
{
|
||||
fInstance = this;
|
||||
|
||||
strcpy(fTempPagePath, fPagePath);
|
||||
plFileUtils::StripExt(fTempPagePath);
|
||||
strcat(fTempPagePath, "_opt.prp");
|
||||
|
||||
fResMgr = (plResManager*)hsgResMgr::ResMgr();
|
||||
}
|
||||
|
||||
void plPageOptimizer::IFindLoc()
|
||||
{
|
||||
class plPageIt : public plRegistryPageIterator
|
||||
{
|
||||
public:
|
||||
plLocation fLoc;
|
||||
|
||||
virtual hsBool EatPage(plRegistryPageNode* keyNode)
|
||||
{
|
||||
fLoc = keyNode->GetPageInfo().GetLocation();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
plPageIt it;
|
||||
fResMgr->IterateAllPages(&it);
|
||||
fLoc = it.fLoc;
|
||||
}
|
||||
|
||||
void plPageOptimizer::Optimize()
|
||||
{
|
||||
fResMgr->AddSinglePage(fPagePath);
|
||||
|
||||
// Get the location of the page we're optimizing
|
||||
IFindLoc();
|
||||
|
||||
hsBool loaded = true;
|
||||
|
||||
// Get the key for the scene node, we'll load it to force a load on all the objects
|
||||
plKey snKey = plKeyFinder::Instance().FindSceneNodeKey(fLoc);
|
||||
if (snKey)
|
||||
{
|
||||
// Load all the keys
|
||||
fPageNode = fResMgr->FindPage(fLoc);
|
||||
fResMgr->LoadPageKeys(fPageNode);
|
||||
|
||||
// Put all the keys in a vector, so they won't get unreffed
|
||||
class plVecKeyCollector : public plRegistryKeyIterator
|
||||
{
|
||||
public:
|
||||
KeyVec& fKeys;
|
||||
plVecKeyCollector(KeyVec& keys) : fKeys(keys) {}
|
||||
virtual hsBool EatKey(const plKey& key) { fKeys.push_back(key); return true; }
|
||||
};
|
||||
plVecKeyCollector keyIt(fAllKeys);
|
||||
fResMgr->IterateKeys(&keyIt);
|
||||
|
||||
// Set our load proc, which will track the order that objects are loaded
|
||||
fResMgr->SetProgressBarProc(KeyedObjectProc);
|
||||
|
||||
// Load the page
|
||||
snKey->VerifyLoaded();
|
||||
|
||||
// Unload everything
|
||||
snKey->RefObject();
|
||||
snKey->UnRefObject();
|
||||
snKey = nil;
|
||||
}
|
||||
else
|
||||
{
|
||||
loaded = false;
|
||||
}
|
||||
|
||||
if (loaded)
|
||||
IRewritePage();
|
||||
|
||||
UInt32 oldSize = plFileUtils::GetFileSize(fPagePath);
|
||||
UInt32 newSize = plFileUtils::GetFileSize(fTempPagePath);
|
||||
|
||||
if (!loaded)
|
||||
{
|
||||
printf("no scene node.\n");
|
||||
}
|
||||
else if (fOptimized)
|
||||
{
|
||||
plFileUtils::RemoveFile(fTempPagePath);
|
||||
printf("already optimized.\n");
|
||||
}
|
||||
else if (oldSize == newSize)
|
||||
{
|
||||
plFileUtils::RemoveFile(fPagePath, true);
|
||||
plFileUtils::FileMove(fTempPagePath, fPagePath);
|
||||
|
||||
printf("complete\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
plFileUtils::RemoveFile(fTempPagePath);
|
||||
printf("failed. File sizes different\n");
|
||||
}
|
||||
}
|
||||
|
||||
void plPageOptimizer::KeyedObjectProc(plKey key)
|
||||
{
|
||||
const char* keyName = key->GetName();
|
||||
const char* className = plFactory::GetNameOfClass(key->GetUoid().GetClassType());
|
||||
|
||||
// For now, ignore any key that isn't in the location we're looking at. That means stuff like textures.
|
||||
if (fInstance->fLoc != key->GetUoid().GetLocation())
|
||||
return;
|
||||
|
||||
KeySet& loadedKeys = fInstance->fLoadedKeys;
|
||||
KeyVec& loadOrder = fInstance->fKeyLoadOrder;
|
||||
|
||||
KeySet::iterator it = loadedKeys.lower_bound(key);
|
||||
if (it != loadedKeys.end() && *it == key)
|
||||
{
|
||||
printf("Keyed object %s(%s) loaded more than once\n", keyName, className);
|
||||
}
|
||||
else
|
||||
{
|
||||
loadedKeys.insert(it, key);
|
||||
loadOrder.push_back(key);
|
||||
}
|
||||
}
|
||||
|
||||
void plPageOptimizer::IWriteKeyData(hsStream* oldPage, hsStream* newPage, plKey key)
|
||||
{
|
||||
class plUpdateKeyImp : public plKeyImp
|
||||
{
|
||||
public:
|
||||
void SetStartPos(UInt32 startPos) { fStartPos = startPos; }
|
||||
};
|
||||
|
||||
plUpdateKeyImp* keyImp = (plUpdateKeyImp*)(plKeyImp*)key;
|
||||
UInt32 startPos = keyImp->GetStartPos();
|
||||
UInt32 len = keyImp->GetDataLen();
|
||||
|
||||
oldPage->SetPosition(startPos);
|
||||
if (len > fBuf.size())
|
||||
fBuf.resize(len);
|
||||
oldPage->Read(len, &fBuf[0]);
|
||||
|
||||
UInt32 newStartPos = newPage->GetPosition();
|
||||
|
||||
// If we move any buffers, this page wasn't optimized already
|
||||
if (newStartPos != startPos)
|
||||
fOptimized = false;
|
||||
|
||||
keyImp->SetStartPos(newStartPos);
|
||||
newPage->Write(len, &fBuf[0]);
|
||||
}
|
||||
|
||||
void plPageOptimizer::IRewritePage()
|
||||
{
|
||||
hsUNIXStream newPage;
|
||||
|
||||
if (newPage.Open(fTempPagePath, "wb"))
|
||||
{
|
||||
hsUNIXStream oldPage;
|
||||
oldPage.Open(fPagePath);
|
||||
|
||||
const plPageInfo& pageInfo = fPageNode->GetPageInfo();
|
||||
|
||||
UInt32 dataStart = pageInfo.GetDataStart();
|
||||
|
||||
fBuf.resize(dataStart);
|
||||
|
||||
oldPage.Read(dataStart, &fBuf[0]);
|
||||
newPage.Write(dataStart, &fBuf[0]);
|
||||
|
||||
int size = (int)fKeyLoadOrder.size();
|
||||
for (int i = 0; i < size; i++)
|
||||
IWriteKeyData(&oldPage, &newPage, fKeyLoadOrder[i]);
|
||||
|
||||
// If there are any objects that we didn't write (because they didn't load for
|
||||
// some reason), put them at the end
|
||||
for (int i = 0; i < fAllKeys.size(); i++)
|
||||
{
|
||||
hsBool found = (fLoadedKeys.find(fAllKeys[i]) != fLoadedKeys.end());
|
||||
if (!found)
|
||||
IWriteKeyData(&oldPage, &newPage, fAllKeys[i]);
|
||||
}
|
||||
|
||||
UInt32 newKeyStart = newPage.GetPosition();
|
||||
UInt32 oldKeyStart = pageInfo.GetIndexStart();
|
||||
oldPage.SetPosition(oldKeyStart);
|
||||
|
||||
UInt32 numTypes = oldPage.ReadSwap32();
|
||||
newPage.WriteSwap32(numTypes);
|
||||
|
||||
for (UInt32 i = 0; i < numTypes; i++)
|
||||
{
|
||||
UInt16 classType = oldPage.ReadSwap16();
|
||||
UInt32 len = oldPage.ReadSwap32();
|
||||
UInt8 flags = oldPage.ReadByte();
|
||||
UInt32 numKeys = oldPage.ReadSwap32();
|
||||
|
||||
newPage.WriteSwap16(classType);
|
||||
newPage.WriteSwap32(len);
|
||||
newPage.WriteByte(flags);
|
||||
newPage.WriteSwap32(numKeys);
|
||||
|
||||
for (UInt32 j = 0; j < numKeys; j++)
|
||||
{
|
||||
plUoid uoid;
|
||||
uoid.Read(&oldPage);
|
||||
UInt32 startPos = oldPage.ReadSwap32();
|
||||
UInt32 dataLen = oldPage.ReadSwap32();
|
||||
|
||||
// Get the new start pos
|
||||
plKeyImp* key = (plKeyImp*)fResMgr->FindKey(uoid);
|
||||
startPos = key->GetStartPos();
|
||||
|
||||
uoid.Write(&newPage);
|
||||
newPage.WriteSwap32(startPos);
|
||||
newPage.WriteSwap32(dataLen);
|
||||
}
|
||||
}
|
||||
|
||||
newPage.Close();
|
||||
oldPage.Close();
|
||||
}
|
||||
}
|
86
Sources/Plasma/Apps/plPageOptimizer/plPageOptimizer.h
Normal file
@ -0,0 +1,86 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef plPageOptimizer_h_inc
|
||||
#define plPageOptimizer_h_inc
|
||||
|
||||
#include "../pnKeyedObject/plKey.h"
|
||||
#include "../pnKeyedObject/plUoid.h"
|
||||
#include <vector>
|
||||
#include <set>
|
||||
|
||||
class plRegistryPageNode;
|
||||
class plResManager;
|
||||
|
||||
class plPageOptimizer
|
||||
{
|
||||
protected:
|
||||
typedef std::vector<plKey> KeyVec;
|
||||
typedef std::set<plKey> KeySet;
|
||||
|
||||
KeyVec fKeyLoadOrder; // The order objects were loaded in
|
||||
KeySet fLoadedKeys; // Keys we've loaded objects for, for quick lookup
|
||||
KeyVec fAllKeys; // All the keys in the page
|
||||
std::vector<UInt8> fBuf;
|
||||
|
||||
bool fOptimized; // True after optimization if the page was already optimized
|
||||
|
||||
const char* fPagePath; // Path to our page
|
||||
char fTempPagePath[512]; // Path to the temp output page
|
||||
plLocation fLoc; // Location of our page
|
||||
plRegistryPageNode* fPageNode; // PageNode for our page
|
||||
|
||||
plResManager* fResMgr;
|
||||
|
||||
static plPageOptimizer* fInstance;
|
||||
static void KeyedObjectProc(plKey key);
|
||||
|
||||
void IWriteKeyData(hsStream* oldPage, hsStream* newPage, plKey key);
|
||||
void IFindLoc();
|
||||
void IRewritePage();
|
||||
|
||||
public:
|
||||
plPageOptimizer(const char* pagePath);
|
||||
|
||||
void Optimize();
|
||||
};
|
||||
|
||||
#endif // plPageOptimizer_h_inc
|
BIN
Sources/Plasma/Apps/plPlasmaInstaller/Dirt.ICO
Normal file
After Width: | Height: | Size: 2.5 KiB |
63
Sources/Plasma/Apps/plPlasmaInstaller/main.cpp
Normal file
@ -0,0 +1,63 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "HeadSpin.h"
|
||||
#include "plPlasmaInstaller.h"
|
||||
#include "jvCoreUtil.h"
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
jvCoreUtil::SetHInstance(hInstance);
|
||||
plPlasmaInstaller installer;
|
||||
installer.Create();
|
||||
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if (!IsDialogMessage(installer.GetHWnd(), &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
return msg.wParam;
|
||||
}
|
113
Sources/Plasma/Apps/plPlasmaInstaller/plInstallerReg.cpp
Normal file
@ -0,0 +1,113 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "HeadSpin.h"
|
||||
#include "plInstallerReg.h"
|
||||
#include <windows.h>
|
||||
|
||||
static HKEY GetInstallerKey()
|
||||
{
|
||||
HKEY hSoftKey = NULL;
|
||||
HKEY hCompanyKey = NULL;
|
||||
HKEY hAppKey = NULL;
|
||||
|
||||
if(RegOpenKeyEx(HKEY_CURRENT_USER, "software", 0, KEY_WRITE|KEY_READ,
|
||||
&hSoftKey) == ERROR_SUCCESS)
|
||||
{
|
||||
DWORD dw;
|
||||
if(RegCreateKeyEx(hSoftKey, "Cyan", 0, REG_NONE,
|
||||
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
|
||||
&hCompanyKey, &dw) == ERROR_SUCCESS)
|
||||
{
|
||||
RegCreateKeyEx(hCompanyKey, "PlasmaInstaller", 0, REG_NONE,
|
||||
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
|
||||
&hAppKey, &dw);
|
||||
}
|
||||
}
|
||||
|
||||
if (hSoftKey != NULL)
|
||||
RegCloseKey(hSoftKey);
|
||||
if (hCompanyKey != NULL)
|
||||
RegCloseKey(hCompanyKey);
|
||||
|
||||
return hAppKey;
|
||||
}
|
||||
|
||||
static void WriteRegString(const char* valueName, const char* value)
|
||||
{
|
||||
HKEY installKey = GetInstallerKey();
|
||||
RegSetValueEx(installKey, valueName, 0, REG_SZ, (const BYTE*)value, strlen(value)+1);
|
||||
RegCloseKey(installKey);
|
||||
}
|
||||
|
||||
static bool ReadRegString(const char* valueName, char* value, DWORD size)
|
||||
{
|
||||
HKEY installKey = GetInstallerKey();
|
||||
bool ret = (RegQueryValueEx(installKey, valueName, NULL, NULL, (LPBYTE)value, &size) == ERROR_SUCCESS);
|
||||
RegCloseKey(installKey);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void plInstallerReg::SetClientDir(const char* dir)
|
||||
{
|
||||
WriteRegString("Client", dir);
|
||||
}
|
||||
|
||||
void plInstallerReg::SetMaxDir(const char* dir)
|
||||
{
|
||||
WriteRegString("3dsmax", dir);
|
||||
}
|
||||
|
||||
const char* plInstallerReg::GetClientDir()
|
||||
{
|
||||
static char dir[MAX_PATH];
|
||||
if (!ReadRegString("Client", dir, sizeof(dir)))
|
||||
strcpy(dir, "C:\\PlasmaClient");
|
||||
return dir;
|
||||
}
|
||||
|
||||
const char* plInstallerReg::GetMaxDir()
|
||||
{
|
||||
static char dir[MAX_PATH];
|
||||
dir[0] = '\0';
|
||||
ReadRegString("3dsmax", dir, sizeof(dir));
|
||||
return dir;
|
||||
}
|
50
Sources/Plasma/Apps/plPlasmaInstaller/plInstallerReg.h
Normal file
@ -0,0 +1,50 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
namespace plInstallerReg
|
||||
{
|
||||
void SetClientDir(const char* dir);
|
||||
void SetMaxDir(const char* dir);
|
||||
|
||||
const char* GetClientDir();
|
||||
const char* GetMaxDir();
|
||||
}
|
408
Sources/Plasma/Apps/plPlasmaInstaller/plPlasmaInstaller.cpp
Normal file
@ -0,0 +1,408 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "HeadSpin.h"
|
||||
#include "plPlasmaInstaller.h"
|
||||
#include "resource.h"
|
||||
#include <windowsx.h>
|
||||
#include <commctrl.h>
|
||||
|
||||
#include "../plFile/hsFiles.h"
|
||||
#include "plUnzip.h"
|
||||
#include "plInstallerReg.h"
|
||||
#include "../plFile/plBrowseFolder.h"
|
||||
#include "plSetPlasmaPath.h"
|
||||
|
||||
plPlasmaInstaller::plPlasmaInstaller()
|
||||
{
|
||||
fDailyDir[0] = '\0';
|
||||
fDidGet = false;
|
||||
fStatusList = nil;
|
||||
|
||||
INITCOMMONCONTROLSEX icc = {0};
|
||||
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
||||
icc.dwICC = ICC_DATE_CLASSES;
|
||||
InitCommonControlsEx(&icc);
|
||||
}
|
||||
|
||||
void plPlasmaInstaller::Create()
|
||||
{
|
||||
ICreateDialog(IDD_INSTALLER, NULL);
|
||||
}
|
||||
|
||||
static const char* kAllClientExes = "AllClientExes.zip";
|
||||
static const char* kAllDllsRelease = "AllDllsRelease.zip";
|
||||
static const char* kScripts = "Scripts.zip";
|
||||
static const char* kTools = "AllToolsRelease.zip";
|
||||
|
||||
bool FileExists(const char* path, const char* filename)
|
||||
{
|
||||
char fullpath[MAX_PATH];
|
||||
sprintf(fullpath, "%s%s", path, filename);
|
||||
HANDLE hFile = CreateFile(fullpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
||||
if (hFile != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
CloseHandle(hFile);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool plPlasmaInstaller::IGetDailyDir()
|
||||
{
|
||||
// Get the branch
|
||||
HWND hBuild = GetDlgItem(fDlg, IDC_BUILD_COMBO);
|
||||
int idx = ComboBox_GetCurSel(hBuild);
|
||||
int buildServer = ComboBox_GetItemData(hBuild, idx);
|
||||
|
||||
HWND hTime = GetDlgItem(fDlg, IDC_TIME_COMBO);
|
||||
idx = ComboBox_GetCurSel(hTime);
|
||||
int time = ComboBox_GetItemData(hTime, idx);
|
||||
|
||||
// Get the build date
|
||||
SYSTEMTIME date;
|
||||
DateTime_GetSystemtime(GetDlgItem(fDlg, IDC_BRANCH_DATE), &date);
|
||||
char dateStr[] = "xx-xx-xxxx";
|
||||
sprintf(dateStr, "%02d-%02d-%04d", date.wMonth, date.wDay, date.wYear);
|
||||
|
||||
fDailyDir[0] = '\0';
|
||||
|
||||
IAddStatusLine("Searching for %s build...", dateStr);
|
||||
|
||||
|
||||
char buildDir[MAX_PATH];
|
||||
|
||||
static const char* kMainBuild = "\\\\Plasmabuild\\Output\\";
|
||||
static const char* kBranchBuild = "\\\\Branchbuild\\Output\\";
|
||||
static const char* kActiveBuild = "\\\\Activebuild\\Output\\";
|
||||
static const char* kInternalMain = "Main-Internal\\";
|
||||
static const char* kInternalBranch = "Branch-Internal\\";
|
||||
static const char* kInternalActive = "Active-Internal\\";
|
||||
|
||||
switch (buildServer)
|
||||
{
|
||||
case kBuildMain: strcpy(buildDir, kMainBuild); break;
|
||||
case kBuildBranch: strcpy(buildDir, kBranchBuild); break;
|
||||
case kBuildActive: strcpy(buildDir, kActiveBuild); break;
|
||||
}
|
||||
|
||||
switch (time)
|
||||
{
|
||||
case kNightly:
|
||||
strcat(buildDir, "Nightly\\");
|
||||
break;
|
||||
case kAfternoon:
|
||||
strcat(buildDir, "Afternoon\\");
|
||||
break;
|
||||
case kEvening:
|
||||
strcat(buildDir, "Evening\\");
|
||||
break;
|
||||
}
|
||||
|
||||
strcat(buildDir, dateStr);
|
||||
strcat(buildDir, "\\");
|
||||
|
||||
switch (buildServer)
|
||||
{
|
||||
case kBuildMain: strcat(buildDir, kInternalMain); break;
|
||||
case kBuildBranch: strcat(buildDir, kInternalBranch); break;
|
||||
case kBuildActive: strcat(buildDir, kInternalActive); break;
|
||||
}
|
||||
|
||||
if (FileExists(buildDir, kAllClientExes) && FileExists(buildDir, kAllDllsRelease) && FileExists(buildDir, kScripts))
|
||||
{
|
||||
strcpy(fDailyDir, buildDir);
|
||||
|
||||
const char* serverName = nil;
|
||||
switch (buildServer)
|
||||
{
|
||||
case kBuildMain: serverName = "Main"; break;
|
||||
case kBuildBranch: serverName = "Branch"; break;
|
||||
case kBuildActive: serverName = "Active"; break;
|
||||
}
|
||||
IAddStatusLine("Found %s at %s", serverName, fDailyDir);
|
||||
|
||||
EnableWindow(GetDlgItem(fDlg, IDC_GET_BUTTON), TRUE);
|
||||
return true;
|
||||
}
|
||||
|
||||
IAddStatusLine("Couldn't find build");
|
||||
EnableWindow(GetDlgItem(fDlg, IDC_GET_BUTTON), FALSE);
|
||||
return false;
|
||||
}
|
||||
|
||||
void plPlasmaInstaller::IInit()
|
||||
{
|
||||
const char* clientDir = plInstallerReg::GetClientDir();
|
||||
SetDlgItemText(fDlg, IDC_CLIENT_EDIT, clientDir);
|
||||
|
||||
const char* maxDir = plInstallerReg::GetMaxDir();
|
||||
SetDlgItemText(fDlg, IDC_3DSMAX_EDIT, maxDir);
|
||||
|
||||
fStatusList = GetDlgItem(fDlg, IDC_STATUS_LIST);
|
||||
|
||||
HWND hCombo = GetDlgItem(fDlg, IDC_BUILD_COMBO);
|
||||
int idx = ComboBox_AddString(hCombo, "Main");
|
||||
ComboBox_SetItemData(hCombo, idx, kBuildMain);
|
||||
ComboBox_SetCurSel(hCombo, idx);
|
||||
idx = ComboBox_AddString(hCombo, "Branch");
|
||||
ComboBox_SetItemData(hCombo, idx, kBuildBranch);
|
||||
idx = ComboBox_AddString(hCombo, "Active");
|
||||
ComboBox_SetItemData(hCombo, idx, kBuildActive);
|
||||
|
||||
HWND hTime = GetDlgItem(fDlg, IDC_TIME_COMBO);
|
||||
idx = ComboBox_AddString(hTime, "Nightly");
|
||||
ComboBox_SetItemData(hTime, idx, kNightly);
|
||||
ComboBox_SetCurSel(hTime, idx);
|
||||
idx = ComboBox_AddString(hTime, "Afternoon");
|
||||
ComboBox_SetItemData(hTime, idx, kAfternoon);
|
||||
idx = ComboBox_AddString(hTime, "Evening");
|
||||
ComboBox_SetItemData(hTime, idx, kEvening);
|
||||
|
||||
CheckDlgButton(fDlg, IDC_CLIENT_CHECK, BST_CHECKED);
|
||||
CheckDlgButton(fDlg, IDC_SCRIPTS_CHECK, BST_CHECKED);
|
||||
CheckDlgButton(fDlg, IDC_PLUGINS_CHECK, BST_CHECKED);
|
||||
|
||||
ShowWindow(fDlg, SW_SHOW);
|
||||
|
||||
IGetDailyDir();
|
||||
}
|
||||
|
||||
BOOL plPlasmaInstaller::IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
IInit();
|
||||
SetFocus(GetDlgItem(fDlg, IDC_GET_BUTTON));
|
||||
return FALSE;
|
||||
|
||||
case WM_CLOSE:
|
||||
DestroyWindow(hDlg);
|
||||
return TRUE;
|
||||
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
if (HIWORD(wParam) == BN_CLICKED)
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDCANCEL:
|
||||
PostMessage(hDlg, WM_CLOSE, 0, 0);
|
||||
return TRUE;
|
||||
|
||||
case IDC_BROWSE_3DSMAX:
|
||||
case IDC_BROWSE_CLIENT:
|
||||
IGetFolder(LOWORD(wParam) == IDC_BROWSE_CLIENT);
|
||||
return TRUE;
|
||||
|
||||
case IDC_GET_BUTTON:
|
||||
if (fDidGet)
|
||||
PostMessage(hDlg, WM_CLOSE, 0, 0);
|
||||
else
|
||||
IGet();
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if (HIWORD(wParam) == CBN_SELCHANGE && (LOWORD(wParam) == IDC_TIME_COMBO || LOWORD(wParam) == IDC_BUILD_COMBO))
|
||||
{
|
||||
IGetDailyDir();
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
NMHDR* nmhdr = (NMHDR*)lParam;
|
||||
if (nmhdr->idFrom == IDC_BRANCH_DATE && nmhdr->code == DTN_CLOSEUP/*DTN_DATETIMECHANGE*/)
|
||||
{
|
||||
IGetDailyDir();
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void plPlasmaInstaller::IExtractZip(const char* filename, const char* dest)
|
||||
{
|
||||
plUnzip unzip;
|
||||
if (unzip.Open(filename))
|
||||
{
|
||||
IAddStatusLine("Extracting %s...", filename);
|
||||
|
||||
char buf[MAX_PATH];
|
||||
while (unzip.ExtractNext(dest, buf))
|
||||
IAddStatusLine(" %s", buf);
|
||||
IAddStatusLine(" %s", buf);
|
||||
|
||||
unzip.Close();
|
||||
}
|
||||
}
|
||||
|
||||
void plPlasmaInstaller::IGet()
|
||||
{
|
||||
bool getClient = (IsDlgButtonChecked(fDlg, IDC_CLIENT_CHECK) == BST_CHECKED);
|
||||
bool getScripts = (IsDlgButtonChecked(fDlg, IDC_SCRIPTS_CHECK) == BST_CHECKED);
|
||||
bool getPlugins = (IsDlgButtonChecked(fDlg, IDC_PLUGINS_CHECK) == BST_CHECKED);
|
||||
bool getTools = (IsDlgButtonChecked(fDlg, IDC_TOOLS_CHECK) == BST_CHECKED);
|
||||
|
||||
const char* clientDir = plInstallerReg::GetClientDir();
|
||||
if (*clientDir == '\0' && (getClient || getScripts))
|
||||
{
|
||||
MessageBox(fDlg, "You need to set your client directory", "Plasma Installer", MB_OK | MB_ICONASTERISK);
|
||||
return;
|
||||
}
|
||||
const char* maxDir = plInstallerReg::GetMaxDir();
|
||||
if (*maxDir == '\0' && getPlugins)
|
||||
{
|
||||
MessageBox(fDlg, "You need to set your 3dsmax directory", "Plasma Installer", MB_OK | MB_ICONASTERISK);
|
||||
return;
|
||||
}
|
||||
|
||||
HWND hGetButton = GetDlgItem(fDlg, IDC_GET_BUTTON);
|
||||
EnableWindow(hGetButton, FALSE);
|
||||
HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
|
||||
|
||||
char buf[MAX_PATH];
|
||||
|
||||
if (getScripts)
|
||||
{
|
||||
sprintf(buf, "%s%s", fDailyDir, kScripts);
|
||||
IExtractZip(buf, clientDir);
|
||||
}
|
||||
|
||||
if (getClient)
|
||||
{
|
||||
sprintf(buf, "%s%s", fDailyDir, kAllClientExes);
|
||||
IExtractZip(buf, clientDir);
|
||||
}
|
||||
|
||||
if (getPlugins)
|
||||
{
|
||||
sprintf(buf, "%s%s", fDailyDir, kAllDllsRelease);
|
||||
char pluginDir[MAX_PATH];
|
||||
sprintf(pluginDir, "%s\\plugins", maxDir);
|
||||
IExtractZip(buf, pluginDir);
|
||||
|
||||
IAddStatusLine("Updating PlasmaMAX2.ini...");
|
||||
sprintf(buf, "%s\\plugcfg\\PlasmaMAX2.ini", maxDir);
|
||||
WritePrivateProfileString("SceneViewer", "Directory", clientDir, buf);
|
||||
}
|
||||
|
||||
if (getTools)
|
||||
{
|
||||
sprintf(buf, "%s%s", fDailyDir, kTools);
|
||||
|
||||
char toolBuf[MAX_PATH];
|
||||
sprintf(toolBuf, "%s\\Tools", clientDir);
|
||||
IExtractZip(buf, toolBuf);
|
||||
}
|
||||
|
||||
IAddStatusLine("Updating path...");
|
||||
SetPlasmaPath(clientDir);
|
||||
|
||||
IAddStatusLine("Done");
|
||||
|
||||
SetCursor(hOldCursor);
|
||||
|
||||
fDidGet = true;
|
||||
SetWindowText(hGetButton, "Close");
|
||||
EnableWindow(hGetButton, TRUE);
|
||||
}
|
||||
|
||||
void plPlasmaInstaller::IGetFolder(bool client)
|
||||
{
|
||||
char path[MAX_PATH];
|
||||
if (client)
|
||||
strcpy(path, plInstallerReg::GetClientDir());
|
||||
else
|
||||
strcpy(path, plInstallerReg::GetMaxDir());
|
||||
|
||||
if (plBrowseFolder::GetFolder(path, path))
|
||||
{
|
||||
if (client)
|
||||
{
|
||||
SetDlgItemText(fDlg, IDC_CLIENT_EDIT, path);
|
||||
plInstallerReg::SetClientDir(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetDlgItemText(fDlg, IDC_3DSMAX_EDIT, path);
|
||||
plInstallerReg::SetMaxDir(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void plPlasmaInstaller::IAddStatusLine(const char* format, ...)
|
||||
{
|
||||
if (!format || *format == '\0')
|
||||
return;
|
||||
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
|
||||
char buf[2048];
|
||||
int numWritten = _vsnprintf(buf, sizeof(buf), format, args);
|
||||
hsAssert(numWritten > 0, "Buffer too small");
|
||||
|
||||
va_end(args);
|
||||
|
||||
int idx = ListBox_AddString(fStatusList, buf);
|
||||
ListBox_SetCurSel(fStatusList, idx);
|
||||
|
||||
// Pump the message queue
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
if (!IsDialogMessage(&msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
}
|
73
Sources/Plasma/Apps/plPlasmaInstaller/plPlasmaInstaller.h
Normal file
@ -0,0 +1,73 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "jvBaseDlg.h"
|
||||
|
||||
class plPlasmaInstaller : public jvBaseDlg
|
||||
{
|
||||
protected:
|
||||
char fDailyDir[MAX_PATH];
|
||||
bool fDidGet;
|
||||
|
||||
HWND fStatusList;
|
||||
|
||||
enum { kBuildMain, kBuildBranch, kBuildActive };
|
||||
enum { kNightly, kAfternoon, kEvening };
|
||||
|
||||
virtual BOOL IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
bool IGetDailyDir();
|
||||
void IGetFolder(bool client);
|
||||
|
||||
void IGet();
|
||||
|
||||
void IInit();
|
||||
void IExtractZip(const char* filename, const char* dest);
|
||||
|
||||
void IAddStatusLine(const char* format, ...);
|
||||
|
||||
public:
|
||||
plPlasmaInstaller();
|
||||
|
||||
void Create();
|
||||
|
||||
HWND GetHWnd() { return fDlg; }
|
||||
};
|
129
Sources/Plasma/Apps/plPlasmaInstaller/plPlasmaInstaller.rc
Normal file
@ -0,0 +1,129 @@
|
||||
//Microsoft Developer Studio generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_INSTALLER DIALOG DISCARDABLE 0, 0, 241, 170
|
||||
STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "Plasma Installer"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
LTEXT "Build:",IDC_STATIC,7,8,18,8
|
||||
COMBOBOX IDC_TIME_COMBO,27,6,46,167,CBS_DROPDOWNLIST | WS_VSCROLL |
|
||||
WS_TABSTOP
|
||||
LTEXT "3dsmax Directory:",IDC_STATIC,7,26,57,8
|
||||
EDITTEXT IDC_3DSMAX_EDIT,7,36,173,12,ES_AUTOHSCROLL | ES_READONLY
|
||||
PUSHBUTTON "Browse...",IDC_BROWSE_3DSMAX,183,35,50,14
|
||||
LTEXT "Client Directory:",IDC_STATIC,7,53,50,8
|
||||
EDITTEXT IDC_CLIENT_EDIT,7,63,173,12,ES_AUTOHSCROLL | ES_READONLY
|
||||
PUSHBUTTON "Browse...",IDC_BROWSE_CLIENT,183,62,50,14
|
||||
DEFPUSHBUTTON "Get",IDC_GET_BUTTON,93,146,56,16,WS_DISABLED
|
||||
LISTBOX IDC_STATUS_LIST,7,85,226,54,LBS_NOSEL | WS_VSCROLL |
|
||||
WS_TABSTOP
|
||||
CONTROL "DateTimePicker1",IDC_BRANCH_DATE,"SysDateTimePick32",
|
||||
DTS_RIGHTALIGN | WS_TABSTOP,125,6,55,12
|
||||
COMBOBOX IDC_BUILD_COMBO,76,6,46,167,CBS_DROPDOWNLIST |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "Client",IDC_CLIENT_CHECK,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,159,144,33,10
|
||||
CONTROL "Scripts",IDC_SCRIPTS_CHECK,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,159,154,37,10
|
||||
CONTROL "Plugins",IDC_PLUGINS_CHECK,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,197,144,39,10
|
||||
CONTROL "Tools",IDC_TOOLS_CHECK,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,197,154,33,10
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO DISCARDABLE
|
||||
BEGIN
|
||||
IDD_INSTALLER, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 234
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 163
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON DISCARDABLE "Dirt.ICO"
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
120
Sources/Plasma/Apps/plPlasmaInstaller/plSetPlasmaPath.cpp
Normal file
@ -0,0 +1,120 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "HeadSpin.h"
|
||||
#include <windows.h>
|
||||
|
||||
static HKEY GetEnvironKey()
|
||||
{
|
||||
HKEY hSystemKey = NULL;
|
||||
HKEY hControlSetKey = NULL;
|
||||
HKEY hControlKey = NULL;
|
||||
HKEY hSessionKey = NULL;
|
||||
HKEY hEnvironKey = NULL;
|
||||
|
||||
if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM", 0, KEY_READ, &hSystemKey) == ERROR_SUCCESS) &&
|
||||
(RegOpenKeyEx(hSystemKey, "CurrentControlSet", 0, KEY_READ, &hControlSetKey) == ERROR_SUCCESS) &&
|
||||
(RegOpenKeyEx(hControlSetKey, "Control", 0, KEY_READ, &hControlKey) == ERROR_SUCCESS) &&
|
||||
(RegOpenKeyEx(hControlKey, "Session Manager", 0, KEY_READ, &hSessionKey) == ERROR_SUCCESS))
|
||||
{
|
||||
RegOpenKeyEx(hSessionKey, "Environment", 0, KEY_READ | KEY_WRITE, &hEnvironKey);
|
||||
}
|
||||
|
||||
if (hSystemKey != NULL)
|
||||
RegCloseKey(hSystemKey);
|
||||
if (hControlSetKey != NULL)
|
||||
RegCloseKey(hControlSetKey);
|
||||
if (hControlKey != NULL)
|
||||
RegCloseKey(hControlKey);
|
||||
if (hSessionKey != NULL)
|
||||
RegCloseKey(hSessionKey);
|
||||
|
||||
return hEnvironKey;
|
||||
}
|
||||
|
||||
void SetPlasmaPath(const char* plasmaPath)
|
||||
{
|
||||
bool pathSet = false;
|
||||
|
||||
HKEY hEnvironKey = GetEnvironKey();
|
||||
if (hEnvironKey)
|
||||
{
|
||||
// Make sure the PlasmaGameDir var is in the path
|
||||
DWORD size = 0;
|
||||
if (ERROR_SUCCESS == RegQueryValueEx(hEnvironKey, "Path", NULL, NULL, NULL, &size))
|
||||
{
|
||||
char* oldPath = new char[size];
|
||||
static const char* kPlasmaVar = "%PlasmaGameDir%";
|
||||
|
||||
if (ERROR_SUCCESS == RegQueryValueEx(hEnvironKey, "Path", NULL, NULL, (BYTE*)oldPath, &size))
|
||||
{
|
||||
pathSet = (strstr(oldPath, kPlasmaVar) != NULL);
|
||||
|
||||
if (!pathSet)
|
||||
{
|
||||
char* newPath = new char[size+strlen(kPlasmaVar)+1];
|
||||
strcpy(newPath, oldPath);
|
||||
strcat(newPath, ";");
|
||||
strcat(newPath, kPlasmaVar);
|
||||
|
||||
RegSetValueEx(hEnvironKey, "Path", 0, REG_EXPAND_SZ, (BYTE*)newPath, strlen(newPath)+1);
|
||||
|
||||
delete [] newPath;
|
||||
}
|
||||
}
|
||||
|
||||
delete [] oldPath;
|
||||
}
|
||||
|
||||
// Set the PlasmaGameDir var
|
||||
RegSetValueEx(hEnvironKey, "PlasmaGameDir", 0, REG_SZ, (BYTE*)plasmaPath, strlen(plasmaPath)+1);
|
||||
|
||||
// Notify command prompts and stuff that environ changed
|
||||
DWORD ret;
|
||||
SendMessageTimeout(HWND_BROADCAST,
|
||||
WM_SETTINGCHANGE,
|
||||
0,
|
||||
(LPARAM)"Environment",
|
||||
SMTO_ABORTIFHUNG,
|
||||
5000,
|
||||
&ret);
|
||||
}
|
||||
}
|