引用 | 编辑
八云の橙猫
2023-11-18 04:01 |
楼主
▼ |
||
x2
【插件资讯】插件来源:原创 使用指令:sma编译成amxx放入plugins资料夹 安装路径:.sma - 放入scripting .inc - 放入include 【插件介绍】 复制程式 主楼 -- 插件介绍 一楼 -- INC介绍 二楼 -- 实例说明 【编写与测试环境】 Amx mod X 1.10 1.8.3以后都可以运行,如运作不顺利推荐更新至Amx mod X 1.9版本 【使用模块】 <amxmodx> <fakemeta> <nvault> 使用请务必确认模块版本为最新或支援使用的版本 从古至今可能各位有看过不同类型伺服器有推出第三方组队功能 常见的类似于魔王、Biohazard、Zombie Riot 等等的PVE型对抗伺服器 本插件提供API功能可以让你在各类型插件中呼叫Native达成类似 共享经验、共享自订掉落物、共享队伍情报... 等等功能 使用的是传统menu写法(抱歉我觉得新式menu真的好难用) 请注意:本插件适用于对AMXX Pawn编写有一定程度了解的中阶级玩家使用 本人不负责教学延伸功能、如不会使用Native呼叫等等,那该插件对你来说只是一个普通显示组队功能的插件 【介绍】 起始如没有任何队伍时,选单会显示这样 来创建一个队伍吧! 接着会得到以下样式,系统会告诉你创建队伍成功,也会广播给所有玩家知道你创建了队伍,细项等等逐步解释队长功能 <队伍资讯> 介面中会显示哪些玩家在你的队伍,以及基本资讯 请忽略职业显示,这是我的第三方插件,您也可以在这里加入自订想显示的情报(需修改SMA) 假设有队员时,我们可以选择一个队员进行操作,此处您也可以自行修改SMA加入不同功能 可以选择踢出该队员,或者委任他成为新的队长 <解散队伍> 解散当前队伍,需要是队长才可以进行,解散后所有队员都会被移出队伍 <邀请入队> 邀请当前没有所属队伍的队员进入队伍 SMA内可以自行增加判断筛选过滤的条件 收到邀请时,会如下图显示倒数 接受后,就会进到队长的所属队伍内 离开队伍时,队伍会自动将空栏位整理并向上方堆叠剩余的队员 <重新命名队伍> 选择后,会看到左上角跳出讯息框可以输入新的队伍名称 你也可以开启控制台 输入 TeamName "名称" 达成改变成中文队名的效果 <队伍控制项> 此处也可以透过SMA自由修改加入您想新增的设定 插件内有使用nvault的保存功能,会记忆玩家的设定 (分享掉落物只是Sample、没有实际功能) 只提供SMA与INC 50威望 如有错误请将plugins.ini中的amxx后方输入 debug 提供异常行数与情况回报给我修复 INC介绍将于一楼说明 ---------------------- ** Ver 1.01 - 修正找寻队伍时,如该队伍队长中途离线导致选择队伍console有报错的讯息 [此文章售价 5 雅币已有 7 人购买]若发现会员采用欺骗的方法获取财富,请立刻举报,我们会对会员处以2-N倍的罚金,严重者封掉ID! x5
|
引用 | 编辑
八云の橙猫
2023-11-18 04:02 |
1楼
▲ ▼ |
<INC内容说明>
队伍控制使用enum,您可以增加其他自订命名的控制组数名称 需要同步在sma内新增对应的中文叙述 复制程式 enum _:MAX_TEAM_SETTING { JOIN_TYPE = 0, SHARE_DROPS } 复制程式 /** * 显示队伍主要选单 * * @noreturn */ native show_team_menu(id); 复制程式 /** * 确认玩家是否存在队伍中 * * @return 1 有队伍 * 0 没有队伍 */ native get_user_has_team(id); 复制程式 /** * 检查两位玩家是否存于同队伍中 * * @param id 比较对象1 * @param target 比较对象2 * * * @return -1 比较对象1不在队伍内 * -2 比较对象2不在队伍内 * -3 比较对象有一方出现错误 * 1 同队伍 * 0 不同队伍 */ native get_user_same_team(id, target); 复制程式 /** * 检查该队伍编号是否存在成员 * * @param team_num 队伍编号 * * @return 1 有成员 * 0 无成员 */ native get_team_has_member(team_num); 复制程式 /** * 取得对象的队伍编号 * * @param id 客户端编号 * * @return -1 没有队伍 */ native get_team_num(id); 复制程式 /** * 取得指定队伍编号内的指定栏位队友id * * @param team_num 队伍编号 * @param slot 栏位编号 * * @return -1 队伍编号超出指定范围 * -2 栏位超出指定范围 */ native get_team_member(team_num, slot); 复制程式 /** * 取得与指定对象相同队伍编号栏位的客户端id * * @note 与 get_team_member 不同的是,这个会直接找寻指定对象存在队伍id,可以用来更快 * 判断一些处理 * * @param id 客户端id * @param slot 需要搜寻的栏位 * * @return -1 队伍编号超出指定范围 * -2 栏位超出指定范围 */ native get_same_team_member(id, slot); 复制程式 /** * 取得对象的队伍成员数量 * * @param id 客户端id * * @return -1 队伍编号超出指定范围 */ native get_team_member_counts(id); 复制程式 /** * 取得队伍控制设定的参数 * * @param id 客户端id * @param setting 设定类别(参照 enum _:MAX_TEAM_SETTING) * * @return 对象未连接或设定项目不存在时会回传0,关闭也会回传0,如有效则会回传其他参数设定数字 */ native get_team_setting(id, setting); x1 |
引用 | 编辑
八云の橙猫
2023-11-18 04:18 |
2楼
▲ ▼ |
虽然文章说不负责延伸教学
但还是提供一下应用实例讲解一下INC效果 此处是组队分配经验值的写法,可以参考看看就好 复制程式 new g_storge_exp[MAX_TEAMS] //新增全域变数储存队伍内的经验值 //team const的INC内已经定义MAX_TEAMS的最大队伍值,故include后可以直接呼叫做使用 ... 复制程式 ... //此处可放在自订的击杀判断内 if(get_team_num(id) != -1) //判断玩家所存队伍为有效队伍时 g_storge_exp[get_team_num(id)] += floatround(exp_amount * 0.1) //往全域变数内储存10%的经验值 ... 复制程式 //延续上一段 static i //频繁呼叫所以我们定义静数做使用,减少插件重复创建变数又将他移除 for(i = 0; i < MAX_TEAMS; i++) { if(!get_team_has_member(i) || !g_storge_exp[i]) //如果队伍不存在玩家(空队伍) 或者储存经验槽为空 跳过 continue; static a //此处同样以静数运作 for(a = 0; a < MAX_TEAMATES; a++) { static user; user = get_team_member(i, a) //回圈会每次将对应队伍i以及其队员a带入值给user if(get_team_member_counts(user) < 2) //我判断队伍中少于2人的情况则不会给他经验值 break; if(!user) // user不存在则跳过 continue; give_user_exp(user, g_storge_exp[i]) //给每个user经验值 client_print_color(user, print_team_blue, "^4[LEVEL] ^3因组队额外获得 ^4%d 经验值 ", g_storge_exp[i]) } g_storge_exp[i] = 0 //队友全部都分配到经验值后,记得将变数清空,否则会无限累积 }... x0 |