Aktionen der Schergen mit Dynasty Sim ausführen

    • Aktionen der Schergen mit Dynasty Sim ausführen

      Hallo zusammen,

      dank 4.2 bin ich wieder voll in Gildelaune (an dieser Stelle ein großes großes Danke dafür, ich werde wenn ich die Zeit finde auch noch in dem Bugforum soviel berichten wie ich kann).

      Ich versuche mich gerade daran, die Fähigkeiten der Schergen auch für die Dynasty Chars zugänglich zu machen. Besonders wichtig wäre mir hierbei die Maßnahme "Sich umhören". Leider habe ich das nicht hinbekommen. Ich bin soweit, dass ich die Maßnahme auf dem Dynasty Sim angezeigt bekomme, und beim Klicken darauf auch den gewohnten Zielradius bekomme. Leider passiert danach gar nichts.

      Vorgegangen bin ich folgendermaßen:

      Zuerst habe ich in der MeasureToObjects.dbt den bereits vorhandenen Eintrag für die Schergen in eine neue Zeile inklusiver neuer ID kopiert. Der Alte Eintrag lautet:

      Spoiler anzeigen
      13 2110 1 0 272 1 "" (4) "" 0 0 |


      Die 2110 bezieht sich ja auf die Maßnahme, das 272 auf den Filter, das 1 dahinter für das MeasureObject Sim.
      Mein neuer Eintrag sieht nun so aus:

      Spoiler anzeigen
      2399 2110 1 0 10 6 "" (4) "" 0 0 |


      Dabei habe ich den Filter durch 10 ersetzt. Dieser geht nur auf die Abfrage Object.CanBeControlled und sollte demnach keine Einschänkungen für kontrollierbare Chars bilden. Das MeasureObject habe ich auf 6 gestellt (DynastySim).

      Bin ich so weit richtig vorgegangen? Ich habe die Vermutung, dass der Fehler im Script liegt, aber blicke hier nicht durch. Das aufgerufene Script heißt ms_211_OrderCollectEvidence.lua und sieht folgendermaßen aus:

      Spoiler anzeigen
      function Run()
      --how far the Destination can be to start this action
      local MaxDistance = 1000
      --how far from the destination, the owner should stand while reading the letter from rome
      local ActionDistance = 80

      StartGameTimer(8)
      f_ExitCurrentBuilding("Owner")

      if not AliasExists("Destination") then
      CopyAlias("", "Destination")
      end
      MeasureSetNotRestartable()
      f_MoveTo("","Destination")

      if not SimGetWorkingPlace("Owner","WorkBuilding") then
      return
      end
      local IsMonitor = false
      if not BuildingGetOwner("WorkBuilding","BuildingOwner") then
      if SimGetProfession("")==GL_PROFESSION_MONITOR then
      SimGetServantDynasty("","BuildingOwner")
      IsMonitor = true
      --sim is monitor
      else
      return
      end
      end

      MsgMeasure("","@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_ACTION_+0")

      local Total = 0

      while not CheckGameTimerEnd() do

      local NumOfObjects = Find("Owner","__F( (Object.GetObjectsByRadius(Sim)==3000) AND NOT(Object.BelongsToMe())AND(Object.CanBeInterrupted(OrderCollectEvidence))AND NOT(Object.GetState(cutscene))AND NOT(Object.HasImpact(HasBeenTalked))AND NOT(Object.GetProfession() == 25)AND NOT(Object.GetProfession() == 21)AND NOT(Object.GetProfession() == 22))","Sims",-1)
      if NumOfObjects>0 then
      local DestAlias = "Sims"..Rand(NumOfObjects)
      CopyAlias(DestAlias, "VictimSim")
      local Check = true
      if IsDynastySim("VictimSim") and DynastyIsPlayer("VictimSim") then
      Check = false
      end

      if HasProperty("VictimSim","QuestActive") then
      Check = false
      end

      if Check then
      if ai_StartInteraction("", "VictimSim", MaxDistance, ActionDistance, "BlockMe") then
      AddImpact("VictimSim","HasBeenTalked",1,6)
      AlignTo("VictimSim","")
      Sleep(0.7)
      PlayAnimationNoWait("Owner", "talk")
      if SimGetGender("")==GL_GENDER_MALE then
      PlaySound3DVariation("","CharacterFX/male_neutral",1)
      else
      PlaySound3DVariation("","CharacterFX/female_neutral",1)
      end
      Sleep(0.75)
      PlayAnimation("VictimSim", "talk")
      local Cnt = Talk("", "VictimSim", true)
      if Cnt>0 then
      if SimGetGender("")==GL_GENDER_MALE then
      PlaySound3DVariation("","CharacterFX/male_amazed",1)
      else
      PlaySound3DVariation("","CharacterFX/female_amazed",1)
      end
      if IsMonitor then
      feedback_MessageCharacter("BuildingOwner",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_HEAD_+0",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_BODY_+0",GetID(""))
      Total = Total + Cnt
      else
      feedback_MessageCharacter("",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_HEAD_+0",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_BODY_+0",GetID(""))
      Total = Total + Cnt
      end
      end
      else
      f_MoveTo("","Destination",GL_MOVESPEED_RUN)
      Sleep(1)
      end
      SetData("CollectEBlocked"..GetID("VictimSim"), 1)
      end
      else
      f_MoveTo("","Destination")
      end
      Sleep(2)
      end

      if Total == 0 then
      if IsMonitor then
      feedback_MessageCharacter("BuildingOwner",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_HEAD_+0",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_BODY_+0",GetID(""))
      else
      feedback_MessageCharacter("",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_HEAD_+0",
      "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_BODY_+0",GetID(""))
      end
      end

      f_MoveTo("","Workbuilding")
      end

      function BlockMe()
      SetData("CollectEBlocked"..GetID("VictimSim"), 0)
      local Fcount = 0
      while GetData("CollectEBlocked"..GetID("VictimSim"))~=1 do
      Fcount = Fcount +1
      if Fcount > 75 then
      SetData("CollectEBlocked"..GetID("VictimSim"),1)
      end
      Sleep(0.5)
      end
      MoveSetActivity("VictimSim","")
      end

      function CleanUp()
      StopAnimation("Owner")
      end


      Hat einer eine Idee, wo der Fehler liegt?

      Vielen Dank und schonmal ein frohes Neues Jahr euch allen,
      R.
    • AW: Aktionen der Schergen mit Dynasty Sim ausführen

      Probiere es mal damit ;) würde ich zumindest auf die Art versuchen^^ vllt. geht's vllt auch nicht^^

      Quellcode

      1. function Run()
      2. --how far the Destination can be to start this action
      3. local Maistance = 1000
      4. --how far from the destination, the owner should stand while reading the letter from rome
      5. local ActionDistance = 80
      6. StartGameTimer(8)
      7. f_ExitCurrentBuilding("Owner")
      8. if not AliasExists("Destination") then
      9. CopyAlias("", "Destination")
      10. end
      11. MeasureSetNotRestartable()
      12. f_MoveTo("","Destination")
      13. if IsDynastySim("", false) then --neu, stellt sicher, dass der beauftragte Sim kein DynSim ist, wenn das so ist, dann soll er das folgende machen, wenn Sim = DynSim, dann überspringt er das hier
      14. if not SimGetWorkingPlace("Owner","WorkBuilding") then
      15. return
      16. end
      17. local IsMonitor = false
      18. if not BuildingGetOwner("WorkBuilding","BuildingOwner") then
      19. if SimGetProfession("")==GL_PROFESSION_MONITOR then
      20. SimGetServantDynasty("","BuildingOwner")
      21. IsMonitor = true
      22. --sim is monitor
      23. else
      24. return
      25. end
      26. end
      27. end
      28. MsgMeasure("","@L_GENERAL_MEASURES_211_ORDERCOLLEC TEVIDENCE_ACTION_+0")
      29. local Total = 0
      30. while not CheckGameTimerEnd() do
      31. local NumOfObjects = Find("Owner","__F( (Object.GetObjectsByRadius(Sim)==3000) AND NOT(Object.BelongsToMe())AND(Object.CanBeInterrupt ed(OrderCollectEvidence))AND NOT(Object.GetState(cutscene))AND NOT(Object.HasImpact(HasBeenTalked))AND NOT(Object.GetProfession() == 25)AND NOT(Object.GetProfession() == 21)AND NOT(Object.GetProfession() == 22))","Sims",-1)
      32. if NumOfObjects>0 then
      33. local DestAlias = "Sims"..Rand(NumOfObjects)
      34. CopyAlias(DestAlias, "VictimSim")
      35. local Check = true
      36. if IsDynastySim("VictimSim") and DynastyIsPlayer("VictimSim") then
      37. Check = false
      38. end
      39. if HasProperty("VictimSim","QuestActive") then
      40. Check = false
      41. end
      42. if Check then
      43. if ai_StartInteraction("", "VictimSim", Maistance, ActionDistance, "BlockMe") then
      44. AddImpact("VictimSim","HasBeenTalked",1,6)
      45. AlignTo("VictimSim","")
      46. Sleep(0.7)
      47. PlayAnimationNoWait("Owner", "talk")
      48. if SimGetGender("")==GL_GENDER_MALE then
      49. PlaySound3DVariation("","CharacterFX/male_neutral",1)
      50. else
      51. PlaySound3DVariation("","CharacterFX/female_neutral",1)
      52. end
      53. Sleep(0.75)
      54. PlayAnimation("VictimSim", "talk")
      55. local Cnt = Talk("", "VictimSim", true)
      56. if Cnt>0 then
      57. if SimGetGender("")==GL_GENDER_MALE then
      58. PlaySound3DVariation("","CharacterFX/male_amazed",1)
      59. else
      60. PlaySound3DVariation("","CharacterFX/female_amazed",1)
      61. end
      62. if IsMonitor then
      63. feedback_MessageCharacter("BuildingOwner",
      64. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ SUCCESS_HEAD_+0",
      65. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ SUCCESS_BODY_+0",GetID(""))
      66. Total = Total + Cnt
      67. else
      68. feedback_MessageCharacter("",
      69. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ SUCCESS_HEAD_+0",
      70. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ SUCCESS_BODY_+0",GetID(""))
      71. Total = Total + Cnt
      72. end
      73. end
      74. else
      75. f_MoveTo("","Destination",GL_MOVESPEED_RUN)
      76. Sleep(1)
      77. end
      78. SetData("CollectEBlocked"..GetID("VictimSim"), 1)
      79. end
      80. else
      81. f_MoveTo("","Destination")
      82. end
      83. Sleep(2)
      84. end
      85. if Total == 0 then
      86. if IsMonitor then
      87. feedback_MessageCharacter("BuildingOwner",
      88. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ FAILED_HEAD_+0",
      89. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ FAILED_BODY_+0",GetID(""))
      90. else
      91. feedback_MessageCharacter("",
      92. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ FAILED_HEAD_+0",
      93. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_ FAILED_BODY_+0",GetID(""))
      94. end
      95. end
      96. f_MoveTo("","Workbuilding")
      97. end
      98. function BlockMe()
      99. SetData("CollectEBlocked"..GetID("VictimSim"), 0)
      100. local Fcount = 0
      101. while GetData("CollectEBlocked"..GetID("VictimSim"))~=1 do
      102. Fcount = Fcount +1
      103. if Fcount > 75 then
      104. SetData("CollectEBlocked"..GetID("VictimSim"),1)
      105. end
      106. Sleep(0.5)
      107. end
      108. MoveSetActivity("VictimSim","")
      109. end
      110. function CleanUp()
      111. StopAnimation("Owner")
      112. end
      Alles anzeigen
    • AW: Aktionen der Schergen mit Dynasty Sim ausführen

      Hey Napi,

      danke für deine Antwort, so wie ich das lese, müsste bei dem then jetzt eine neue Funktion geschrieben werden. Ich komme leider an der Stelle aber nicht weiter, diese Scriptsprache beherrsche ich nicht. Ich hatte gehofft, dass es nicht so aufwändig werden müsste und man nur einen Wert irgendwo ändern braucht.

      VG,
      R.
    • AW: Aktionen der Schergen mit Dynasty Sim ausführen

      ramadeon schrieb:

      Hey Napi,

      danke für deine Antwort, so wie ich das lese, müsste bei dem then jetzt eine neue Funktion geschrieben werden. Ich komme leider an der Stelle aber nicht weiter, diese Scriptsprache beherrsche ich nicht. Ich hatte gehofft, dass es nicht so aufwändig werden müsste und man nur einen Wert irgendwo ändern braucht.

      VG,
      R.


      An sich ist es relativ einfach (wobei mir auffällt, dass ich da nen Fehler gemacht habe... if IsDynastySim("", false) müsste eigentlich if not IsDynastySim ("") heißen).

      Nach dem "then" kommt die die Funktion, die abfragt, für welches Gebäude der Sim der die Measure ausführt arbeitet (""), aber halt nur, wenn er kein Dynastiemitglied ist.^^ Wenn er ein Dynastiemitglied ist, wird das ganze Ding einfach bis zum passenden "end" übersprungen.^^
    • AW: Aktionen der Schergen mit Dynasty Sim ausführen

      Fajeth schrieb:

      Du kannst einfach die Filter anpassen

      272 "CanCollectEvidence" "__F((Object.CanBeControlled())AND(Object.GetProfession()== 18)AND(Object.GetWorkBuilding())AND(Object.IsType(2))AND(Object.HasUpgrade(Commode)))" |


      Du mit deinen Filtern... ^^ Scripten macht doch allen viel mehr Spaß :P
    • AW: Aktionen der Schergen mit Dynasty Sim ausführen

      Napi96 schrieb:

      egal...^^ ich mag das Denken^^ das Knobeln.^^ ich würde es scriptseitig lösen^^


      Es ist trotzdem der Falsche weg wenn es es prinzipiell über die Filter geregelt wird. JEder Script verursacht lagged und potentielle oos.
      „And I heard a voice in the midst of the four beasts, and I looked and behold, a pale horse.
      And his name that sat on him was Death, and Hell followed with him.“
    • hallo leute,

      ich habe dieses problem damals nicht lösen können und stehe nun erneut davor und möchte es nun, zwei jahre später immer noch knacken, echt lästig :).

      ich habe soweit das icon für den dynsim ins spiel gebracht indem ich einfach eine neue measuretoobject instance erzeugt habe, die nun einfach auf filter 10 für object 6 verweist. damit erhält der dynasty sim gleich von anfang an die maßnahme.

      im gegensatz zu den schergen, bei denen die maßnahme funktioniert, klappt diese beim dynsim aber nicht. es passiert folgendes: man klickt auf "sich umhören", bekommt den radius selektor und wenn man irgendwo hingeklickt hat, macht der dynsim nichts weiter.

      ist das ein problem im script? leider verstehe ich die scriptsprache nicht. könnte mir vielleicht ein scriptkundiger da kurz weiterhelfenhelfen? was muss an dem script verändert werden, damit es durch einen dynsim ausgeführt werden kann?

      vielen dank schonmal im voraus!,
      r.

      Quellcode

      1. function Run()
      2. --how far the Destination can be to start this action
      3. local MaxDistance = 1000
      4. --how far from the destination, the owner should stand while reading the letter from rome
      5. local ActionDistance = 80
      6. StartGameTimer(8)
      7. f_ExitCurrentBuilding("Owner")
      8. if not AliasExists("Destination") then
      9. CopyAlias("", "Destination")
      10. end
      11. MeasureSetNotRestartable()
      12. f_MoveTo("","Destination")
      13. if not SimGetWorkingPlace("Owner","WorkBuilding") then
      14. return
      15. end
      16. local IsMonitor = false
      17. if not BuildingGetOwner("WorkBuilding","BuildingOwner") then
      18. if SimGetProfession("")==GL_PROFESSION_MONITOR then
      19. SimGetServantDynasty("","BuildingOwner")
      20. IsMonitor = true
      21. --sim is monitor
      22. else
      23. return
      24. end
      25. end
      26. MsgMeasure("","@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_ACTION_+0")
      27. local Total = 0
      28. while not CheckGameTimerEnd() do
      29. local NumOfObjects = Find("Owner","__F( (Object.GetObjectsByRadius(Sim)==3000) AND NOT(Object.BelongsToMe())AND(Object.CanBeInterrupted(OrderCollectEvidence))AND NOT(Object.GetState(cutscene))AND NOT(Object.HasImpact(HasBeenTalked))AND NOT(Object.GetProfession() == 25)AND NOT(Object.GetProfession() == 21)AND NOT(Object.GetProfession() == 22))","Sims",-1)
      30. if NumOfObjects>0 then
      31. local DestAlias = "Sims"..Rand(NumOfObjects)
      32. CopyAlias(DestAlias, "VictimSim")
      33. local Check = true
      34. if IsDynastySim("VictimSim") and DynastyIsPlayer("VictimSim") then
      35. Check = false
      36. end
      37. if HasProperty("VictimSim","QuestActive") then
      38. Check = false
      39. end
      40. if Check then
      41. if ai_StartInteraction("", "VictimSim", MaxDistance, ActionDistance, "BlockMe") then
      42. AddImpact("VictimSim","HasBeenTalked",1,6)
      43. AlignTo("VictimSim","")
      44. Sleep(0.7)
      45. PlayAnimationNoWait("Owner", "talk")
      46. if SimGetGender("")==GL_GENDER_MALE then
      47. PlaySound3DVariation("","CharacterFX/male_neutral",1)
      48. else
      49. PlaySound3DVariation("","CharacterFX/female_neutral",1)
      50. end
      51. Sleep(0.75)
      52. PlayAnimation("VictimSim", "talk")
      53. local Cnt = Talk("", "VictimSim", true)
      54. if Cnt>0 then
      55. if SimGetGender("")==GL_GENDER_MALE then
      56. PlaySound3DVariation("","CharacterFX/male_amazed",1)
      57. else
      58. PlaySound3DVariation("","CharacterFX/female_amazed",1)
      59. end
      60. if IsMonitor then
      61. feedback_MessageCharacter("BuildingOwner",
      62. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_HEAD_+0",
      63. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_BODY_+0",GetID(""))
      64. Total = Total + Cnt
      65. else
      66. feedback_MessageCharacter("",
      67. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_HEAD_+0",
      68. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_SUCCESS_BODY_+0",GetID(""))
      69. Total = Total + Cnt
      70. end
      71. end
      72. else
      73. f_MoveTo("","Destination",GL_MOVESPEED_RUN)
      74. Sleep(1)
      75. end
      76. SetData("CollectEBlocked"..GetID("VictimSim"), 1)
      77. end
      78. else
      79. f_MoveTo("","Destination")
      80. end
      81. Sleep(2)
      82. end
      83. if Total == 0 then
      84. if IsMonitor then
      85. feedback_MessageCharacter("BuildingOwner",
      86. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_HEAD_+0",
      87. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_BODY_+0",GetID(""))
      88. else
      89. feedback_MessageCharacter("",
      90. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_HEAD_+0",
      91. "@L_GENERAL_MEASURES_211_ORDERCOLLECTEVIDENCE_MSG_FAILED_BODY_+0",GetID(""))
      92. end
      93. end
      94. f_MoveTo("","Workbuilding")
      95. end
      96. function BlockMe()
      97. SetData("CollectEBlocked"..GetID("VictimSim"), 0)
      98. local Fcount = 0
      99. while GetData("CollectEBlocked"..GetID("VictimSim"))~=1 do
      100. Fcount = Fcount +1
      101. if Fcount > 75 then
      102. SetData("CollectEBlocked"..GetID("VictimSim"),1)
      103. end
      104. Sleep(0.5)
      105. end
      106. MoveSetActivity("VictimSim","")
      107. end
      108. function CleanUp()
      109. StopAnimation("Owner")
      110. end
      Alles anzeigen
    • Huhu,

      Sehr gute Lösung mit MeasureToObjects, im Gegensatz zu dem Quatsch, den ich damals geschrieben habe ^^

      Ich denke, das Problem ist das hier

      1. if not SimGetWorkingPlace("Owner","WorkBuilding") then
      2. return
      3. end



      Das Script sucht nach einem Arbeitsplatz. Den hat ein DynastieSim logischerweise nicht. Also verändere die Anfrage, damit dieser Fall abgefangen wird. Ein DynastieSim könnte sich ja den Alias für seinen Wohnsitz holen:

      if IsDynastySim("Owner") then
      if not GetHomeBuilding("Owner","WorkBuilding") then
      return
      end
      else
      if not SimGetWorkingPlace("Owner","WorkBuilding") then
      return
      end
      end

      Das ganze noch anständig einrücken, fertig.