佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
12
返回列表 发新帖
楼主: XEricSin

在ERA上做MOD的教程

  [复制链接]
  • TA的每日心情

    2020-8-11 14:53
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]狂狼人

    1

    帖子

    4223

    金币

    0

    精华

    Lv2 Adventuring Hero

    Rank: 2

    积分
    270
    发表于 2020-4-19 16:19:54 | 显示全部楼层
    新人先观摩下!自己研究研究看看!

    评分

    1

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    14 小时前
  • 签到天数: 162 天

    连续签到: 29 天

    [LV.7]血污怪

    63

    帖子

    7617

    金币

    0

    精华

    Lv4 Famous Hero

    Rank: 4

    积分
    2955
    发表于 2020-4-22 01:23:33 | 显示全部楼层
    多谢楼主的好贴,楼主辛苦了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-7-19 18:43
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]狂狼人

    51

    帖子

    5294

    金币

    0

    精华

    Lv2 Adventuring Hero

    Rank: 2

    积分
    459
    发表于 2020-4-22 17:33:08 | 显示全部楼层
    这都是大神啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    14 小时前
  • 签到天数: 162 天

    连续签到: 29 天

    [LV.7]血污怪

    63

    帖子

    7617

    金币

    0

    精华

    Lv4 Famous Hero

    Rank: 4

    积分
    2955
    发表于 2020-4-24 18:33:24 | 显示全部楼层
    谢谢分享.厉害厉害,研究研究
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-12-9 01:09
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]火元素使者

    1877

    帖子

    7726

    金币

    7

    精华

    版主

    Rank: 10Rank: 10Rank: 10

    积分
    9703

    社区QQ达人

     楼主| 发表于 2020-5-23 05:27:10 | 显示全部楼层
    今天我们来讲一讲怎么从网上获取新的特效动画DEF。

    网上有很多gif动图,但是这些动图绝大多数是半透明图片混合到底色上生成的假半透明图片。几乎没有H3可以直接使用的透明像素和不透明像素分开的图片。

    幸好,这些动图中很大部分是黑色或深灰色的底色。这使得我们可以通过一些手段把这些假半透明变成抖动式的半透明。
    我利用python写了几个函数。使用时,调用 extractGIFframes2() 和 generateBMPforDEF() 两个函数,生成bmp图片,然后可以用DEF编辑器打包城DEF。
    1. #例子,两个函数输入的文件夹地址必须一致
    2. extractGIFframes2('C:/folder')
    3. generateBMPforDEF('C:/folder')
    复制代码


    转化gif前,先创建一个文件夹比如叫effect1,把下载的gif动图放到文件夹中。
    def folder.png

    生成可用图片后变成这个样子:
    def folder2.png

    放入DEF编辑器中的效果:
    def folder3.png



    以下为python代码,需要按照相关库:
    1. import numpy as np
    2. import random
    3. import os

    4. import cv2
    5. from matplotlib import pyplot as plt

    6. #in_path = bmp/gif图片
    7. #out_path = bmp/gif图片
    8. #针对黑色背景的GIF
    9. #根据HSV的V值随机剔除像素
    10. #比方法2更耐受背景噪音
    11. def removeTransparency3(in_path, out_path):
    12.     image = cv2.imread(in_path, cv2.IMREAD_COLOR)
    13.     image1 = image.copy()
    14.     image2 = cv2.blur(image, (3, 3)) # 使用均值后的图像决定像素是否清零

    15.     HSV = cv2.cvtColor(image2,cv2.COLOR_BGR2HSV)
    16.     H,S,V = cv2.split(HSV)

    17.     V_Threshold_Lower = (V[0:5,0:5].max())*1.05 # 前五个像素点选最大值作为阈值
    18.     V_Threshold_Upper = 255 - V_Threshold_Lower
    19.    
    20.     #print(V_Threshold_Lower, V_Threshold_Upper)
    21.     #print(V[0:5,0:5])
    22.    
    23.     for i in range(V.shape[0]):
    24.         for j in range(V.shape[1]):
    25.             if V[i,j] < V_Threshold_Lower:
    26.                 image1[i,j]=[0,0,0]
    27.             elif V[i,j] < V_Threshold_Upper:
    28.                 r = random.random() # 0-1
    29.                 if r > (V[i,j] - V_Threshold_Lower)/(V_Threshold_Upper - V_Threshold_Lower):
    30.                     image1[i,j]=[0,0,0]

    31.     # 对比原始图片和随机去除透明后的图片
    32.     #plt.figure(figsize=(60,20))
    33.     #plt.subplot(121); plt.imshow(image)
    34.     #plt.subplot(122); plt.imshow(image1)
    35.     #plt.show()

    36.     cv2.imwrite(out_path, image1)
    37.    

    38. def generateBMPforDEF(framesFolder):
    39.     #输入目标文件夹的路径
    40.     filedir0 = framesFolder
    41.     #设置输出文件夹在输入文件夹内
    42.     filedir1 = filedir0 + '/generated pics'
    43.     #创建新文件夹
    44.     if not os.path.exists(filedir1):
    45.         os.makedirs(filedir1)
    46.     #获取目标文件夹中的文件名称列表  
    47.     filenames = os.listdir(filedir0)
    48.     #遍历文件名
    49.     for filename in filenames:
    50.         extension = filename.split('.')[-1]
    51.         if extension == 'bmp'or extension == 'png':
    52.             filepath0 = filedir0 + '/' + filename
    53.             filepath1 = filedir1 + '/' + filename[:-3] + 'bmp'
    54.             #print(filepath0)
    55.             print(filepath1)
    56.             removeTransparency3(filepath0, filepath1)

    57. def extractGIFframes2(GIFfolder):

    58.     '''
    59.     约定文件夹中只有一个xxx.gif
    60.     xxx的帧文件保存为GIFfolder/xxx-index.bmp
    61.     路径中用一律使用'/'
    62.     '''

    63.     #输入目标文件夹的路径
    64.     filedir0 = GIFfolder
    65.     #设置输出文件夹在输入文件夹内
    66.     filedir1 = filedir0 # 直接保存到当前目录

    67.     #获取目标文件夹中的文件名称列表  
    68.     filenames = os.listdir(filedir0)
    69.     #遍历文件名,应该保证只有一个gif文件
    70.     for filename in filenames:

    71.         if filename.split('.')[-1] == 'gif':
    72.             filepath0 = filedir0 + '/' + filename

    73.             x=cv2.VideoCapture(filepath0)
    74.             i=1
    75.             while True:
    76.                 filepath1 = '%s/%s-%02d.png' % (filedir1, filename.split('.')[0], i)
    77.                 ret, frame = x.read()
    78.                 if ret == True:
    79.                     cv2.imwrite(filepath1, frame)
    80.                     i+=1
    81.                 else:
    82.                     return

    复制代码



    点评

    这一段有点跳跃,需要python基础?有简化的方法或入门教程吗?  发表于 2020-6-16 05:35
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    2020-8-9 18:23
  • 签到天数: 46 天

    连续签到: 1 天

    [LV.5]女巫

    66

    帖子

    8275

    金币

    0

    精华

    Lv4 Famous Hero

    Rank: 4

    积分
    2247

    社区QQ达人

    发表于 2020-6-4 16:08:28 | 显示全部楼层
    很详细的教程,学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2020-7-7 11:26
  • 签到天数: 10 天

    连续签到: 2 天

    [LV.3]火元素使者

    25

    帖子

    4613

    金币

    0

    精华

    Lv2 Adventuring Hero

    Rank: 2

    积分
    290

    社区QQ达人

    发表于 2020-6-15 14:52:56 | 显示全部楼层
    最近就在学这个,才看到有教程……哎!不过还来得及~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-8-3 18:04
  • 签到天数: 243 天

    连续签到: 1 天

    [LV.8]神圣凤凰

    294

    帖子

    1万

    金币

    0

    精华

    Lv5 Honorable Hero

    Rank: 5Rank: 5

    积分
    3065
    发表于 2020-6-15 15:59:19 | 显示全部楼层
    感谢楼主分享,虽然我一点也看不懂
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 39 天

    连续签到: 25 天

    [LV.5]女巫

    193

    帖子

    9824

    金币

    0

    精华

    Lv4 Famous Hero

    Rank: 4

    积分
    1506
    发表于 2020-9-5 15:39:29 | 显示全部楼层
    好教程,稍微有点编程基础就很好理解了,另外请教一下,erm里面有没有类似random的方法或者函数,还有类似(1-1)/(2+2)的运算就必须赋值两次才能够达成吗?

    点评

    ERM帮助有相关的内容. VR:R VR:T 语法用于随机数 运算只能是从左到右,没有优先,没有括号  详情 回复 发表于 2020-9-5 16:46
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4947

    帖子

    2万

    金币

    30

    精华

    超级版主

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    31564

    论坛守望者论坛元老杰出贡献

    发表于 2020-9-5 16:46:07 | 显示全部楼层
    tcwang11 发表于 2020-9-5 15:39
    好教程,稍微有点编程基础就很好理解了,另外请教一下,erm里面有没有类似random的方法或者函数,还有类似 ...

    ERM帮助有相关的内容.
    VR:R VR:T 语法用于随机数
    运算只能是从左到右,没有优先,没有括号

    点评

    感谢007大佬解答  详情 回复 发表于 2020-9-6 10:08
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 39 天

    连续签到: 25 天

    [LV.5]女巫

    193

    帖子

    9824

    金币

    0

    精华

    Lv4 Famous Hero

    Rank: 4

    积分
    1506
    发表于 2020-9-6 10:08:06 | 显示全部楼层
    贤知有您 发表于 2020-9-5 16:46
    ERM帮助有相关的内容.
    VR:R VR:T 语法用于随机数
    运算只能是从左到右,没有优先,没有括号

    感谢007大佬解答
    回复 支持 反对

    使用道具 举报

    guest
    welcomelogin
    您需要登录后才可以回帖 登录 | 英雄注册|Register

    本版积分规则

    手机版|小黑屋|英雄无敌3-WoG中文站

    GMT+8, 2020-9-18 15:25 , Processed in 0.094877 second(s), 33 queries , Gzip On.

    Powered by Discuz! X3.4

    快速回复 返回顶部 返回列表