public void Run(int tX, int tY) { int sx = Creature.PosX; int sy = Creature.PosY; int dir = Directions.GetDirByCoords(sx, sy, tX, tY); if (GlobalVars.nwrWin.Style == NWMainWindow.RGS_MODERN) { dir = NWCreature.ShootIsoTrans[dir]; } ProjectileItem.SetPos(sx, sy); ProjectileItem.Frame = (byte)dir; AuxUtils.DoLine(sx, sy, tX, tY, LineProc, true); if (ProjectileItem.Entry.Flags.Contains(ItemFlags.if_ReturnWeapon)) { Creature.PickupItem(ProjectileItem); ProjectileItem.InUse = true; } else { bool loss; if (ProjectileItem.Unique) { loss = false; } else { bool hit = (Hit != HIT_NONE); loss = ProjectileItem.IsBreakage(hit) || Map.CanSink(ProjectileItem.PosX, ProjectileItem.PosY); } if (loss) { Map.Items.Remove(ProjectileItem); } else { Map.RepackItems(); } } }
public void Exec(NWCreature creature, EffectID effectID, InvokeMode invokeMode, EffectExt ext, string rayMsg) { GlobalVars.nwrWin.ShowText(creature, rayMsg); int i = Effect.GetMagnitude(effectID); EffectTarget target = EffectTarget.et_None; if ((ext.ReqParams.Contains(EffectParams.ep_Direction))) { target = EffectTarget.et_Direction; } else { if ((ext.ReqParams.Contains(EffectParams.ep_Creature))) { target = EffectTarget.et_Creature; } } int x; int y; int x2; int y2; if (target != EffectTarget.et_Direction) { if (target != EffectTarget.et_Creature) { return; } x = creature.PosX; y = creature.PosY; NWCreature extCr = (NWCreature)ext.GetParam(EffectParams.ep_Creature); x2 = extCr.PosX; y2 = extCr.PosY; int dir = Directions.GetDirByCoords(x, y, x2, y2); x += Directions.Data[dir].DX; y += Directions.Data[dir].DY; } else { int dir = (int)ext.GetParam(EffectParams.ep_Direction); x = creature.PosX + Directions.Data[dir].DX; y = creature.PosY + Directions.Data[dir].DY; x2 = x + Directions.Data[dir].DX * i; y2 = y + Directions.Data[dir].DY * i; } Creature = creature; Dir = Directions.GetDirByCoords(x, y, x2, y2); EffID = effectID; Field = Creature.CurrentField; int eid = (int)effectID; EffectRec effRec = EffectsData.dbEffects[eid]; if (effRec.FrameCount > 0) { MapObject = new MapObject(creature.Space, Field); MapObject.InitByEffect(effectID); Field.Features.Add(MapObject); } else { MapObject = null; } TargetMeeted = AuxUtils.DoLine(x, y, x2, y2, LineProc, true); if (MapObject != null) { Field.Features.Remove(MapObject); } }