private static float ReduceDamage(IEventArgs args, FreeData fd, PlayerDamageInfo damage, ItemPosition ip, int percent, ItemType itemType) { if (ip != null) { float realDamage = damage.damage; float reduce = damage.damage * percent / 100; float realReduce = reduce; damage.damage -= realReduce; fd.Player.statisticsData.Statistics.DefenseDamage += reduce; // 普通帽子不减少 if (reduce > 0) { ip.SetCount(ip.GetCount() - (int)realDamage); UpdateGamePlayData(fd, ip, itemType); args.TempUse("current", fd); if (ip.GetCount() <= 0) { ip.GetInventory().RemoveItem((FreeRuleEventArgs)args, ip); FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10075," + ip.key.GetName() + "}"); } else { ip.GetInventory().GetInventoryUI().UpdateItem((FreeRuleEventArgs)args, ip.GetInventory(), ip); } args.Resume("current"); } } return(damage.damage); }
private static float ReduceDamage(IEventArgs args, PlayerEntity player, PlayerDamageInfo damage, int percent, bool armor) { float readDamage = damage.damage; if (damage.type != (int)EUIDeadType.Weapon && damage.type != (int)EUIDeadType.Unarmed) { return(readDamage); } float reduce = damage.damage * percent / 100; float realReduce = reduce; if (armor) { realReduce = Math.Min(player.gamePlay.CurArmor, reduce); } else { realReduce = Math.Min(player.gamePlay.CurHelmet, reduce); } damage.damage -= realReduce; FreeData fd = (FreeData)player.freeData.FreeData; // 普通帽子不减少 args.TempUse("current", fd); if (realReduce > 0) { if (armor) { player.gamePlay.CurArmor = Math.Max(0, player.gamePlay.CurArmor - (int)readDamage); if (player.gamePlay.CurArmor == 0) { PlayerItemAvatarAction.TakeOff(player, player.gamePlay.ArmorLv); FreeItemInfo info = FreeItemConfig.GetItemInfo((int)ECategory.Avatar, player.gamePlay.ArmorLv); FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10075," + info.name + "}"); } } else { player.gamePlay.CurHelmet = Math.Max(0, player.gamePlay.CurHelmet - (int)readDamage); if (player.gamePlay.CurHelmet == 0) { PlayerItemAvatarAction.TakeOff(player, player.gamePlay.HelmetLv); FreeItemInfo info = FreeItemConfig.GetItemInfo((int)ECategory.Avatar, player.gamePlay.HelmetLv); FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10075," + info.name + "}"); } } player.statisticsData.Statistics.DefenseDamage += realReduce; } args.Resume("current"); return(damage.damage); }
private void MovePartToWeapon(ServerRoom room, FreeData fd, ItemPosition ip, string to, FreeItemInfo info) { string inv = PickupItemUtil.AutoPutPart(fd, info, to, room); if (inv != null && inv != "default") { ItemInventory toInv = fd.freeInventory.GetInventoryManager().GetInventory(inv); int[] xy = toInv.GetNextEmptyPosition(ip.key); ItemInventoryUtil.MovePosition(ip, toInv, xy[0], xy[1], room.FreeArgs); } else { FuntionUtil.Call(room.FreeArgs, "showBottomTip", "msg", "{desc:10076}"); } }
public void ExecuteUserCmd(IUserCmdOwner owner, IUserCmd cmd) { PlayerEntity myEntity = owner.OwnerEntity as PlayerEntity; if (null == myEntity) { return; } if (myEntity.gamePlay.IsSave) { if (myEntity.time.ClientTime - myEntity.gamePlay.SaveTime >= SharedConfig.SaveNeedTime) { //正常结束 StopSave(myEntity); //统计救援人数 myEntity.statisticsData.Statistics.SaveCount++; return; } //打断救援(被救援者已不在) PlayerEntity teamEntity = _contexts.player.GetEntityWithEntityKey(myEntity.gamePlay.SavePlayerKey); if (null == teamEntity) { StopSave(myEntity, true); return; } //打断救援(除QE之外的任何动作 或 自己进入受伤/死亡状态) if (myEntity.stateInterface.State.NeedInterruptRescue((PostureInConfig)myEntity.gamePlay.SaveEnterState) || !myEntity.gamePlay.IsLifeState(EPlayerLifeState.Alive)) { StopSave(myEntity, true); if (teamEntity.gamePlay.IsBeSave) { StopBeSave(teamEntity, true); } } } else if (myEntity.gamePlay.IsBeSave) { if (myEntity.time.ClientTime - myEntity.gamePlay.SaveTime >= SharedConfig.SaveNeedTime) { //正常结束 StopBeSave(myEntity); //血量恢复10% myEntity.gamePlay.CurHp = (int)(myEntity.gamePlay.MaxHp * 0.1f); myEntity.gamePlay.ChangeLifeState(EPlayerLifeState.Alive, myEntity.time.ClientTime); //蹲下状态 // myEntity.stateInterface.State.Crouch(); return; } //打断救援(救援者已不在) PlayerEntity teamEntity = _contexts.player.GetEntityWithEntityKey(myEntity.gamePlay.SavePlayerKey); if (null == teamEntity) { StopBeSave(myEntity, true); return; } //打断救援(超出距离角度 或 自己已死亡) if (myEntity.gamePlay.IsDead() || Vector3.Distance(myEntity.position.Value, teamEntity.position.Value) > SharedConfig.MaxSaveDistance || GetAngle(teamEntity, myEntity) > SharedConfig.MaxSaveAngle) { StopBeSave(myEntity, true); if (teamEntity.gamePlay.IsSave) { StopSave(teamEntity, true); } } } else if (cmd.IsUseAction && cmd.UseType == (int)EUseActionType.Player) { //趴下不能救援 if (myEntity.stateInterface.State.GetCurrentPostureState() == PostureInConfig.Prone) { //TODO 弹出提示 if (SharedConfig.IsServer) { IEventArgs args = (IEventArgs)_contexts.session.commonSession.FreeArgs; args.TempUse("current", (FreeData)myEntity.freeData.FreeData); FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10077}"); args.Resume("current"); } else { myEntity.tip.TipType = ETipType.CanNotRescure; } return; } //实施救援 PlayerEntity teamEntity = _contexts.player.GetEntityWithEntityKey(new EntityKey(cmd.UseEntityId, (int)EEntityType.Player)); if (null != teamEntity) { myEntity.gamePlay.SaveEnterState = (int)myEntity.stateInterface.State.GetCurrentPostureState(); myEntity.gamePlay.IsSave = true; myEntity.gamePlay.SaveTime = myEntity.time.ClientTime; myEntity.gamePlay.SavePlayerKey = teamEntity.entityKey.Value; //救援动作 myEntity.stateInterface.State.Rescue(); teamEntity.gamePlay.IsBeSave = true; teamEntity.gamePlay.SaveTime = teamEntity.time.ClientTime; teamEntity.gamePlay.SavePlayerKey = myEntity.entityKey.Value; } } }
public static void UpdateBagCapacity(IEventArgs args, float weight, float capcacity) { FuntionUtil.Call(args, "updateBagCapacity", "weight", weight.ToString(), "capacity", capcacity.ToString()); }