代码改变世界

游文

2010-04-10 15:06  宝宝合凤凰  阅读(237)  评论(0)    收藏  举报
魔兽世界》AI数据表&脚本函数[转]
2009-09-25 13:14

 

可以从下面的一些结构和方法中管中窥豹,了解一些设计思路。

AI数据
-----------------------------------------
数据类型
-----------------------------------------

(Field_Name Discription)
id 自动ID.
creature_id 怪物ID而这个事件应该发生。

event_type          事件条件 (事件条件Event Types)
event_param1          参数1 (和事件条件Event Types相关)
event_param2
event_param3

action1_type          第一类动作做引发的动作(动作类型Action Types)
action1_param1                参数1 (和动作类型Action type相关)
action1_param2
action1_param3

action2_type          第二类动作做引发的动作(动作类型Action Types)
action2_param1          参数1 (和动作类型Action type相关)
action2_param2
action2_param3

action3_type          第三类动作做引发的动作(动作类型Action Types)
action3_param1          参数1 (和动作类型Action type相关)
action3_param2
action3_param3

-----------------------------------------
Event Types
-----------------------------------------
事件条件

(# Internal Name Pamarm usage Discription)
0 EVENT_T_NONE Not Used 默认
1 EVENT_T_TIMER_REPEAT Time 每过时间(毫秒)触发
2 EVENT_T_TIMER_SINGLE Time 在指定时间(毫秒)触发(只一次)
3 EVENT_T_HP_SINGLE HP% 当生命低于参数1触发 (不重复)
4 EVENT_T_MANA_SINGLE Mana% 当魔法低于参数1触发 (不重复
5 EVENT_T_AGGRO Not Used 见到第一威胁时
6 EVENT_T_KILL Not Used 杀害后一名玩家
7 EVENT_T_DEATH Not Used 杀后

-----------------------------------------
Action Types
-----------------------------------------
动作类型

(# Internal Name       Pamarm usage Discription)
0 ACTION_T_NONE       Not Used          默认
1 ACTION_T_SAY                TextId 说话ID
2 ACTION_T_YELL                TextId 大喊ID
3 ACTION_T_EMOTE             TextId 表情ID
4 ACTION_T_SOUND             SoundId 播放音乐在ID玩家区
5 ACTION_T_CAST                SpellId, Target, Interrupt 使用技能ID.目标对像.如果中断是0则说明不会打断玩家
6 ACTION_T_SUMMON             CreatureId, Target, Duration 刷新怪物(参数1) 攻击目标 (参数2) 攻击期限(参数3). 如果时间是0将延续到死亡。

-----------------------------------------
Target Types
-----------------------------------------
目标

(# Internal Name Discription)
0 TARGET_T_SELF 自已
1 TARGET_T_HOSTILE 最高威胁
2 TARGET_T_HOSTILE_SECOND_AGGRO 第二危险
3 TARGET_T_HOSTILE_LAST_AGGRO 最后威胁
4 TARGET_T_HOSTILE_RANDOM 随机目标
5 TARGET_T_HOSTILE_RANDOM_NOT_TOP          不包含最高威胁的随机目标



脚本函数

void AttackStart(Unit *who)          获得攻击目标

DoCast(who,ID) 这里是使用魔法,目标、ID

DoStartAttack(who); 运行上面的脚本攻击

DoGoHome(); 让怪跑回自己的出生点

who->GetTypeId() == TYPEID_PLAYER 是说明ID是不是攻击玩家

m_creature->GetHealth()
uint32 cHealth=m_creature->GetHealth();         
获取怪物当前血量

m_creature->GetMaxHealth()
uint32 cMaxHealth=m_creature->GetMaxHealth();      
获取怪物最大血量

m_creature->GetPower(POWER_MANA)
uint32 cPower=m_creature->GetPower(POWER_MANA);   
获取怪物当前魔法量

m_creature->GetMaxPower(POWER_MANA)
uint32 cMaxPower=m_creature->GetMaxPower(POWER_MANA);
获取怪物最大魔法量

m_creature->Say("Dark!",LANG_UNIVERSAL); 让怪物说话 后参为语言

m_creature->getVictim() 取得被攻击的受害者

void DamageInflict(Unit *who, uint32 amount_damaged) 被攻击时调用此脚本

if( (cHealth<(cMaxHealth*0.8) )&(cPower>( cMaxPower*0.8)) 怪当前HP少于总HP的80%和魔法量大于总数80%

m_creature->isInCombat() 是否在战斗

void MoveInLineOfSight(Unit *who) 在视线之内

who->HasStealthAura()) 玩家是否隐行

who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH) 移除玩家身上技能 ()为技能名称

m_creature->IsHostileTo(who) 玩家对怪物是否有敌意

who->isAlive() 测试玩家是否还活着

creature=怪物或NPC

 

转]如何保持RMB玩家和免费玩家的平衡

2009-06-30 19:06

玩了七八年的网游,基本上也算是老玩家了,看着这两年推出的新游戏,实在是有些失望!新游戏是打堆的出,但真正能玩的好游戏凤毛麟角,很多游戏连基本的平衡性问题都没弄好,就迫不及待的拿出来圈钱,其结局自然是“见光死”!你游戏停运是一了百了,玩家投入的时间、感情、金钱谁来赔偿?

笔者想借此以目前最流行的免费RPG游戏的平衡性问题,和大家交流一下,有不同意见的朋友可直接留言指正。


笔者认为一款优秀的游戏必须控制好以下几个平衡点:

一、RMB玩家和免费玩家之间的平衡;
二、游戏内职业技能的平衡;
三、任务和挂机之间的平衡;
四、充值点卷和游戏币之间的平衡。

由于时间有限,实在没办法一次全部写完,本文就先针对“RMB玩家和免费玩家之间的平衡”问题阐述下我的看法。

众所周知,免费玩家有时间,能保证长时间在线,但投入费用较少或者不投入费用;RMB玩家相对游戏在线时间少,但愿意通过投入费用去弥补在线时间的不足,并期望在游戏内获得更多乐趣。RMB玩家是游戏的衣食父母,免费玩家是游戏存活的基石。每个游戏运营商都梦想游戏内既存在大量的免费玩家,烘托游戏气氛,陪RMB玩家玩,又期望尽可能多的将免费玩家转化为RMB玩家。


但实际操作中,处理好两个关系并非易事!如果游戏收费类别过多,免费玩家会感觉不充钱玩不下去而纷纷离开;如果收费较低,免费玩家是高兴了,RMB玩家就会觉得钱花的不值,影响游戏收入。

笔者认为要平衡二者关系,就要同时考虑他们各自不同的需要。对于免费玩家,要丰富线上活动,让免费玩家能够在游戏内找到更多的事情做,同时不能让他们感受到RMB玩家过重的压力;对于RMB玩家,关键在于理顺消费环节,让他们能够通过最便捷快速的方式,轻松实现消费,体验到游戏的乐趣。具体的内容在游戏内主要体现在两个点上——升级速度和装备差异。

首先,升级速度。目前大多数RPG游戏的主要升级方式无非就是任务、刷怪。如果是任务升级为主,免费玩家每天通过大量时间完成可获得较高经验,那么RMB玩家就要能够通过充值消费,花费较少的时间完成同样的任务,以获得同样的经验;如果是打怪升级为主,免费玩家每天可以长时间的刷怪获得大量经验,那么RMB玩家就需要能够通过充值消费,通过经验加成或者特殊任务奖励,花费较少的时间获得和同等级24小时打怪玩家相差不多的经验。

总之,就是要保持免费玩家和RMB玩家相对均衡的升级速度,不能拉开太大差距。

其次,装备差异。游戏内的顶级装备免费玩家一定要有概率获得,但获得方法需要大量时间、精力投入,以此吸引免费玩家长时间在线,同时避免和RMB玩家拉开过大的差距;而同样的顶级装备,RMB玩家可以通过使用充值消费,花费很少的时间通过打造或者特殊任务的方式获得,保持RMB玩家装备相对于大多数免费玩家的优势。