[MPGH]Ahl (10-15-2014),KieronZeCoder69 (10-16-2014),Omniraptor (10-15-2014),sacredmike (12-26-2014),SaltyButSpeedy (10-15-2014),sebastianfra12 (12-21-2014),TJRAE%TJAJAZetjtjtjjt (10-16-2014)
So @Ahlwong asked me to make this , and I made it.
Let's just go straight to it :
XML CODE :
And for Behaviors go in wserver/logic/db and make a file named BehaviorDb.PuppetsCode:<Object type="0x2f95" id="Puppet Master Treasure"> <Enemy /> <Class>Character</Class> <Group>Puppets</Group> <RemoteTexture> <Id>948727721</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>150</Size> <MaxHitPoints>10000</MaxHitPoints> <Defense>0</Defense> </Object> <Object type="0x2f8a" id="Wizard Puppet"> <Enemy /> <Group>Puppets</Group> <Class>Character</Class> <RemoteTexture> <Id>715119126</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>100</Size> <MaxHitPoints>2200</MaxHitPoints> <Defense>35</Defense> <Projectile> <ObjectId>Fire Missile</ObjectId> <Speed>180</Speed> <MinDamage>50</MinDamage> <MaxDamage>65</MaxDamage> <LifetimeMS>475</LifetimeMS> <Amplitude>0.5</Amplitude> <Frequency>2</Frequency> </Projectile> </Object> <Object type="0x2f8b" id="Wizard Puppet Spell"> <Enemy /> <Group>Puppets</Group> <Class>Character</Class> <RemoteTexture> <Id>715093716</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>0</Size> <Projectile> <ObjectId>Purple Bolt</ObjectId> <Speed>160</Speed> <MinDamage>40</MinDamage> <MaxDamage>55</MaxDamage> <LifetimeMS>1000</LifetimeMS> <Size>100</Size> </Projectile> <MaxHitPoints>1</MaxHitPoints> <Defense>0</Defense> </Object> <Object type="0x2f86" id="Rogue Puppet"> <Enemy /> <Group>Puppets</Group> <Class>Character</Class> <RemoteTexture> <Id>715093716</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>100</Size> <MaxHitPoints>2500</MaxHitPoints> <Defense>35</Defense> <Projectile id="0"> <ObjectId>Purple Magic</ObjectId> <Speed>90</Speed> <Damage>95</Damage> <LifetimeMS>480</LifetimeMS> </Projectile> </Object> <Object type="0x2f8c" id="Priest Puppet"> <Enemy /> <Group>Puppets</Group> <Class>Character</Class> <RemoteTexture> <Id>21083050</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>100</Size> <MaxHitPoints>2000</MaxHitPoints> <Defense>35</Defense> <Projectile> <ObjectId>Blue Magic</ObjectId> <Speed>130</Speed> <MinDamage>60</MinDamage> <MaxDamage>75</MaxDamage> <LifetimeMS>770</LifetimeMS> </Projectile> </Object> <Object type="0x2f8d" id="Assasin Puppet"> <Enemy /> <Group>Puppets</Group> <Class>Character</Class> <RemoteTexture> <Id>715118552</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>100</Size> <MaxHitPoints>2500</MaxHitPoints> <Defense>35</Defense> <Projectile id="0"> <ObjectId>Purple Magic</ObjectId> <Speed>90</Speed> <Damage>95</Damage> <LifetimeMS>480</LifetimeMS> </Projectile> </Object> <Object type="0x2f8e" id="Archer Puppet"> <Enemy /> <Group>Puppets</Group> <Class>Character</Class> <RemoteTexture> <Id>21144059</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>100</Size> <MaxHitPoints>2500</MaxHitPoints> <Defense>35</Defense> <Projectile id="0"> <ObjectId>Blue Arrow</ObjectId> <Speed>160</Speed> <MinDamage>70</MinDamage> <MaxDamage>70</MaxDamage> <LifetimeMS>440</LifetimeMS> <MultiHit /> </Projectile> <Projectile id="1"> <ObjectId>Blue Arrow</ObjectId> <Speed>150</Speed> <MinDamage>80</MinDamage> <MaxDamage>80</MaxDamage> <LifetimeMS>1000</LifetimeMS> <Size>150</Size> <ConditionEffect duration="1">Paralyzed</ConditionEffect> <MultiHit /> <PassesCover /> <ParticleTrail /> </Projectile> </Object> <Object type="0x2f8f" id="Puppet Master"> <Enemy /> <Class>Character</Class> <Group>Puppets</Group> <RemoteTexture> <Id>21062017</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>150</Size> <MaxHitPoints>100000</MaxHitPoints> <Defense>30</Defense> <Projectile id="0"> <ObjectId>Green Jinx</ObjectId> <Speed>90</Speed> <Damage>80</Damage> <LifetimeMS>4500</LifetimeMS> </Projectile> <Projectile id="1"> <ObjectId>Purple Jinx</ObjectId> <Speed>40</Speed> <Damage>105</Damage> <LifetimeMS>4000</LifetimeMS> <Size>140</Size> <ConditionEffect duration="2.25">Slowed</ConditionEffect> <ArmorPiercing /> </Projectile> <Projectile id="2"> <ObjectId>Blue Bolt</ObjectId> <Speed>50</Speed> <Damage>90</Damage> <LifetimeMS>4000</LifetimeMS> <Size>140</Size> </Projectile> <God/> </Object> <Object type="0x2f92" id="Puppet Master Clone"> <Enemy /> <Class>Character</Class> <Group>Puppets</Group> <RemoteTexture> <Id>21062017</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>100</Size> <MaxHitPoints>6500</MaxHitPoints> <Defense>10</Defense> <Projectile id="0"> <ObjectId>Green Jinx</ObjectId> <Speed>90</Speed> <Damage>80</Damage> <LifetimeMS>2500</LifetimeMS> </Projectile> <Projectile id="1"> <ObjectId>Purple Jinx</ObjectId> <Speed>60</Speed> <Damage>105</Damage> <LifetimeMS>4000</LifetimeMS> <Size>140</Size> <ArmorPiercing /> <ConditionEffect duration="2.25">Slowed</ConditionEffect> </Projectile> <Projectile id="2"> <ObjectId>Blue Bolt</ObjectId> <Speed>50</Speed> <Damage>90</Damage> <LifetimeMS>800</LifetimeMS> <Size>140</Size> </Projectile> <God/> </Object> <Object type="0x2f87" id="Knight Puppet"> <Enemy /> <Class>Character</Class> <Group>Puppets</Group> <RemoteTexture> <Id>715113323</Id> <Instance>draw</Instance> </RemoteTexture> <HitSound>monster/ents_hit</HitSound> <DeathSound>monster/ents_death</DeathSound> <Size>100</Size> <MaxHitPoints>3500</MaxHitPoints> <Defense>35</Defense> <Projectile id="0"> <ObjectId>Purple Bolt</ObjectId> <Speed>90</Speed> <Damage>70</Damage> <LifetimeMS>390</LifetimeMS> </Projectile> <Projectile id="1"> <ObjectId>Silver Shield</ObjectId> <Speed>120</Speed> <Damage>110</Damage> <LifetimeMS>190</LifetimeMS> <Size>140</Size> <ConditionEffect duration="1">Stunned</ConditionEffect> <MultiHit /> <PassesCover /> <ParticleTrail /> </Projectile> </Object> <Object type="0x2f90" id="Green Jinx"> <Class>Projectile</Class> <RemoteTexture> <Id>5213252494557184</Id> <Instance>draw</Instance> </RemoteTexture> <AngleCorrection>1</AngleCorrection> </Object> <Object type="0x2f91" id="Purple Jinx"> <Class>Projectile</Class> <RemoteTexture> <Id>6671831978213376</Id> <Instance>draw</Instance> </RemoteTexture> <Rotation>100</Rotation> </Object>
YOU WILL NEED RANDOMDO BEHAVIOR, It's found in older posts hereCode:using System; using System.Collections.Generic; using System.Linq; using System; using wServer.logic.attack; using wServer.logic.loot; using wServer.logic.movement; using wServer.logic.taunt; using System.Text; using wServer.logic.cond; namespace wServer.logic { partial class BehaviorDb { private static _ Puppets = Behav() .Init(0x2f86, Behaves("Rogue Puppet", new RunBehaviors( Once.Instance(new SetKey(-1, 1)), Once.Instance(new SetKey(-3, 1)), IfEqual.Instance(-3, 1, SmoothWandering.Instance(3, 2)), IfEqual.Instance(-3, 2, SmoothWandering.Instance(4, 4)), IfEqual.Instance(-1, 1, new RunBehaviors( CooldownExact.Instance(400, SimpleAttack.Instance(6, projectileIndex: 0)), CooldownExact.Instance(4500, new RandomDo(25, new SetKey(-1, 2)) ) ), IfEqual.Instance(-1, 2, new RunBehaviors( new QueuedBehavior( new SetKey(-3, 2), SetSize.Instance(0), CooldownExact.Instance(3500), SetSize.Instance(100), new SetKey(-3, 1), CooldownExact.Instance(3400), new SetKey(-1, 1) ), new RunBehaviors( CooldownExact.Instance(400, SimpleAttack.Instance(6, projectileIndex: 0)) ) ) ) ) ))) .Init(0x2f87, Behaves("Knight Puppet", new RunBehaviors( Once.Instance(new SetKey(-1 ,1)), IfEqual.Instance(-1,1, SmoothWandering.Instance(3, 2)), IfEqual.Instance(-1,1, new RunBehaviors( CooldownExact.Instance(550, SimpleAttack.Instance(6)), CooldownExact.Instance(4500, new SetKey(-1 ,2)) )), IfEqual.Instance(-1,2, Chasing.Instance(9, 7, 0, null)), IfEqual.Instance(-1,2, new RunBehaviors( If.Instance(IsEntityPresent.Instance(1, null), new SetKey(-1,3)) )), IfEqual.Instance(-1,3, new RunBehaviors( CooldownExact.Instance(550, SimpleAttack.Instance(6)), new QueuedBehavior( CooldownExact.Instance(300), MultiAttack.Instance(3, 15* (float) Math.PI/180, 4, 0* (float) Math.PI/180, projectileIndex: 1), CooldownExact.Instance(250), SimpleAttack.Instance(6), CooldownExact.Instance(250), new SetKey(-1,4) ) )), IfEqual.Instance(-1,4, ReturnSpawn.Instance(8)), IfEqual.Instance(-1,4, new QueuedBehavior( CooldownExact.Instance(1000), new SetKey(-1,1) )) ) )) .Init(0x2f8a, Behaves("Wizard Puppet", new RunBehaviors( Once.Instance(new SetKey(-2,1)), IfEqual.Instance(-2,1, new RunBehaviors( CooldownExact.Instance(250, MultiAttack.Instance(7,5*(float) Math.PI/180,2,0)), CooldownExact.Instance(2500, new SetKey(-1,1)), SmoothWandering.Instance(3,2) )), IfEqual.Instance(-1,1, new QueuedBehavior( SpawnMinionImmediate.Instance(0x2f8b,1f,1,1), CooldownExact.Instance(50), new SetKey(-1,2) )), IfEqual.Instance(-1,2, new QueuedBehavior( OrderAllEntity.Instance(5,0x2f8b, new SetKey(-1,1)), CooldownExact.Instance(10), new SetKey(-1,3) )) ))) .Init(0x2f8b, Behaves("Wizard Puppet Spell", new RunBehaviors( Chasing.Instance(10, 30, 1, null), SetSize.Instance(0), SetConditionEffect.Instance(ConditionEffectIndex.Invincible), IfEqual.Instance(-1,1, new QueuedBehavior( CooldownExact.Instance(1500), RingAttack.Instance(20,2,0), CooldownExact.Instance(10), Die.Instance )) )) ) .Init(0x2f8c, Behaves("Priest Puppet", new RunBehaviors( SmoothWandering.Instance(3,2), CooldownExact.Instance(350, SimpleAttack.Instance(7)), CooldownExact.Instance(2500, HealGroup.Instance(8,250,"Puppets")), CooldownExact.Instance(2500, Heal.Instance(1, 250, 0x2f8c)) )) ) .Init(0x2f8d, Behaves("Assasin Puppet", new RunBehaviors( SmoothWandering.Instance(3,2), CooldownExact.Instance(400, SimpleAttack.Instance(6, projectileIndex: 0)), Cooldown.Instance(2500, ThrowAttack.Instance(3, 10, 80)) )) ) .Init(0x2f8e, Behaves("Archer Puppet", new RunBehaviors( SmoothWandering.Instance(3,2), CooldownExact.Instance(400, MultiAttack.Instance(8, 15*(float) Math.PI/180,3,0,projectileIndex:0)), CooldownExact.Instance(3000, SimpleAttack.Instance(12,projectileIndex:1)) )) ) .Init(0x2f8f, Behaves("Puppet Master", new RunBehaviors( HpLesser.Instance(5000, new SetKey(-1,7)), Once.Instance(new SetKey(-1,0)), IfEqual.Instance(-1,0, new RunBehaviors( If.Instance(IsEntityPresent.Instance(8, null), new SetKey(-1,1)) )), IfEqual.Instance(-1,1, new QueuedBehavior( SetConditionEffect.Instance(ConditionEffectIndex.Invulnerable), new SimpleTaunt("Welcome to the Final Act, my friends. My Puppets require life essence in order to continue performing..."), CooldownExact.Instance(3500), new SimpleTaunt("Its not much, but your lives will have to do for now !"), CooldownExact.Instance(2000), new SetKey(-1,2) )), IfEqual.Instance(-1,2, new RunBehaviors( UnsetConditionEffect.Instance(ConditionEffectIndex.Invulnerable), SetConditionEffect.Instance(ConditionEffectIndex.Armored), InfiniteSpiralAttack.Instance(300, 5, -7.5f, projectileIndex: 1), InfiniteSpiralAttack.Instance(301, 5, 7.5f, projectileIndex: 1), new QueuedBehavior( SpawnMinionImmediate.Instance(0x2f8c,3,2,3), SpawnMinionImmediate.Instance(0x2f87,3,2,3), CooldownExact.Instance(7000), new SetKey(-1, 3) ) ) ), IfEqual.Instance(-1,4, new RunBehaviors( UnsetConditionEffect.Instance(ConditionEffectIndex.Invulnerable), InfiniteSpiralAttack.Instance(150, 5, 7, projectileIndex:1), new QueuedBehavior( new SimpleTaunt("Watch them dance, hero , as they drain your life away !"), SpawnMinionImmediate.Instance(0x2f8c,3,0,1), SpawnMinionImmediate.Instance(0x2f87,3,0,1), CooldownExact.Instance(7000), new SetKey(-1, 5) ) )), IfEqual.Instance(-1,3, new RunBehaviors( SmoothWandering.Instance(2, 3), SetConditionEffect.Instance(ConditionEffectIndex.Invulnerable), UnsetConditionEffect.Instance(ConditionEffectIndex.Armored), Flashing.Instance(100, 0xff0000ff), new QueuedBehavior( CooldownExact.Instance(1800), new SetKey(-1, 4) ) ) ), IfEqual.Instance(-1,5, new RunBehaviors( SmoothWandering.Instance(2f, 4f), UnsetConditionEffect.Instance(ConditionEffectIndex.Invulnerable), CooldownExact.Instance(1000, RingAttack.Instance(7,4,0,2)), CooldownExact.Instance(1500, MultiAttack.Instance(5, 15*(float) Math.PI/180, 3, 0)), new QueuedBehavior( new SimpleTaunt("Find me if you can hero ! Or die trying !"), SpawnMinionImmediate.Instance(0x2f92,5,3,5), CooldownExact.Instance(12000), OrderAllEntity.Instance(50, 0x2f92 , new SetKey(-1,0)), CooldownExact.Instance(100), new SetKey(-1,6) ))), IfEqual.Instance(-1,6, new RunBehaviors( SmoothWandering.Instance(2, 3), SetConditionEffect.Instance(ConditionEffectIndex.Invulnerable), UnsetConditionEffect.Instance(ConditionEffectIndex.Armored), Flashing.Instance(100, 0xff0000ff), new QueuedBehavior( CooldownExact.Instance(1800), new SetKey(-1, 2) ) ) ), IfEqual.Instance(-1,7, new QueuedBehavior( SetConditionEffect.Instance(ConditionEffectIndex.Invincible), UnsetConditionEffect.Instance(ConditionEffectIndex.Armored), new SimpleTaunt("NO!!! This cannot be how my story ends !! I WILL HAVE MY ENCORE, HERO !"), CooldownExact.Instance(5000), SpawnMinionImmediate.Instance(0x2f95,1,1,1), Cooldown.Instance(1), Die.Instance ) )) )) .Init(0x2f92, Behaves("Puppet Master Clone", new RunBehaviors( Once.Instance(new SimpleTaunt("Find me if you can hero ! Or die trying !")), SetSize.Instance(150), CooldownExact.Instance(1000, RingAttack.Instance(7,4,0,2)), CooldownExact.Instance(1500, MultiAttack.Instance(5, 15*(float) Math.PI/180, 3, 0)), Circling.Instance(7, 20, 3, 0x2f8f), IfEqual.Instance(-1,0, Die.Instance) )) ) .Init(0x2f95, Behaves("Puppet Master Treasure", new RunBehaviors( Once.Instance(SetConditionEffect.Instance(ConditionEffectIndex.Invulnerable)), Once.Instance(new SetKey(-1,0)), IfEqual.Instance(-1,0, new QueuedBehavior( CooldownExact.Instance(2500), UnsetConditionEffect.Instance(ConditionEffectIndex.Invulnerable), new SetKey(-1,1) )) ), loot: new LootBehavior(LootDef.Empty, Tuple.Create(100, new LootDef(1, 3, 1, 4, Tuple.Create(0.025, (ILoot)new TierLoot(11, ItemType.Weapon)), Tuple.Create(0.025, (ILoot)new TierLoot(12, ItemType.Armor)), Tuple.Create(0.03, (ILoot)new TierLoot(11, ItemType.Armor)), Tuple.Create(0.02, (ILoot)new TierLoot(5, ItemType.Ring)), Tuple.Create(0.035, (ILoot)new TierLoot(10, ItemType.Weapon)), Tuple.Create(0.035, (ILoot)new TierLoot(10, ItemType.Armor)), Tuple.Create(0.055, (ILoot)new TierLoot(5, ItemType.Ability)), Tuple.Create(1.0, (ILoot)new StatPotionLoot(StatPotion.Att)) )) ) ) ); //0x2f8f // loot: new LootBehavior(LootDef.Empty, // Tuple.Create(100, new LootDef(1, 3, 1, 4, // Tuple.Create(0.015, (ILoot)new ItemLoot("Poop Sword")), // Tuple.Create(0.025, (ILoot)new TierLoot(11, ItemType.Weapon)), // Tuple.Create(0.025, (ILoot)new TierLoot(12, ItemType.Armor)), // Tuple.Create(0.03, (ILoot)new TierLoot(11, ItemType.Armor)), // Tuple.Create(0.02, (ILoot)new TierLoot(5, ItemType.Ring)), // Tuple.Create(0.035, (ILoot)new TierLoot(10, ItemType.Weapon)), // Tuple.Create(0.035, (ILoot)new TierLoot(10, ItemType.Armor)), // Tuple.Create(0.055, (ILoot)new TierLoot(5, ItemType.Ability)), // Tuple.Create(1.0, (ILoot)new StatPotionLoot(StatPotion.Att)) // )) // ) } }
NOTE : This behavior is close to the original from rotmg , BUT I made it harder and more challenging . Also I didn't make this so It can support the dungeon like prod ( move to center , go back ) , and it is kinda complete. Feel free to edit it , and also credit me if you do anything with it.
Also the loot isn't like the original, If you do a better version by editing this , please send it to me so I can have it :3 , Missed oryx treasure.
Last edited by pLolz; 10-15-2014 at 02:09 PM.
CONTACT : Skype = Jailedfresh
I guess I'm back..
[MPGH]Ahl (10-15-2014),KieronZeCoder69 (10-16-2014),Omniraptor (10-15-2014),sacredmike (12-26-2014),SaltyButSpeedy (10-15-2014),sebastianfra12 (12-21-2014),TJRAE%TJAJAZetjtjtjjt (10-16-2014)
Dammit ... wrong section. can someone move this ?
CONTACT : Skype = Jailedfresh
I guess I'm back..
dem drops
// Tuple.Create(0.015, (ILoot)new ItemLoot("Poop Sword")),
only 0.015 chance
BlackRayquaza (10-18-2014)
Oh cool plolz thanks for this ^.^
any news on dj manual knees?
what else should I do ?
CONTACT : Skype = Jailedfresh
I guess I'm back..
Make the LoD Behavior
News Force Head Editor from 09/14/2018 - 03/02/2020
Publicist from 11/23/2017 - 06/07/2019
Global Moderator since 09/24/2017
Minion+ from 04/16/2017 - 09/24/2017
Market Place Minion from 04/16/2017 - 09/24/2017
Minecraft Minion from 02/23/2017 - 09/24/2017
Realm of the Mad God Minion from 11/06/2016 - 09/24/2017
Middleman from 09/14/2016 - 09/24/2017
News Force Editor from 08/23/2016 - 09/14/2018
News Force (Section of the Week) from 03/21/2016 - 07/17/2017
News Force (User News) from 10/18/2015 - 09/14/2018
Donator since 03/16/2015
Realm of the Mad God Editor from 05/20/2014 - 07/08/2014
Member since 12/23/2012
Rep Power: 82
Last edited by pLolz; 10-16-2014 at 01:37 AM.
CONTACT : Skype = Jailedfresh
I guess I'm back..
CONTACT : Skype = Jailedfresh
I guess I'm back..
I would say that the old system gives you a little more flexibility, but new system easier to read and understand and you can code some pretty complex stuff in far few lines. If you need some kind of complex behavior that existing behavior logic wouldn't allow for, just code up the behavior logic for it.
The biggest difference I see between the two is how timing is dealt with. Old system, you have full control over how events are timed. New system gives less control over timing actions (unless one resorts to making 10 million different states and exits them with a TimedTransistion, which is probably on par with how one codes using the old behavior system).
One thing I haven't figure out how to do with new behavior system (that I think old behavior system handles) is conditionals. For example, limon does a ring attack with many projectiles when paralyzed. I don't know how to tell the new state system to move to a certain state based on what condition effects it has.
Last edited by nilly; 10-16-2014 at 09:13 AM.
Be careful, stray too far from the pack and you'll get lost.